How We Managed to Retrieve Remote IP Addresses via Kubernetes Ingress

kubernetes
2022-06-19 23:42 (2 years ago) ytyng

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.

Currently unrated

Comments

Archive

2024
2023
2022
2021
2020
2019
2018
2017
2016
2015
2014
2013
2012
2011