エンドユーザーのパブリックIPアドレスの適切な報告(NGINXベースのIngressコントローラー)¶
本手順では、ロードバランサーの背後にコントローラーが配置されている場合に、クライアント(エンドユーザー)の発信元IPアドレスを特定するために必要なWallarm Ingress controllerの構成について説明します。
既定では、Ingressコントローラーは自分がインターネットに直接公開されており、接続クライアントのIPアドレスが実際のIPであると想定します。しかし、リクエストはIngressコントローラーに送信される前にロードバランサー(例:AWS ELBやGoogle Network Load Balancer)を経由する場合があります。
ロードバランサーの背後にコントローラーが配置されている場合、IngressコントローラーはロードバランサーのIPを実際のエンドユーザーのIPと見なすため、一部のWallarm機能の誤動作につながる可能性があります。適切なエンドユーザーIPアドレスをIngressコントローラーに報告できるよう、以下の手順でコントローラーを構成してください。
手順1:ネットワーク層で実クライアントIPの受け渡しを有効化する¶
この機能は使用しているクラウドプラットフォームに大きく依存します。多くの場合、values.yaml
ファイルの属性controller.service.externalTrafficPolicy
をLocal
に設定することで有効化できます。
手順2:IngressコントローラーがX-FORWARDED-FOR HTTPリクエストヘッダーから値を取得できるようにする¶
通常、ロードバランサーは元のクライアントIPアドレスを含むHTTPヘッダーX-Forwarded-For
を付加します。正確なヘッダー名はロードバランサーのドキュメントで確認できます。
以下のようにコントローラーのvalues.yaml
を設定すると、Wallarm Ingress controllerはこのヘッダーから実際のエンドユーザーIPアドレスを取得できます。
-
forwarded-for-header
パラメータには、元のクライアントIPアドレスを含むロードバランサーのヘッダー名を指定してください
Other recommendations
Wallarm’s version of the Kubernetes Ingress controller is based on the community-supported NGINX Ingress controller for Kubernetes, so the majority of recommendations found in the official Ingress controller documentation and on the public Internet are also applicable to Wallarm’s Ingress controller.
Recommended reading: