在Kubernetes中,并不是用docker0来作为网桥,而是通过一个CNI接口来替代docker0,它在宿主机上的默认名字叫cni0。
以Flannel的vxlan模式为例,其在Kubernetes中的工作流程不变,只是其中的docker0网桥替换为cni0网桥了,其流程如下:
注意:CNI网桥只负责Kubernetes创建的Pod,如果你单独用docker run启动一个容器,其网桥依然是docker0。
Kubernetes中设计一个与docker0相同功能的CNI网桥,其主要原因有以下两点:
CNI的设计思想即为:Kubernetes在启动Infra容器之后,就可以直接调用CNI网络插件,为这个Infra容器的Network Namespace配置符合预期的网络栈。
CNI中有两个重要的概念:
对容器网络的设置和操作都通过插件(Plugin)进行具体实现,CNI插件包括两种类型:CNIPlugin和IPAM(IP Address Management)Plugin。CNI Plugin负责为容器配置网络资源,IPAM Plugin负责对容器的IP地址进行分配和管理。IPAM Plugin作为CNI Plugin的一部分,与CNI Plugin一起工作。