Question

How do I pass client IP in a Kubernetes Cluster to my NodeJS application?

Posted January 27, 2021 749 views
Node.jsLoad BalancingKubernetes

I have my website hosted on Kubernetes Cluster with a LoadBalancer and everything works as it should. I stumbled upon some documentation in how to get the visitor/client IP

Long story short: setup proxy protocol in the loadbalancer and set externalTrafficPolicy: "Local" Most of the people seem satisfied with that approach. Though, since I am completely new to Kubernetes…

How do you actually access that IP? Is it in a log file? Because when I run kubectl logs my-app -c my-container --since=1h the output is always empty, even if I am interacting with the page. But most importantly, even if it is in a log file, how can I pass it to my NodeJS application?

I also followed this guide https://www.digitalocean.com/community/tutorial_series/from-containers-to-kubernetes-with-node-js but there is no mention in how you can access/forward the IP to the node front-end.

These answers are provided by our Community. If you find them useful, show some love by clicking the heart. If you run into issues leave a comment, or add your own answer to help others.

×
Submit an Answer
1 answer

Hi @mazzespazze

I understand that you want to preserver client IP address. Proxy protocol enables is the fact that it will preserve the X-Forwarded-For HTTP header which will container the original client IP to achieve this you need to follow below :

  • “Local” externaltrafficpolicy on the LB service
  • proxy protocol enabled for the LB via the annotation
  • proxy protocol enabled in the ingress controller
  • Traffic is HTTP

If those conditions are met you should be able to retrieve client IP via the X-Forwarded-For header on the request.

I hope this helps!

Best Regards,
Purnima Kumari