kubernetes

flannel网络模式

2017-03-02  本文已影响0人  amoyzhu

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,完成容器之间的数据通信。

上一篇下一篇

猜你喜欢

热点阅读