28

CNI プラグインと Kubernetes の Kube-proxy の違いがわかりません。ドキュメントから得たものから、次のように結論付けています。

Kube-proxy は、マスター ノードとルーティングとの通信を担当します。

CNI は、ポッドとサービスに IP アドレスを割り当てることで接続を提供し、ルーティング デーモンを通じて到達可能性を提供します。

ルーティングは 2 つの機能が重複しているように見えますが、本当ですか?

敬具、チャールズ

4

3 に答える 3

27

kubernetes には、ClusterIP と Pod IP の 2 種類の IP があります。

CNI

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

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.13710.244.0.138.

このルールは kube-proxy が作成するものであり、kube-proxy が作成したものです。

PSiptablesモードはほぼ同じですが、iptables のルールが見苦しく見えます。ここには貼りたくない。:p

于 2019-02-26T08:57:22.300 に答える