externalTrafficPolicy is set to Local.externalTrafficPolicy:Cluster report a Healthy status.VMware NSX 4.x
VMware NSX 9.x
vSphere Kubernetes Service
This is expected behavior due to how Kubernetes handles the Local traffic policy. When you set externalTrafficPolicy:Local, Kubernetes preserves the client source IP and avoids an extra network hop by routing traffic only to nodes that host an active pod for that service.
To facilitate this, Kubernetes allocates a healthCheckNodePort. The kube-proxy on each worker node only responds with an HTTP 200 OK on this port if a local pod is running on that specific node. If a node does not host a pod for the service, it drops the health check connection. Because the NSX Load Balancer monitors all nodes in the pool, it marks nodes without local pods as Down, leading to the Degraded status for the entire pool.
There is currently no configuration change within NSX or the vSphere Cloud Controller Manager (CCM) to suppress this degraded status while maintaining the Local policy. The vSphere CCM does not dynamically add or remove nodes from the NSX server pool based on pod placement.
To resolve the Degraded status, you have the following options:
externalTrafficPolicy:Local. The Degraded status is cosmetic as long as at least one pool member remains Healthy. NSX will continue to route traffic to the healthy nodes.kubectl edit svc <service-name>externalTrafficPolicy: ClusterBroadcom Engineering are aware of this issue and are planning a fix for a future release. Subscribe to this article (reference: Subscribe to a Broadcom knowledge article by article or product) to be updated on any future product enhancements regarding dynamic pool management.