18

kube-proxy には --proxy-mode というオプションがあり、ヘルプ メッセージによると、このオプションは userspaceまたはiptablesすることができます (以下を参照)。

# kube-proxy -h
Usage of kube-proxy:
...
      --proxy-mode="": Which proxy mode to use: 'userspace' (older, stable) or 'iptables' (experimental). If blank, look at the Node object on the Kubernetes API and respect the 'net.experimental.kubernetes.io/proxy-mode' annotation if provided.  Otherwise use the best-available proxy (currently userspace, but may change in future versions).  If the iptables proxy is selected, regardless of how, but the system's kernel or iptables versions are insufficient, this always falls back to the userspace proxy.
...

ここでユーザー空間モードが何を意味するのかわかりません。

ユーザー空間モードで kube-proxy を実行するときの動作原理を教えてください。

4

1 に答える 1

66

ユーザー空間と iptables は、接続転送を実際に処理するものを参照します。どちらの場合も、サービスに関連付けられた宛先 IP アドレスを持つアウトバウンド TCP 接続をインターセプトするために、ローカル iptables ルールがインストールされます。

ユーザー空間モードでは、iptables ルールは、go バイナリ (kube-proxy) が接続をリッスンしているローカル ポートに転送されます。バイナリ (ユーザー空間で実行) は接続を終了し、サービスのバックエンドへの新しい接続を確立してから、要求をバックエンドに転送し、応答をローカル プロセスに返します。ユーザー空間モードの利点は、接続がアプリケーションから作成されるため、接続が拒否された場合、アプリケーションが別のバックエンドに再試行できることです。

iptables モードでは、サービス宛てのパケットをサービスのバックエンドに直接転送するために、iptables ルールがインストールされます。これは、パケットをカーネルから kube-proxy に移動してからカーネルに戻すよりも効率的であるため、スループットが向上し、テール レイテンシが改善されます。/var/log/kube-proxy主な欠点は、ログを書き込むローカル バイナリの代わりに、 iptables ルールを処理するカーネルからログを検査する必要があるため、デバッグがより困難になることです。

どちらの場合も、マシン上で kube-proxy バイナリが実行されます。ユーザー空間モードでは、それ自体をプロキシとして挿入します。iptables モードでは、接続自体をプロキシするのではなく、iptables を構成します。同じバイナリが両方のモードで機能し、動作はフラグを介して、またはノードの apiserver に注釈を設定することによって切り替えられます。

于 2016-03-18T15:46:39.710 に答える