How We Managed to Retrieve Remote IP Addresses via Kubernetes Ingress

kubernetes
2022-06-19 14:42 (3 years ago)
How We Managed to Retrieve Remote IP Addresses via Kubernetes Ingress

I tried to obtain the source global IP address from HTTP requests through Kubernetes Ingress, but I ended up getting the IP address of Kubernetes' local network, which wasn't successful.

By switching Kubernetes to microk8s and using the built-in ingress controller, I was able to obtain the global remote IP address. Here are the notes.

The OS of the node is Ubuntu 20.04

1. Unsuccessful Attempt

In 2021.
The LAN is 192.168.0.0/24, and both the Kubernetes nodes and the requesting PC have IP addresses of 192.168.0.X.


I started Rancher with Docker, and in the built-in k3s cluster, I deployed the following:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.41.2/deploy/static/provider/baremetal/deploy.yaml

This set up the ingress controller.

When I started an nginx pod and made a request through Ingress, checking the access logs showed:

X-Real-IP: 10.42.0.1
X-Forwarded-For: 10.42.0.1

This was the IP address of the gateway within Kubernetes.

I wanted this to be the original IP address of the requesting PC, but I couldn't find any useful information to achieve that.

2. Successful Attempt

In 2022.

I discarded the above Kubernetes cluster and created a new MicroK8s cluster.

sudo snap install microk8s --classic

Enabled the Ingress controller

microk8s enable dns ingress

With the Ingress manifest and other configurations the same as in step 1, when I made a request, the logs showed:

X-Real-IP: 192.168.0.159
X-Forwarded-For: 192.168.0.159

This correctly obtained the client's IP address.

Please rate this article
Currently unrated
The author runs the application development company Cyberneura.
We look forward to discussing your development needs.

Categories

Archive