flannel网络模式
flannel,k8s的网络模型,为k8s集群内的容器提供网络服务的组件。
主要作用:
为集群内所有容器提供一个扁平化的网络环境,即:所有容器在flannel提供的网络平面上可以看作是在同一网段,自由通信。其模型为全部的容器使用一个network,然后在每个host上从network中划分一个子网subnet。为host上的容器创建网络时,从subnet中划分一个ip给容器。这样就大大提高了容器之间工作效率,不用考虑IP转换问题。
flannel网络模型(转载)
已上图为例解释flannel网络模型中容器的通信方式:
1、容器网卡是通过docker0桥接到flannel0网卡,而每个host对应的flannel0网段为10.1.x.[1-255]/24,而flannel所组成的一个跨host的网段为10.1.x.x/16,而flannel0则为flanneld进程虚拟出来的网卡。
2、docker0的地址是由 /run/flannel/subnet.env 的 FLANNEL_SUBNET 参数决定的。在启动flannel的同时会产生一个通过flannel生成的配置文件subnet.env,参数内容如下:
FLANNEL_NETWORK=10.0.0.0/16
FLANNEL_SUBNET=10.0.61.1/24
FLANNEL_MTU=1472
FLANNEL_IPMASQ=false
3、跨接点容器之间通信流程
containerA --> docker0 --> flannel0 --> NodeA --> (IP Address) --> NodeB --> flannel0 --> docker0 --> containerB
(1) 容器A向容器B请求数据,首先通过路由规则将数据发往docker0,docker0接受到数据后通过路由规则将数据包转交给本节点的flannel0处理。
(2)flannel0 将数据进行封装并发给宿主机的eth0,然后走TCP协议转发给containerB所在的宿主机。
(3)containerB所在的宿主机接收到数据后,根据路由规则转发给flannel0。
(4)flannel0 再次根据路由协议将数据包发送给docker0
(5)最后数据包到达containerB,完成容器之间的数据通信。