美文网首页k8s那点事儿
flannel-kubernetes的网络模型

flannel-kubernetes的网络模型

作者: 跨界师 | 来源:发表于2016-12-09 18:26 被阅读217次

最近一直在研究kubernetes,搭建集群时总是遇到一些未知的坑(对于我来说),为了搞明白kubernetes,今天仔细调研了一下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,完成容器之间的数据通信。

相关文章

网友评论

    本文标题:flannel-kubernetes的网络模型

    本文链接:https://www.haomeiwen.com/subject/lyfymttx.html