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的重要组件:
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