in pkg/kube/endpoint.go [151:198]
func (e *endpoint) Endpoints(svcPort *corev1.ServicePort) []HostPort {
var addrs []HostPort
if e.endpoint != nil {
for _, subset := range e.endpoint.Subsets {
epPort := -1
for _, subsetPort := range subset.Ports {
if subsetPort.Name == svcPort.Name {
epPort = int(subsetPort.Port)
break
}
}
if epPort != -1 {
for _, addr := range subset.Addresses {
addrs = append(addrs, HostPort{
Host: addr.IP,
Port: epPort,
})
}
}
}
} else {
for _, slice := range e.endpointSlices {
epPort := -1
for _, slicePort := range slice.Ports {
// TODO Consider the case that port not restricted.
if slicePort.Name != nil && *slicePort.Name == svcPort.Name && slicePort.Port != nil {
epPort = int(*slicePort.Port)
break
}
}
if epPort != -1 {
for _, ep := range slice.Endpoints {
if ep.Conditions.Ready != nil && !*ep.Conditions.Ready {
// Ignore not ready endpoints.
continue
}
for _, addr := range ep.Addresses {
addrs = append(addrs, HostPort{
Host: addr,
Port: epPort,
})
}
}
}
}
}
return addrs
}