Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kubernetes CNI Migration

O. Yuanying
December 14, 2022

Kubernetes CNI Migration

O. Yuanying

December 14, 2022
Tweet

More Decks by O. Yuanying

Other Decks in Programming

Transcript

  1. 雑に`kubectl apply` 1. Pod をデプロイ (Flannel Network) 2. Cilium をデプロイ

    3. Pod をロールアウト ◦ 順に Cilium Network に切り替えていく 4. Flannelを削除 ◦ 削除後にノードを再起動
  2. 雑に`kubectl apply` 1. Pod をデプロイ (Flannel Network) 2. Cilium をデプロイ

    3. Pod をロールアウト ◦ 順に Cilium Network に切り替えていく 4. Flannelを削除 ◦ 削除後にノードを再起動
  3. Node 0 testapp-0 eth0: 10.242.2.2 Bridge: cni0 10.242.2.1 veth cni0

    flannel.1 iptables Node 1 testapp-1 eth0: 10.242.3.3 Bridge: cni0 10.242.3.1 veth cni0 flannel.1 iptables flannel 10.242.0.0/16
  4. Node 0 testapp-0 eth0: 10.242.2.2 Bridge: cni0 10.242.2.1 veth cni0

    flannel.1 iptables Node 1 testapp-1 eth0: 10.242.3.3 Bridge: cni0 10.242.3.1 veth cni0 flannel.1 iptables flannel 10.242.0.0/16 flannel ネットワーク外への通信は NATされる ルールが書かれている。 -s 10.242.0.0/16 -d 10.242.0.0/16 -j RETURN -s 10.242.0.0/16 ! -d 224.0.0.0/4 -j MASQUERADE ! -s 10.242.0.0/16 -d 10.242.0.0/16 -j MASQUERADE
  5. 雑に`kubectl apply` 1. Pod をデプロイ (Flannel Network) 2. Cilium をデプロイ

    3. Pod をロールアウト ◦ 順に Cilium Network に切り替えていく 4. Flannelを削除 ◦ 削除後にノードを再起動
  6. cilium 172.20.0.0/16 Node 1 testapp-1 eth0: 10.242.3.3 Bridge: cni0 10.242.3.1

    veth cni0 flannel.1 iptables cilium_host eBPF flannel 10.242.0.0/16 Node 0 testapp-0 eth0: 10.242.2.2 Bridge: cni0 10.242.2.1 veth cni0 flannel.1 iptables cilium_host eBPF
  7. cilium 172.20.0.0/16 Node 1 testapp-1 eth0: 10.242.3.3 Bridge: cni0 10.242.3.1

    veth cni0 flannel.1 iptables cilium_host eBPF flannel 10.242.0.0/16 Node 0 testapp-0 eth0: 10.242.2.2 Bridge: cni0 10.242.2.1 veth cni0 flannel.1 iptables cilium_host eBPF cilium ネットワーク外への通信は NATされる ルールが書かれている。 ~~省略~~
  8. 雑に`kubectl apply` 1. Pod をデプロイ (Flannel Network) 2. Cilium をデプロイ

    3. Pod をロールアウト ◦ 順に Cilium Network に切り替えていく 4. Flannelを削除 ◦ 削除後にノードを再起動
  9. cilium 172.20.0.0/16 Node 1 testapp-1 eth0: 10.242.3.3 Bridge: cni0 10.242.3.1

    veth cni0 flannel.1 iptables cilium_host eBPF flannel 10.242.0.0/16 Node 0 Bridge: cni0 10.242.2.1 cni0 flannel.1 iptables cilium_host eBPF
  10. cilium 172.20.0.0/16 Node 1 testapp-1 eth0: 10.242.3.3 Bridge: cni0 10.242.3.1

    veth cni0 flannel.1 iptables cilium_host eBPF flannel 10.242.0.0/16 Node 0 testapp-0 Bridge: cni0 10.242.2.1 cni0 flannel.1 iptables cilium_host eBPF eth0: 172.20.2.2
  11. cilium 172.20.0.0/16 Node 1 testapp-1 eth0: 10.242.3.3 Bridge: cni0 10.242.3.1

    veth cni0 flannel.1 iptables cilium_host eBPF flannel 10.242.0.0/16 Node 0 testapp-0 Bridge: cni0 10.242.2.1 cni0 flannel.1 iptables cilium_host eBPF eth0: 172.20.2.2 もちろん、この状態で 双方向通信問題なし!
  12. cilium 172.20.0.0/16 Node 1 Bridge: cni0 10.242.3.1 cni0 flannel.1 iptables

    cilium_host eBPF flannel 10.242.0.0/16 Node 0 testapp-0 Bridge: cni0 10.242.2.1 cni0 flannel.1 iptables cilium_host eBPF eth0: 172.20.2.2
  13. cilium 172.20.0.0/16 Node 1 testapp-1 Bridge: cni0 10.242.3.1 cni0 flannel.1

    iptables cilium_host eBPF flannel 10.242.0.0/16 Node 0 testapp-0 Bridge: cni0 10.242.2.1 cni0 flannel.1 iptables cilium_host eBPF eth0: 172.20.2.2 eth1: 172.20.3.3
  14. 雑に`kubectl apply` 1. Pod をデプロイ (Flannel Network) 2. Cilium をデプロイ

    3. Pod をロールアウト ◦ 順に Cilium Network に切り替えていく 4. Flannelを削除 ◦ 削除後にノードを再起動
  15. cilium 172.20.0.0/16 Node 1 testapp-1 iptables cilium_host eBPF Node 0

    testapp-0 iptables cilium_host eBPF eth0: 172.20.2.2 eth1: 172.20.3.3
  16. Kubernetes Network Model 1. Pods can communicate with all other

    pods on any other node without NAT 2. Agents on a node (e.g. system daemons, kubelet) can communicate with all pods on that node Note: For those platforms that support Pods running in the host network (e.g. Linux), when pods are attached to the host network of node they can still communicate with all pods on all nodes without NAT. https://kubernetes.io/docs/concepts/services-networking/
  17. cilium 172.20.0.0/16 Node 1 testapp-1 eth0: 10.242.3.3 Bridge: cni0 10.242.3.1

    veth cni0 flannel.1 iptables cilium_host eBPF flannel 10.242.0.0/16 Node 0 testapp-0 Bridge: cni0 10.242.2.1 cni0 flannel.1 iptables cilium_host eBPF eth0: 172.20.2.2 flannel ネットワーク外への通信は NATされる ルールが書かれている。 cilium ネットワーク外への通信は NATされる ルールが書かれている。
  18. cilium 172.20.0.0/16 Node 1 testapp-1 eth0: 10.242.3.3 Bridge: cni0 10.242.3.1

    veth cni0 flannel.1 iptables cilium_host eBPF flannel 10.242.0.0/16 Node 0 testapp-0 Bridge: cni0 10.242.2.1 cni0 flannel.1 iptables cilium_host eBPF eth0: 172.20.2.2 どうしても Flannel -> Cilium Cilium -> Flannel でNATが発生してしまう。
  19. cilium 172.20.0.0/16 Node 0 testapp-0 eth0: 10.242.2.2 Bridge: cni0 10.242.2.1

    veth cni0 flannel.1 iptables cilium_host eth1: 172.20.2.2 eBPF Node 1 testapp-1 eth0: 10.242.3.3 Bridge: cni0 10.242.3.1 veth cni0 flannel.1 iptables cilium_host eth1: 172.20.3.3 eBPF flannel 10.242.0.0/16