Nginx Ingress 向けに Proxy Protocol を設定する
Managed - FPT Kubernetes Engine 上の Nginx ingress gateway 経由でアプリケーションにアクセスし、エンドユーザーの実際の public IP が必要な場合は、次のように Proxy Protocol を設定します。
Proxy Protocol を有効にする
-
nginx-ingress-controller の service 設定にアノテーション
loadbalancer.fptcloud.com/proxy-protocol: "true"を追加します。 -
Nginx ingress controller をデプロイした namespace の nginx-ingress-controller ConfigMap に、次のフィールドを追加します。
allow-snippet-annotations: "true"proxy-protocol: "True"real-ip-header: proxy_protocoluse-proxy-protocol: "true" -
新しい ConfigMap を反映するため、Nginx ingress controller を再起動します。
アプリケーションが ingress domain のポート 443 を呼び出す場合は、Nginx ingress controller の LoadBalancer service にも次のアノテーションを追加します。
loadbalancer.fptcloud.com/enable-ingress-hostname: "true"
L4 LB 上で Proxy Protocol を使う LoadBalancer service では、外部インターネットからのアクセスは正常に動作する一方で、クラスター内の Pod は ingress domain のポート 443 経由でその service に到達できません。kube-proxy は LoadBalancer の public IP を各ノードの iptables に追加し、worker node のインターフェースにマッピングするため、クラスター内から ingress domain へのリクエストはそのインターフェースでブロックされます。上記の ingress hostname を設定すると、クラスター内・インターネットの両方から接続できるようになります。