From 8027e8ee2338426df362442a3eb4571fa40b124b Mon Sep 17 00:00:00 2001 From: Daniel Tomcej Date: Thu, 27 Jun 2019 01:42:03 -0600 Subject: [PATCH] Check for multiport services on Global Backend Ingress --- ...gressWithMultiplePortNumbers_endpoints.yml | 13 +++++++++ ...gressWithMultiplePortNumbers_ingresses.yml | 8 ++++++ ...ngressWithMultiplePortNumbers_services.yml | 14 ++++++++++ provider/kubernetes/kubernetes.go | 4 +++ provider/kubernetes/kubernetes_test.go | 27 +++++++++++++++++++ 5 files changed, 66 insertions(+) create mode 100644 provider/kubernetes/fixtures/loadGlobalIngressWithMultiplePortNumbers_endpoints.yml create mode 100644 provider/kubernetes/fixtures/loadGlobalIngressWithMultiplePortNumbers_ingresses.yml create mode 100644 provider/kubernetes/fixtures/loadGlobalIngressWithMultiplePortNumbers_services.yml diff --git a/provider/kubernetes/fixtures/loadGlobalIngressWithMultiplePortNumbers_endpoints.yml b/provider/kubernetes/fixtures/loadGlobalIngressWithMultiplePortNumbers_endpoints.yml new file mode 100644 index 000000000..292996f77 --- /dev/null +++ b/provider/kubernetes/fixtures/loadGlobalIngressWithMultiplePortNumbers_endpoints.yml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Endpoints +metadata: + name: service1 + namespace: testing +subsets: +- addresses: + - ip: 10.10.0.1 + ports: + - port: 8080 + name: http + - port: 1111 + name: foo diff --git a/provider/kubernetes/fixtures/loadGlobalIngressWithMultiplePortNumbers_ingresses.yml b/provider/kubernetes/fixtures/loadGlobalIngressWithMultiplePortNumbers_ingresses.yml new file mode 100644 index 000000000..59d5a17e8 --- /dev/null +++ b/provider/kubernetes/fixtures/loadGlobalIngressWithMultiplePortNumbers_ingresses.yml @@ -0,0 +1,8 @@ +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + namespace: testing +spec: + backend: + serviceName: service1 + servicePort: 80 diff --git a/provider/kubernetes/fixtures/loadGlobalIngressWithMultiplePortNumbers_services.yml b/provider/kubernetes/fixtures/loadGlobalIngressWithMultiplePortNumbers_services.yml new file mode 100644 index 000000000..ca64b04df --- /dev/null +++ b/provider/kubernetes/fixtures/loadGlobalIngressWithMultiplePortNumbers_services.yml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: Service +metadata: + name: service1 + namespace: testing +spec: + clusterIP: 10.0.0.1 + ports: + - name: http + port: 80 + targetPort: 8080 + - name: foo + port: 1111 + targetPort: 1111 diff --git a/provider/kubernetes/kubernetes.go b/provider/kubernetes/kubernetes.go index 21dad9ed9..be9b97ec2 100644 --- a/provider/kubernetes/kubernetes.go +++ b/provider/kubernetes/kubernetes.go @@ -508,6 +508,10 @@ func (p *Provider) addGlobalBackend(cl Client, i *extensionsv1beta1.Ingress, tem for _, port := range service.Spec.Ports { + if !equalPorts(port, i.Spec.Backend.ServicePort) { + continue + } + // We have to treat external-name service differently here b/c it doesn't have any endpoints if service.Spec.Type == corev1.ServiceTypeExternalName { diff --git a/provider/kubernetes/kubernetes_test.go b/provider/kubernetes/kubernetes_test.go index 8642a3654..99367c898 100644 --- a/provider/kubernetes/kubernetes_test.go +++ b/provider/kubernetes/kubernetes_test.go @@ -168,6 +168,33 @@ func TestProvider_loadIngresses(t *testing.T) { ), ), }, + { + desc: "loadGlobalIngressWithMultiplePortNumbers", + fixtures: []string{ + filepath.Join("fixtures", "loadGlobalIngressWithMultiplePortNumbers_ingresses.yml"), + filepath.Join("fixtures", "loadGlobalIngressWithMultiplePortNumbers_services.yml"), + filepath.Join("fixtures", "loadGlobalIngressWithMultiplePortNumbers_endpoints.yml"), + }, + expected: buildConfiguration( + backends( + backend("global-default-backend", + lbMethod("wrr"), + servers( + server("http://10.10.0.1:8080", weight(1)), + ), + ), + ), + frontends( + frontend("global-default-backend", + frontendName("global-default-frontend"), + passHostHeader(), + routes( + route("/", "PathPrefix:/"), + ), + ), + ), + ), + }, { desc: "loadGlobalIngressWithHttpsPortNames", fixtures: []string{