k8s学习-Flannel,Calico网络插件

网友投稿 299 2022-09-09

k8s学习-Flannel,Calico网络插件

Flannel原理

flannel之所以可以搭建底层网络,因为它实现了以下两点:

可以给每个node上的docker容器都分配互不冲突的IP地址能在这些IP地址之间建立overlay network,可以将数据包原封不动的传递到目标容器内。

首先flannel创建了一个名为flannel0的网桥,而且这个网桥的一端连接到docker0网桥,另外一端连接到flanneld的服务进程。flanneld进程并不简单,它连上etcd,利用etcd来管理可分配的IP地址段资源,同时监控etcd中每个pod的实际地址,并在内存中建立了一个pod节点路由表;它下连docker0和物理网络,使用内存中pod节点路由表,将docker0发给它的数据包包装起来,利用物理网络的连接将数据包投递到目标flanneld上,从而完成pod到pod之间的直接地址通信。

flannel之间底层通信协议可选的技术包括UDP,vxlan,aws vpc等多种方式。通过flanneld封包,目标flanneld解包,docker0最终收到的就是原始数据,对于容器来说就是透明的。

flannel使用了集中的etcd存储,每次分配的地址段都在同一个公共区域获取,能够做到相互协调,不产生冲突,而且在flannel分配好了地址段后,后面的事情由docker完成,flannel通过修改docker的启动参数将分配给它的地址段传递进去。通过这些操作,Flannel就控制了每个NODE上docker0地址段的地址了,也就保障了所有POD的IP地址都在同一个水平网络中,而且不产生冲突。由于引入了多个网络组件,在网络通信的时候需要转到flannel0网络接口,在转到用户态的flanneld程序,会引入一些网络的延迟损耗。flannel模型默认采用了UDP作为底层传输协议,UDP本身为非可靠协议,虽然两端的TCP实现了可靠传输,但是在大流量,高并发的场景下还需要反复测试。

calico原理

calico是一个基于BGP的纯三层网络方案,在每个计算节点都使用Linux Kernel实现了以一个高效的vRouter来负责数据转发。每个vRouter都通过BGP协议把本节点上运行的容器的路由信息向整个calico网络广播,并自动设置到达其他节点上的路由转发规则。calico保证了所有容器之间的数据流量都是直接利用数据中心网络结构(L2或者L3),不需要额外的NAT,隧道或者Overlay Network,没有额外的解包封包,能够节约CPU计算,提高网络效率。

calico在小规模集群中可以直接互联,在大规模集群中可以通过额外的BGP route refelector来完成。

此外calico基于iptables还提供了丰富的网络策略,实现了k8s的network policy策略,提供了容器之间可达性限制的功能。

calico架构如下:

主要组件:

Felix: Calico Agent,运行在每个NODe上,负责为容器设置网络资源(IP地址,路由规则,iptables规则等,保证跨主机容器网络互通。etcd: Calico 使用的后端存储BGP Client:负责把Felix在各个Node设置的路由信息通过BGP广播到calico网络。Route Reflector :通过一个或者多个BGP Route Reflector完成大规模集群的分级路由分发calicoCtl:Calico命令行管理工具

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Operator-2从pod开始简单operator
下一篇:来势凶猛!阿里618开启「生态新赛道」 全域营销推动品牌数字化!
相关文章

 发表评论

暂时没有评论,来抢沙发吧~