calico的网络解决方案与flannel的host-gw的工做模式,几乎是彻底同样的;
bash
calico也会在每台宿主机上,添加和host-gw同样的路由规则,以下所示:网络
< 目的容器 IP 地址段 > via < 网关的 IP 地址 > dev eth0
重要概念:ide
BGP:边界网关协议,Linux内核原生支持、专门在大规模数据中内心维护不一样“自治系统”之间路由信息的、无中心的路由协议;spa
它跟普通路由器的不一样之处在于,它的路由表里拥有其余自治系统里的主机路由信息。3d
简单的来讲:BGP就是在大规模网络中实现节点路由信息共享的一种协议blog
如图所示:接口
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;同步
在示例中,自动同步各自路由信息,咱们把它形象的称为:边界网关it
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