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

kubernetes
2022-06-19 23:42 (2年前) ytyng
View in English

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アドレスが取得できていた。

現在未評価
The author runs the application development company Cyberneura.
We look forward to discussing your development needs.

Archive

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