flannel-kubernetes的网络模型

最近一直在研究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,完成容器之间的数据通信。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 转自:http://ju.outofmemory.cn/entry/255894 概述自从docker容器出现以来...
    dleyanlin阅读 1,547评论 0 7
  • 概述 自从docker容器出现以来,容器的网络通信就一直是大家关注的焦点,也是生产环境的迫切需求。而容器的网络通信...
    糙老爷们儿吃什么樱桃阅读 3,719评论 1 5
  • 转载自 http://blog.opskumu.com/docker.html 一、Docker 简介 Docke...
    极客圈阅读 10,699评论 0 120
  • 1, 网络是什么 计算机网络的组成组件: 节点 (node):节点主要是具有网络地址 (IP) 的设备之称。 服务...
    求闲居士阅读 1,562评论 0 3
  • “这辈子我们永远不分家!”“哪怕以后有了媳妇!”一直记得儿时和弟弟的这段童话。这时空里是否真会有个童话世界存在,鬼...
    酒鬼阿辽阅读 145评论 0 0

友情链接更多精彩内容