From 0ac850cba4eeebf194d1236c265f6dc4d777aa8b Mon Sep 17 00:00:00 2001 From: Manuel Alejandro de Brito Fontes Date: Tue, 18 Jun 2019 17:17:43 -0400 Subject: [PATCH] Service type=ExternalName can be defined with ports --- internal/ingress/controller/controller.go | 33 ++++++++++++----------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/internal/ingress/controller/controller.go b/internal/ingress/controller/controller.go index 51c1ff2dc..4a1f3324b 100644 --- a/internal/ingress/controller/controller.go +++ b/internal/ingress/controller/controller.go @@ -850,24 +850,9 @@ func (n *NGINXController) serviceEndpoints(svcKey, backendPort string) ([]ingres } klog.V(3).Infof("Obtaining ports information for Service %q", svcKey) - for _, servicePort := range svc.Spec.Ports { - // targetPort could be a string, use either the port name or number (int) - if strconv.Itoa(int(servicePort.Port)) == backendPort || - servicePort.TargetPort.String() == backendPort || - servicePort.Name == backendPort { - - endps := getEndpoints(svc, &servicePort, apiv1.ProtocolTCP, n.store.GetServiceEndpoints) - if len(endps) == 0 { - klog.Warningf("Service %q does not have any active Endpoint.", svcKey) - } - - upstreams = append(upstreams, endps...) - break - } - } // Ingress with an ExternalName Service and no port defined for that Service - if len(svc.Spec.Ports) == 0 && svc.Spec.Type == apiv1.ServiceTypeExternalName { + if svc.Spec.Type == apiv1.ServiceTypeExternalName { externalPort, err := strconv.Atoi(backendPort) if err != nil { klog.Warningf("Only numeric ports are allowed in ExternalName Services: %q is not a valid port number.", backendPort) @@ -889,6 +874,22 @@ func (n *NGINXController) serviceEndpoints(svcKey, backendPort string) ([]ingres return upstreams, nil } + for _, servicePort := range svc.Spec.Ports { + // targetPort could be a string, use either the port name or number (int) + if strconv.Itoa(int(servicePort.Port)) == backendPort || + servicePort.TargetPort.String() == backendPort || + servicePort.Name == backendPort { + + endps := getEndpoints(svc, &servicePort, apiv1.ProtocolTCP, n.store.GetServiceEndpoints) + if len(endps) == 0 { + klog.Warningf("Service %q does not have any active Endpoint.", svcKey) + } + + upstreams = append(upstreams, endps...) + break + } + } + return upstreams, nil }