Kubernetes Ingress 経由でリモートのIPアドレスが取得できなかったのが取得できるようになった話

Posted by: ytyng 1 month, 3 weeks ago

Kubernetes の Ingress を通した HTTP リクエストから、接続元のグローバルIPアドレスを取得しようとしたが、Kubernetes のローカルネットワークの IPアドレスが取得できてしまい、うまくいかなかった。

Kubernetes を microk8s にして、組み込みのイングレスコントローラーを使ってみたところ、グローバルのリモートIPアドレスが取得できたのでメモする。

ノードの OS は Ubutnu 20.04

1. うまくいかなかったパターン

2021年。
LAN は 192.168.0.0/24 で、Kubernetes ノードも、リクエスト元の PC も、192.168.0.X の IPアドレスとなっている。


Rancher を Docker で起動し、その中で起動したビルトインの k3s クラスターに対して、

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

これでイングレスコントローラーを構築した。

nginx の Podを起動して、 Ingress 経由でリクエストを行い、アクセスログを確認したところ、

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

となった。これは、Kubernetes 内のゲートウェイの IP アドレスだった。

これを、本来の接続元の PC の IP アドレスにしたかったが、有用な情報は見つけられなかった。

2. うまくいったパターン

2022年。

上記 Kubernetes クラスターを廃棄し、新しく MicroK8s を作成。

sudo snap install microk8s --classic

Ingress コントローラーを有効化

microk8s enable dns ingress

これで、Ingress マニフェスト等が1と同じ構成にして、リクエストしたところ、

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

となっており、クライアントの正しいIPアドレスが取得できていた。

Currently unrated

Comments

Archive

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