2016-08-06 6 views

答えて

1

現在、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があります。

+0

そしてKUBE-プロキシはそれNATの物事の前に着信要求のないログを持っていないですか。 :/ – yair

0

nginxにはreal IP moduleを使用できます。

set_real_ip_fromディレクティブとして社内GKEネットをパスし、あなたはあなたのログに本当のクライアントのIPが表示されます:

set_real_ip_from 192.168.1.0/24。あなたは本当のクライアントの代わりにあなたのログに現在

  • IPを参照してくださいIPすなわちIP

    1. ロードバランサ:

  • 通常は、nginxの設定に追加します

    kubernetesネットワーク
    すなわちサブネットP ODSは、の「ドッカーサブネット」

    +0

    私はこれを試しましたが、うまくいかないようです。 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

    +0

    私は自分の答えを更新しました。あなたのサブネットはおそらく間違っています。あなたのポッドネットワークの詳細を教えてください。あなたの設定は現実と一致する必要があります。 127.0.0.1はここではあまり意味がありません。実際にプロキシを別のアプリと一緒にポッドで実行している場合は除きます。 –

    +0

    すべてのIPを受け入れてテストしようとしました: 'set_real_ip_from 0.0.0.0/0;'でもログにクライアントIPが表示されません – melalj

    関連する問題