Skip to content

Commit ad1d939

Browse files
committed
BUG/MINOR: Fix an incorrect lookup of the Endpoints corresponding to a
Service Port When looking to the Endpoints corresponding to a service Port we used to match the Service Port (Service.ports[].Port) against the Endpoints Port (TargetPort) which is incorrect because they are not necessarily the same. An example of ServicePort config that may trigger this bug: ports: - name: http port: 8080 protocol: TCP targetPort: 80 - name: http-alt port: 8888 protocol: TCP targetPort: 8080 If an ingress rule is using the "http" service port, the controller may pick the "http-alt" endpoints (instead of "http" ones) because http.8080 == http-atl.8080 The fix is to simply check if EndpointPort.Name == Service.ports[].Name when looking for corresponding endpoints.
1 parent d6e7b6b commit ad1d939

File tree

1 file changed

+3
-7
lines changed

1 file changed

+3
-7
lines changed

controller/service/endpoints.go

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -154,13 +154,9 @@ func (s *Service) getRuntimeBackend(k8s store.K8s) (backend *store.RuntimeBacken
154154
}
155155
return nil, fmt.Errorf("no available endpoints")
156156
}
157-
sp := s.path.SvcPortResolved
158-
if sp != nil {
159-
for portName, backend := range backends {
160-
if portName == sp.Name || backend.Endpoints.Port == sp.Port {
161-
return backend, nil
162-
}
163-
}
157+
svcPort := s.path.SvcPortResolved
158+
if svcPort != nil && backends[svcPort.Name] != nil {
159+
return backends[svcPort.Name], nil
164160
}
165161
if s.path.SvcPortString != "" {
166162
return nil, fmt.Errorf("no matching endpoints for port '%s'", s.path.SvcPortString)

0 commit comments

Comments
 (0)