Description
Is your feature request related to a problem? Please describe.
Kube proxy creates "shortcuts" for external IPs of LoadBalancer services. When a pod in the cluster connects to a IP that is set as the external IP of a LoadBalancer service, the traffic will not leave the cluster and instead be directly routed to that service. Therefore the Netscaler ADC is not part of the traffic and any rules/settings that are configured will be "bypassed".
Describe the solution you'd like
There are long discussions over at kubernetes (here and here) if this behaviour is intransparent for the user and poses problems or risks for those who want to use features of the load balancer (firewalls/logging/auth/...).
I would like to kindly request the option to change the default behavior when needed. Other ingress controllers have by now implemented a workaround to not set .status.loadBalancer.ingress[].ip
, but instead only .status.loadbalancer.ingress[].hostname
. This could be configured using an annotation.
As far as I know it is currently not possible for NetsScaler LoadBalancer services to not have the .status.loadBalancer.ingress[].ip
field set after provisioning. Please correct me if I am wrong.
Describe alternatives you've considered
The topic has gained enough traction that a KEP has been introduced and there is a new feature in alpha state in Kubernetes 1.29. However many users are not yet using that version or may not want to use the feature in an Alpha state. Also even if the Kubernetes Alpha feature is enabled, the ingress controller still needs to set the .status.loadBalancer.ingress[].ipMode
field. The support for this field could also be implemented while working on this issue.
Additional context
Steps to reproduce:
- Create LoadBalancer service as described here.
- Create a pod in the same cluster and send traffic to the external address of the LoadBalancer service.
- Monitor the Netscaler ADC to see that requests do not hit the ADC.