Flannel、Calico网络原理

106次阅读
没有评论

1 详述flannel网络原理

Flannel、Calico网络原理

  • Flannel首先创建了一个名为flannel0的网桥,而且这个网桥的一端连接docker0网桥,另一端连接一个叫作flanneld的服务进程。

  • flanneld进程上连etcd,利用etcd来管理可分配的IP地址段资源,同时监控etcd中每个Pod的实际地址,并在内存中建立了一个Pod节点路由表;

  • flanneld进程下连docker0和物理网络,使用内存中的Pod节点路由表,将docker0发给它的数据包包装起来,利用物理网络的连接将数据包投递到目标flanneld上,从而完成Pod到Pod之间的直接地址通信。

  • Flannel之间的底层通信协议的可选技术包括UDP、VxLan、AWS VPC等多种方式。通过源flanneld封包、目标flanneld解包,最终docker0收到的就是原始的数据,对容器应用来说是透明的,感觉不到中间Flannel的存在。

  • Flannel每次分配的地址段都在同一个公共区域获取,从而实现不同Node上的Pod分配的IP不产生冲突。而且在Flannel分配好地址段后,其余操作由Docker完成的,Flannel通过修改Docker的启动参数将分配给它的地址段传递进去:--bip=172.17.18.1/24

    通过如上方式,Flannel就控制了每个Node上的docker0地址段的地址,从而保障了所有Pod的IP地址在同一个水平网络中且不产生冲突。Flannel完美地实现了对Kubernetes网络的支持,但是它引入了多个网络组件,在网络通信时需要转到flannel0网络接口,再转到用户态的flanneld程序,到对端后还需要走这个过程的反过程,所以也会引入一些网络的时延损耗。另外,Flannel模型默认采用了UDP作为底层传输协议,UDP本身是非可靠协议,虽然两端的TCP实现了可靠传输,但在大流量、高并发的应用场景下还建议多次测试。

2 详述Calico网络原理

Flannel、Calico网络原理

Calico的主要组件:

  • Felix:Calico Agent,运行在每个Node上,负责为容器设置网络资源(IP地址、路由规则、iptables规则等),保证跨主机容器网络互通。
  • etcd:Calico使用的后端存储。
  • BGP Client:负责把Felix在各Node上设置的路由信息通过BGP协议广播到Calico网络。
  • Route Reflector:通过一个或者多个BGP Route Reflector来完成大规模集群的分级路由分发。
  • CalicoCtl:Calico命令行管理工具。
Honest1y
版权声明:本站原创文章,由Honest1y于2021年02月05日发表,共计2746字。
转载提示:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)