暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
Flannel学习.pdf
210
6页
0次
2022-10-19
5墨值下载
Flannel原理
介绍
FlannelCoreOS团队针对Kubernetes设计的一个网络规划服务,简单来说,它的功能是让集群中的不
同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址。
Kubernetes的网络模型中,假设了每个物理节点应该具备一段属于同一个内网IP段内专用的子网
IP”。例如:
节点A10.0.1.0/24节点B10.0.2.0/24节点C10.0.3.0/24
但在默认的Docker配置中,每个节点上的Docker服务会分别负责所在节点容器的IP分配。这样导致的一
个问题是,不同节点上容器可能获得相同的内外IP地址。并使这些容器之间能够之间通过IP地址相互找
到,也就是相互ping通。
Flannel的设计目的就是为集群中的所有节点重新规划IP地址的使用规则,从而使得不同节点上的容器能
够获得同属一个内网不重复的”IP地址,并让属于不同节点上的容器能够直接通过内网IP通信。
Flannel的工作原理
Flannel实质上是一种覆盖网络(overlay network),也就是将TCP数据包装在另一种网络包里面进行
路由转发和通信,目前已经支持UDPVxLANAWS VPCGCE路由等数据转发方式。
默认的节点间数据通信方式是UDP转发,在FlannelGitHub页面有如下的一张原理图:
这张图的信息量很全,下面简单的解读一下。
数据从源容器中发出后,经由所在主机的 Docker0 虚拟网卡转发到 flannel0 虚拟网卡,这是个P2P
虚拟网卡,flanneld服务监听在网卡的另外一端。
Flannel通过Etcd服务维护了一张节点间的路由。
源主机的flanneld服务将原本的数据内容UDP封装后根据自己的路由表投递给目的节点的flanneld
,数据到达以后被解包,然后直接进入目的节点的flannel0虚拟网卡,然后被转发到目的主机的
Docker0虚拟网卡,最后就像本机容器通信一下的有Docker0路由到达目标容 器。
这样整个数据包的传递就完成了,这里需要解释三个问题。
第一个问题,UDP封装是怎么一回事?
我们来看下面这个图,这是在其中一个通信节点上抓取到的ping命令通信数据包。可以看到在UDP的数
据内容部分其实是另一个ICMP(也就是ping命令)的数据包。
原始数据是在起始节点的Flannel服务上进行UDP封装的,投递到目的节点后就被另一端的Flannel服务
还原成了原始的数据包,两边的Docker服务都感觉不到这个过程的存在。
第二个问题,为什么每个节点上的Docker会使用不同的IP地址段?
这个事情看起来很诡异,但真相十分简单。其实只是单纯的因为Flannel通过Etcd分配了每个节点可用的
IP地址段后,偷偷的修改了Docker的启动参数,见下图。
这个是在运行了Flannel服务的节点上查看到的Docker服务进程运行参数。
注意其中的 --bip=172.17.18.1/24 这个参数,它限制了所在节点容器获得的IP范围。
这个IP范围是由Flannel自动分配的,由Flannel通过保存在Etcd服务中的记录确保它们不会重复。
of 6
5墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜