calico的网络解决方案与flannel的host-gw的工作模式,几乎是完全一样的;

calico也会在每台宿主机上,添加和host-gw一样的路由规则,如下所示:

< 目的容器 IP 地址段 > via < 网关的 IP 地址 > dev eth0

重要概念:

BGP:边界网关协议,Linux内核原生支持、专门在大规模数据中心里维护不同“自治系统”之间路由信息的、无中心的路由协议;

它跟普通路由器的不同之处在于,它的路由表里拥有其他自治系统里的主机路由信息。

简单的来说:BGP就是在大规模网络中实现节点路由信息共享的一种协议

如图所示:

  • 10.10.0.2想要到达172.17.0.3;需要通过Router1的C接口,发送网关Router2;Router2根据自己的路由表,发给172.17.0.3;

  • 反过来,172.17.0.3想要访问10.10.0.2,需要在Router2添加一条路由,比如在Router2的C接口发给Router1;

  • 在示例中,自动同步各自路由信息,我们把它形象的称为:边界网关

    calico--容器跨主机网络通信方案_第1张图片

calico的重要组件:

felix:在每个节点运行,负责在当前节点插入路由规则

bird:BGP的客户端,专门负责向集群中其它节点分发路由规则信息

注:calico不会像flannel那样,创建任何网桥设备,直接通过route规则发送数据

BGP工作模式:

bgp工作模式和flannel的host-gw模式几乎一样;

bird是bgd的客户端,与集群中其它节点的bird进行通信,以便于交换各自的路由信息;

随着节点数量N的增加,这些路由规则将会以指数级的规模快速增长,给集群本身网络带来巨大压力,官方建议小于100个节点;

限制:和flannel的host-gw限制一样,要求物理机在二层是连能的,不能跨网段;

Route Reflector模式:

在更大规模的集群中,需要通过Route Reflector模式专门创建一个或者几个专门的节点,负责跟所有的BGP客户端建立连接,从而学全全局的路由规则;

而其它节点,只需要跟这几个专门的节点交换路由信息,就可以获得整整个集群的路由信息

IPIP模式:

场景:用在跨网段通信的情况下,bgp模式在跨网段的场景将不能工作;

tunl0:创建的虚拟网卡设备,此时的作用就和flannel的VxLAN工作模式类似(此处的tunl0不是flannel的UDP模式中的tun0)

增加的路由规则会通过tunl0,如下所示:

10.233.2.0/24 via 192.168.2.2 tunl0