diff --git a/internal/ingress/status/status.go b/internal/ingress/status/status.go index 15bc37f36..b6fd72727 100644 --- a/internal/ingress/status/status.go +++ b/internal/ingress/status/status.go @@ -193,6 +193,20 @@ func (s *statusSync) runningAddresses() ([]string, error) { continue } + // only Ready pods are valid + isPodReady := false + for _, cond := range pod.Status.Conditions { + if cond.Type == apiv1.PodReady && cond.Status == apiv1.ConditionTrue { + isPodReady = true + break + } + } + + if !isPodReady { + klog.InfoS("POD is not ready", "pod", klog.KObj(&pod), "node", pod.Spec.NodeName) + continue + } + name := k8s.GetNodeIPOrName(s.Client, pod.Spec.NodeName, s.UseNodeInternalIP) if !sliceutils.StringInSlice(name, addrs) { addrs = append(addrs, name) diff --git a/internal/ingress/status/status_test.go b/internal/ingress/status/status_test.go index 19eb877c9..ce6c1c9ff 100644 --- a/internal/ingress/status/status_test.go +++ b/internal/ingress/status/status_test.go @@ -72,6 +72,12 @@ func buildSimpleClientSet() *testclient.Clientset { }, Status: apiv1.PodStatus{ Phase: apiv1.PodRunning, + Conditions: []apiv1.PodCondition{ + { + Type: apiv1.PodReady, + Status: apiv1.ConditionTrue, + }, + }, }, }, { @@ -108,6 +114,12 @@ func buildSimpleClientSet() *testclient.Clientset { }, Status: apiv1.PodStatus{ Phase: apiv1.PodRunning, + Conditions: []apiv1.PodCondition{ + { + Type: apiv1.PodReady, + Status: apiv1.ConditionTrue, + }, + }, }, }, }},