Kubernetes 本身不负责网络.

11.4.1 网络应该是什么样的

image.png

11.4.2 深入了解网络工作原理

image.png

想想网线, 路由器和电脑之间通过插入网线的水晶头来进行网络连接:

  • eth0
  • veth

同节点 pod 通信

通过 Bridge 可以使同节点上的 pod 之间相互通信.

图11.15中的 Bridge 画了 ip, 感觉它应该是个路由器

查看网卡:

  1. $ ip addr
  2. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
  3. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  4. inet 127.0.0.1/8 scope host lo
  5. valid_lft forever preferred_lft forever
  6. inet6 ::1/128 scope host
  7. valid_lft forever preferred_lft forever
  8. 2: enp7s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
  9. link/ether 8c:8c:aa:95:41:ad brd ff:ff:ff:ff:ff:ff
  10. 3: wlp0s20f3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
  11. link/ether 38:fc:98:c4:35:60 brd ff:ff:ff:ff:ff:ff
  12. inet 192.168.31.36/24 brd 192.168.31.255 scope global dynamic noprefixroute wlp0s20f3
  13. valid_lft 35877sec preferred_lft 35877sec
  14. inet6 fe80::3cea:790d:c238:69a4/64 scope link noprefixroute
  15. valid_lft forever preferred_lft forever
  16. 4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
  17. link/ether 02:42:98:20:bb:7a brd ff:ff:ff:ff:ff:ff
  18. inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
  19. valid_lft forever preferred_lft forever

docker0 就是虚拟出来的网卡, 主机被分配了 172.17.0.1 , 该 ip 所在局域网可以与容器进行通信.

不同节点上的 pod 通信

有多种方式:

  • overlay
  • underlay
  • 三层路由

通过三层网络支持两个节点 pod 通信:

  • Bridge 与物理 eth0 相连
  • PodA eth0 -> veth123 -> BridgeA -> eth0A -> eth0B -> BridgeB -> veth345 -> PodC

image.png

可能需要了解路由原理.

image.png

wc.

11.4.3 引入容器网络接口

CNI (容器网络接口) 允许 Kubernetes 可配置使用任何 CNI 插件, 包括:

  • Calico
  • Flannel
  • Romana
  • Weave Net
  • 其他

安装插件需要:

  • DaemonSet
  • 资源的 yaml