Skip to content

Commit

Permalink
Fix ExternalName services
Browse files Browse the repository at this point in the history
  • Loading branch information
aledbf committed Oct 26, 2017
1 parent 73f5b9b commit 0a2c77b
Showing 1 changed file with 26 additions and 0 deletions.
26 changes: 26 additions & 0 deletions pkg/ingress/controller/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -868,6 +868,29 @@ func (ic *GenericController) serviceEndpoints(svcKey, backendPort string,
}
}

// Ingress with an ExternalName service and no port defined in the service.
if len(svc.Spec.Ports) == 0 && svc.Spec.Type == apiv1.ServiceTypeExternalName {
externalPort, err := strconv.Atoi(backendPort)
if err != nil {
glog.Warningf("only numeric ports are allowed in ExternalName services: %v is not valid as a TCP/UDP port", backendPort)
return upstreams, nil
}

servicePort := apiv1.ServicePort{
Protocol: "TCP",
Port: int32(externalPort),
TargetPort: intstr.FromString(backendPort),
}
endps := ic.getEndpoints(svc, &servicePort, apiv1.ProtocolTCP, hz)
if len(endps) == 0 {
glog.Warningf("service %v does not have any active endpoints", svcKey)
return upstreams, nil
}

upstreams = append(upstreams, endps...)
return upstreams, nil
}

if !ic.cfg.SortBackends {
rand.Seed(time.Now().UnixNano())
for i := range upstreams {
Expand Down Expand Up @@ -1100,9 +1123,12 @@ func (ic *GenericController) getEndpoints(

// ExternalName services
if s.Spec.Type == apiv1.ServiceTypeExternalName {
glog.V(3).Info("Ingress using a service %v of type=ExternalName : %v", s.Name)

targetPort := servicePort.TargetPort.IntValue()
// check for invalid port value
if targetPort <= 0 {
glog.Errorf("ExternalName service with an invalid port: %v", targetPort)
return upsServers
}

Expand Down

0 comments on commit 0a2c77b

Please sign in to comment.