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