CNI プラグインと Kubernetes の Kube-proxy の違いがわかりません。ドキュメントから得たものから、次のように結論付けています。
Kube-proxy は、マスター ノードとルーティングとの通信を担当します。
CNI は、ポッドとサービスに IP アドレスを割り当てることで接続を提供し、ルーティング デーモンを通じて到達可能性を提供します。
ルーティングは 2 つの機能が重複しているように見えますが、本当ですか?
敬具、チャールズ
CNI プラグインと Kubernetes の Kube-proxy の違いがわかりません。ドキュメントから得たものから、次のように結論付けています。
Kube-proxy は、マスター ノードとルーティングとの通信を担当します。
CNI は、ポッドとサービスに IP アドレスを割り当てることで接続を提供し、ルーティング デーモンを通じて到達可能性を提供します。
ルーティングは 2 つの機能が重複しているように見えますが、本当ですか?
敬具、チャールズ
kubernetes には、ClusterIP と Pod IP の 2 種類の IP があります。
CNI は Pod IP を考慮します。
CNI プラグインは、Pod が相互に通信できないオーバーレイ ネットワークの構築に重点を置いています。CNI プラグインのタスクは、スケジュールされたときに Pod IP を Pod に割り当て、この IP の仮想デバイスを構築し、この IP をクラスターのすべてのノードからアクセスできるようにすることです。
Calico では、これは N ホスト ルート (N = caliveth デバイスの数) と tun0 上の M 直接ルート (M = K8s クラスター ノードの数) によって実装されます。
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.130.29.1 0.0.0.0 UG 100 0 0 ens32
10.130.29.0 0.0.0.0 255.255.255.0 U 100 0 0 ens32
10.244.0.0 0.0.0.0 255.255.255.0 U 0 0 0 *
10.244.0.137 0.0.0.0 255.255.255.255 UH 0 0 0 calid3c6b0469a6
10.244.0.138 0.0.0.0 255.255.255.255 UH 0 0 0 calidbc2311f514
10.244.0.140 0.0.0.0 255.255.255.255 UH 0 0 0 califb4eac25ec6
10.244.1.0 10.130.29.81 255.255.255.0 UG 0 0 0 tunl0
10.244.2.0 10.130.29.82 255.255.255.0 UG 0 0 0 tunl0
この場合、10.244.0.0/16
は Pod IP CIDR であり、10.130.29.81
はクラスター内のノードです。への TCP リクエストがある場合、7 番目のルールに従って10.244.1.141
に送信されることが想像できます。10.130.29.81
では10.130.29.81
、次のようなルート ルールがあります。
10.244.1.141 0.0.0.0 255.255.255.255 UH 0 0 0 cali4eac25ec62b
これにより、最終的にリクエストが正しい Pod に送信されます。
デーモンが必要な理由はわかりません。デーモン化されているのは、作成したルートルールが手動で削除されるのを防ぐためだと思います。
kube-proxy の仕事はかなり単純で、リクエストをクラスター IP からポッド IP にリダイレクトするだけです。
kube-proxy には と の 2 つのモードがIPVS
ありiptables
ます。kube-proxy がIPVS
モードで動作している場合、クラスター内の任意のノードで次のコマンドを実行することにより、kube-proxy によって作成されたリダイレクト ルールを確認できます。
ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.96.0.1:443 rr
-> 10.130.29.80:6443 Masq 1 6 0
-> 10.130.29.81:6443 Masq 1 1 0
-> 10.130.29.82:6443 Masq 1 0 0
TCP 10.96.0.10:53 rr
-> 10.244.0.137:53 Masq 1 0 0
-> 10.244.0.138:53 Masq 1 0 0
...
この場合、CoreDNS のデフォルトのクラスター IP が表示され10.96.0.10
、その背後には Pod IP を持つ 2 つの実サーバーがあります:10.244.0.137
と10.244.0.138
.
このルールは kube-proxy が作成するものであり、kube-proxy が作成したものです。
PSiptables
モードはほぼ同じですが、iptables のルールが見苦しく見えます。ここには貼りたくない。:p