Question: I have a situation with `ip_hash` on nginx for sticky session where it always direct the traffic to one server only. The nginx is running behind a Google Cloud load balancer, from nginx it hits my app's GC Kubernetes load balancer before actually going to one of the pod.

I have a thought that all users' IP was masked by GC load balancer so that nginx recognises them as one source.

I was told that we can add user's original IP to nginx's header so that the load balancer able to recognise them as different users. How can I approach one? Or is there another solution?

Answer: 
If you are using Network load balancing (with target pools) the load balancer keeps the IP. What happens is that Kubernetes is changing the [source IP](https://kubernetes.io/docs/tutorials/services/source-ip/#source-ip-for-services-with-typeloadbalancer) with the cluster/node IPs.

Kubernetes has a feature to preserve the client source IP. You can check in the docs for [how to preserve the client source IP in the services with Type=LoadBalancer](https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip) (Network load balancing).
Use the proxy\_set\_header to add your IP original to NGINX header. Checkout the following examples:

```
proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-Host $remote_addr;

proxy_set_header X-Forwarded-For $remote_addr;

```

In the same way, you can add your IP origin to NGINX header.