Initial support for Kubernetes ExternalName service type
This commit is contained in:
parent
01e3d7952a
commit
0947aa901e
2 changed files with 80 additions and 19 deletions
|
@ -193,6 +193,15 @@ func (provider *Kubernetes) loadIngresses(k8sClient k8s.Client) (*types.Configur
|
||||||
if port.Port == 443 {
|
if port.Port == 443 {
|
||||||
protocol = "https"
|
protocol = "https"
|
||||||
}
|
}
|
||||||
|
if service.Spec.Type == "ExternalName" {
|
||||||
|
url := protocol + "://" + service.Spec.ExternalName
|
||||||
|
name := url
|
||||||
|
|
||||||
|
templateObjects.Backends[r.Host+pa.Path].Servers[name] = types.Server{
|
||||||
|
URL: url,
|
||||||
|
Weight: 1,
|
||||||
|
}
|
||||||
|
} else {
|
||||||
endpoints, exists, err := k8sClient.GetEndpoints(service.ObjectMeta.Namespace, service.ObjectMeta.Name)
|
endpoints, exists, err := k8sClient.GetEndpoints(service.ObjectMeta.Namespace, service.ObjectMeta.Name)
|
||||||
if err != nil || !exists {
|
if err != nil || !exists {
|
||||||
log.Errorf("Error retrieving endpoints %s/%s: %v", service.ObjectMeta.Namespace, service.ObjectMeta.Name, err)
|
log.Errorf("Error retrieving endpoints %s/%s: %v", service.ObjectMeta.Namespace, service.ObjectMeta.Name, err)
|
||||||
|
@ -219,6 +228,7 @@ func (provider *Kubernetes) loadIngresses(k8sClient k8s.Client) (*types.Configur
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,13 @@ func TestLoadIngresses(t *testing.T) {
|
||||||
ServicePort: intstr.FromInt(80),
|
ServicePort: intstr.FromInt(80),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Path: "/namedthing",
|
||||||
|
Backend: v1beta1.IngressBackend{
|
||||||
|
ServiceName: "service4",
|
||||||
|
ServicePort: intstr.FromString("https"),
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -110,6 +117,24 @@ func TestLoadIngresses(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
ObjectMeta: v1.ObjectMeta{
|
||||||
|
Name: "service4",
|
||||||
|
UID: "4",
|
||||||
|
Namespace: "testing",
|
||||||
|
},
|
||||||
|
Spec: v1.ServiceSpec{
|
||||||
|
ClusterIP: "10.0.0.4",
|
||||||
|
Type: "ExternalName",
|
||||||
|
ExternalName: "example.com",
|
||||||
|
Ports: []v1.ServicePort{
|
||||||
|
{
|
||||||
|
Name: "https",
|
||||||
|
Port: 443,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
endpoints := []*v1.Endpoints{
|
endpoints := []*v1.Endpoints{
|
||||||
{
|
{
|
||||||
|
@ -221,6 +246,19 @@ func TestLoadIngresses(t *testing.T) {
|
||||||
Method: "wrr",
|
Method: "wrr",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"foo/namedthing": {
|
||||||
|
Servers: map[string]types.Server{
|
||||||
|
"https://example.com": {
|
||||||
|
URL: "https://example.com",
|
||||||
|
Weight: 1,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
CircuitBreaker: nil,
|
||||||
|
LoadBalancer: &types.LoadBalancer{
|
||||||
|
Sticky: false,
|
||||||
|
Method: "wrr",
|
||||||
|
},
|
||||||
|
},
|
||||||
"bar": {
|
"bar": {
|
||||||
Servers: map[string]types.Server{
|
Servers: map[string]types.Server{
|
||||||
"2": {
|
"2": {
|
||||||
|
@ -257,6 +295,19 @@ func TestLoadIngresses(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"foo/namedthing": {
|
||||||
|
Backend: "foo/namedthing",
|
||||||
|
PassHostHeader: true,
|
||||||
|
Priority: len("/namedthing"),
|
||||||
|
Routes: map[string]types.Route{
|
||||||
|
"/namedthing": {
|
||||||
|
Rule: "PathPrefix:/namedthing",
|
||||||
|
},
|
||||||
|
"foo": {
|
||||||
|
Rule: "Host:foo",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
"bar": {
|
"bar": {
|
||||||
Backend: "bar",
|
Backend: "bar",
|
||||||
PassHostHeader: true,
|
PassHostHeader: true,
|
||||||
|
|
Loading…
Add table
Reference in a new issue