Kubernetes CNI 网络
在容器网络 - 跨主机容器通信中,我们使用 flannel
实现了容器的跨主机通信,在使用 kubeadm 创建多借点集群时,在集群初始化之后,首先安装了 kube-flannel CNI
插件,用于 k8s
集群 pod
之间互通,这是集群节点 Ready
的必要条件,因为 k8s
自身并不能实现 pod
之间互通,需要借助 CNI 完成此功能。
单机容器通信是将主上的容器通过连接在 docker0
网桥实现,然后跨主机容器通信是通过 vxlan
中的 flannel.x
设备实现跨主机之间的容器通信,k8s
的 flannel-cni
插件处理不同 pod
之间互通的方式就和跨主机容器通信的方式一样,只不过在 k8s
集群中将用于单机上容器互通的 docker0
网桥换成了 cni0
。
k8s
之所以要创建一个与 docker0
功能相同的网桥,是因为 k8s
并没有使用 Docker
的网络模型,它并不希望和 Docker
之间有强依赖,所以不具备配置这样一个网桥的能力。
所以在使用 flannel-cni
插件的模式下,k8s
之间不同 pod
互通的模式下如下图所示,和容器网络 - 跨主机容器通信唯一区别是网桥名称的变化:
