---
slug: "kubernetes-ingress-cannot-get-remote-real-ip-adress-resolved"
title: "Kubernetes Ingress 経由でリモートのIPアドレスが取得できなかったのが取得できるようになった話"
description: "Kubernetes Ingress (nginx-ingress) 経由のリクエストで、`X-Forwarded-For` / `X-Real-IP` から接続元グローバル IP を取得できるようにする設定方法。"
url: "https://www.ytyng.com/blog/kubernetes-ingress-cannot-get-remote-real-ip-adress-resolved"
publish_date: "2022-06-19T14:42:52Z"
created: "2022-06-19T14:42:52Z"
updated: "2026-05-11T13:06:58.212Z"
categories: ["kubernetes"]
keywords: ""
featured_image_url: "https://media.ytyng.com/resize/20230812/a34dfb3369c6464dbc90f485e3874081.png.webp?width=768"
has_video: false
has_music: false
video_urls: []
music_urls: []
lang: "ja"
---

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

<p>Kubernetes の Ingress を通した HTTP リクエストから、接続元のグローバルIPアドレスを取得しようとしたが、Kubernetes のローカルネットワークの IPアドレスが取得できてしまい、うまくいかなかった。</p>
<p>Kubernetes を microk8s にして、組み込みのイングレスコントローラーを使ってみたところ、グローバルのリモートIPアドレスが取得できたのでメモする。</p>
<p>ノードの OS は Ubutnu 20.04</p>
<h2>1. うまくいかなかったパターン</h2>
<p>2021年。<br />LAN は 192.168.0.0/24 で、Kubernetes ノードも、リクエスト元の PC も、192.168.0.X の IPアドレスとなっている。</p>
<p><br />Rancher を Docker で起動し、その中で起動したビルトインの k3s クラスターに対して、</p>
<pre>kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.41.2/deploy/static/provider/baremetal/deploy.yaml</pre>
<p>これでイングレスコントローラーを構築した。</p>
<p>nginx の Podを起動して、 Ingress 経由でリクエストを行い、アクセスログを確認したところ、</p>
<pre>X-Real-IP: 10.42.0.1<br />X-Forwarded-For: 10.42.0.1</pre>
<p>となった。これは、Kubernetes 内のゲートウェイの IP アドレスだった。</p>
<p>これを、本来の接続元の PC の IP アドレスにしたかったが、有用な情報は見つけられなかった。</p>
<h2>2. うまくいったパターン</h2>
<p>2022年。</p>
<p>上記 Kubernetes クラスターを廃棄し、新しく MicroK8s を作成。</p>
<pre>sudo snap install microk8s --classic</pre>
<p>Ingress コントローラーを有効化</p>
<pre>microk8s enable dns ingress</pre>
<p>これで、Ingress マニフェスト等が1と同じ構成にして、リクエストしたところ、</p>
<pre>X-Real-IP: 192.168.0.159<br />X-Forwarded-For: 192.168.0.159</pre>
<p>となっており、クライアントの正しいIPアドレスが取得できていた。</p>
