in pkg/resolvers/endpoints.go [452:482]
func (r *defaultEndpointsResolver) getMatchingServicePort(ctx context.Context, svc *corev1.Service, port *intstr.IntOrString, protocol corev1.Protocol) (int32, error) {
if port == nil {
return 0, errors.New("unable to lookup service listen port, input port is nil")
}
if portVal, err := k8s.LookupServiceListenPort(svc, *port, protocol); err == nil {
return portVal, nil
} else {
r.logger.Info("Unable to lookup service port", "err", err)
}
// List pods matching the svc selector
podSelector, err := metav1.LabelSelectorAsSelector(metav1.SetAsLabelSelector(svc.Spec.Selector))
if err != nil {
return 0, err
}
podList := &corev1.PodList{}
if err := r.k8sClient.List(ctx, podList, &client.ListOptions{
LabelSelector: podSelector,
Namespace: svc.Namespace,
}); err != nil {
r.logger.Info("Unable to List Pods", "err", err)
return 0, err
}
for i := range podList.Items {
if portVal, err := k8s.LookupListenPortFromPodSpec(svc, &podList.Items[i], *port, protocol); err == nil {
return portVal, nil
} else {
r.logger.V(1).Info("The pod doesn't have port matched", "err", err, "pod", podList.Items[i])
}
}
return 0, errors.Errorf("unable to find matching service listen port %s for service %s", port.String(), k8s.NamespacedName(svc))
}