GKE Kubernetesクラスタ(LoadBalancer Kubernetesサービスタイプ)に展開された自分のnginxアクセスログは、実際の訪問者IPの代わりに内部IPを表示します。Google Container Engineクラスタで受信IPアドレスを見つけることはできますか?
実際のIPをどこからでも見つける方法はありますか?多分GKE/Kubernetesによって提供されるいくつかのログファイル?
GKE Kubernetesクラスタ(LoadBalancer Kubernetesサービスタイプ)に展開された自分のnginxアクセスログは、実際の訪問者IPの代わりに内部IPを表示します。Google Container Engineクラスタで受信IPアドレスを見つけることはできますか?
実際のIPをどこからでも見つける方法はありますか?多分GKE/Kubernetesによって提供されるいくつかのログファイル?
現在、type: LoadBalancer
サービスはダブルホップします。外部要求はすべてのクラスタのノード間でバランスがとられ、kube-proxyは実際のサービスバックエンド間でバランスをとります。
kube-proxyは要求をNATします。例えば。 1.2.3.4
から外部ロードバランサへのクライアント要求が100.99.98.97
の場合、ノードのNATedは10.128.0.1->10.100.0.123
(ノードのプライベートIPからポッドのクラスタIP)になります。したがって、バックエンドで表示される「src ip」は、実際にはノードのプライベートIPです。
対応するdesign proposalのLoadBalancerサービスのクライアントIPを保持するためのfeature plannedがあります。
nginxにはreal IP moduleを使用できます。
set_real_ip_from
ディレクティブとして社内GKEネットをパスし、あなたはあなたのログに本当のクライアントのIPが表示されます:
set_real_ip_from 192.168.1.0/24。あなたは本当のクライアントの代わりにあなたのログに現在
IPを参照してくださいIPすなわちIP
を
ロードバランサ:
通常は、nginxの設定に追加します
kubernetesネットワーク
すなわちサブネットP ODSは、の「ドッカーサブネット」
私はこれを試しましたが、うまくいかないようです。 nginxの 'http {'の後にこれらのディレクティブを追加しました set_real_ip_from 127.0.0.1; set_real_ip_from 192.168.0.0/24; set_real_ip_from 10.0.0.0/8; real_ip_header X-Forwarded-For; real_ip_recursive on; – melalj
私は自分の答えを更新しました。あなたのサブネットはおそらく間違っています。あなたのポッドネットワークの詳細を教えてください。あなたの設定は現実と一致する必要があります。 127.0.0.1はここではあまり意味がありません。実際にプロキシを別のアプリと一緒にポッドで実行している場合は除きます。 –
すべてのIPを受け入れてテストしようとしました: 'set_real_ip_from 0.0.0.0/0;'でもログにクライアントIPが表示されません – melalj
そしてKUBE-プロキシはそれNATの物事の前に着信要求のないログを持っていないですか。 :/ – yair