承接上文
同一个node中pod之间如何通信?
单一Pod上的容器是怎么共享网络命名空间的?
每个node上的pod ip和cni0网桥ip和flannel ip都是在同一个网段10.1.71.x上。
cni0网桥会把报文发送flannel这个网络设备上,flannel其实是node上的一个后台进程,它将整个k8s的node网络地址分成一块一块的。每个node的网段是互相不重叠的。
flannel network是10.1.0.0,10.1是整个集群总的网段,给每个node使用ip地址的第三位即给每个node再划分网段,每个node再用具体划分的网段再给pod分配ip地址。
pod和pod之间的通信,如果是在同一个node上,就使用cni这个网桥进行报文的转发;如果去连接别的node上的pod,那么就会通过flannel网络设备。
flannel使用的是vxlan(虚拟扩展网络)。
k8s集群中有2个node,一个是ubantu,一个是centos
ubantu的网段是10.1.62,centos网段是10.1.71
在当前的node上会有一个flannel damon来控制整个网段的分配,
有一个flannel的网络设备,它使用的网段就是当前node的网段,用来做报文的转发;flannel在维护整个网络空间上,连接到了k8s的etcd,每当有新的node加入,就会在etcd中注册上新的信息,
在etcd的这个目录network/config下flannel配的这个信息表示flannel给整个集群的网段是10.1,当有新的node加入到这个集群当中就会有新的目录产生,
2个node,2个目录,
看下里面的内容,flannel看当前使用的是这个网段对外的ip是10.211.55.12,
这个ip地址跟当前的node对外的网络设备的ip地址是一样的;flannel虚拟出来了一组ip,然后进行node和node之间通信的时候,它实际上是通过node上实际的网络设备的ip地址进行路由。
看下路由信息,
如果是这个网段就通过flannel这个设备进行转发;
node与node之间是如何通信的?
采用了扁平化的网络,这个网络的维护是flannel的demon,有新的node加入进来,通过etcd注册并分配这个node相应的网络空间,并且通知后台的damon用来控制报文的转发。