Callico
Callico容器網(wǎng)絡(luò)和其他虛擬網(wǎng)絡(luò)最大的不同是,它沒有采用overlay網(wǎng)絡(luò)做報文轉(zhuǎn)發(fā),提供了純?nèi)龑泳W(wǎng)絡(luò)模型。三層通信模型表示每個容器都通過IP直接通信,中間通過路由轉(zhuǎn)發(fā)找到對方,容器所在節(jié)點類似于傳統(tǒng)路由器,提供了路由查找功能,要想路由工作能夠正常,每個容器所在的主機節(jié)點必須有某種方法知道整個集群的路由信息,Callico采用 BGP路由協(xié)議,全稱是 Border Gateway Protocol。通過BGP,使得全網(wǎng)所有的Node和網(wǎng)絡(luò)設(shè)備都記錄到全網(wǎng)路由,可以看到這種方式會產(chǎn)生很多的無效路由,對網(wǎng)絡(luò)設(shè)備路由規(guī)格要求較大,整網(wǎng)不能有路由規(guī)格低的設(shè)備。BGP是一種成熟的網(wǎng)絡(luò)路由協(xié)議,在傳統(tǒng)網(wǎng)絡(luò)中就有廣泛使用,如此網(wǎng)絡(luò)部分天然就可以對Callico進行支持,只不過對網(wǎng)絡(luò)路由規(guī)格要求高一些。另外,Callico實現(xiàn)了從源容器經(jīng)過源宿主機,經(jīng)過數(shù)據(jù)中心路由,然后到達目的宿主機,最后分配到目的容器過程,整個過程中始終都是根據(jù)BGP協(xié)議進行路由轉(zhuǎn)發(fā),并沒有進行封包,解包過程,這樣轉(zhuǎn)發(fā)效率就會快得多。所以,往往技術(shù)越簡化,執(zhí)行效率越高效,這是Callico容器網(wǎng)絡(luò)的技術(shù)優(yōu)勢。
Flannel
Flannel是CoreOS提出用于解決容器集群跨主機通訊的網(wǎng)絡(luò)解決方案。Flannel實質(zhì)上是一種覆蓋網(wǎng)絡(luò)Overlay network,也就是將TCP數(shù)據(jù)包裝在另一種網(wǎng)絡(luò)包里面進行路由轉(zhuǎn)發(fā)和通信,目前已支持UDP、VXLAN、AWS VPC、GCE路由等數(shù)據(jù)轉(zhuǎn)發(fā)方式,其中以VXLAN技術(shù)最為流行,很多數(shù)據(jù)中心在考慮引入容器時,也考慮將網(wǎng)絡(luò)切換到Flannel的VXLAN網(wǎng)絡(luò)中來。Flannel為每個主機分配一個subnet,容器從此subnet中分配IP,這些IP可在主機間路由,容器間無需NAT和端口映射就可以跨主機通訊。Flannel讓集群中不同節(jié)點主機創(chuàng)建容器時都具有全集群唯一虛擬IP地址,并連通主機節(jié)點網(wǎng)絡(luò)。Flannel可為集群中所有節(jié)點重新規(guī)劃IP地址使用規(guī)則,從而使得不同節(jié)點上的容器能夠獲得“同屬一個內(nèi)網(wǎng)”且“不重復的”的IP地址,讓不同節(jié)點上的容器能夠直接通過內(nèi)網(wǎng)IP通信,網(wǎng)絡(luò)封裝部分對容器是不可見的。源主機服務(wù)將原本數(shù)據(jù)內(nèi)容UDP封裝后根據(jù)自己的路由表投遞給目的節(jié)點,數(shù)據(jù)到達以后被解包,然后直接進入目的節(jié)點虛擬網(wǎng)卡,然后直接達到目的主機容器虛擬網(wǎng)卡,實現(xiàn)網(wǎng)絡(luò)通信目的。Flannel雖然對網(wǎng)絡(luò)要求較高,要引入封裝技術(shù),轉(zhuǎn)發(fā)效率也受到影響,但是卻可以平滑過渡到SDN網(wǎng)絡(luò),VXLAN技術(shù)可以和SDN很好地結(jié)合起來,值得整個網(wǎng)絡(luò)實現(xiàn)自動化部署,智能化運維和管理,這也是網(wǎng)絡(luò)技術(shù)發(fā)展的方向。所以,F(xiàn)lannel舍棄了傳統(tǒng)網(wǎng)絡(luò),完全新建一套覆蓋網(wǎng)絡(luò)來支持容器,較適合于新建數(shù)據(jù)中心網(wǎng)絡(luò)部署。
Weave
Weave實質(zhì)上也是覆蓋網(wǎng)絡(luò),Weave可以把不同主機上容器互相連接的網(wǎng)絡(luò)虛擬成一個類似于本地網(wǎng)絡(luò)的網(wǎng)絡(luò),不同主機之間都使用自己的私有IP地址,當容器分布在多個不同的主機上時,通過Weave可以簡化這些容器之間的通信。Weave網(wǎng)絡(luò)中的容器使用標準的端口提供服務(wù)(如MySQL默認使用3306),管理微服務(wù)是十分直接簡單的。每個容器都可以通過域名來與另外的容器通信,也可以直接通信而無需使用NAT,也不需要使用端口映射或者復雜的聯(lián)接。部署Weave容器網(wǎng)絡(luò)最大的好處是無需修改你的應用代碼。Weave通過在容器集群的每個主機上啟動虛擬路由器,將主機作為路由器,形成互聯(lián)互通的網(wǎng)絡(luò)拓撲,在此基礎(chǔ)上,實現(xiàn)容器的跨主機通信。要部署Weave需要確保主機Linux內(nèi)核版本在3.8以上,Docker1.10以上,主機間訪問如果有防火墻,則防火墻必須彼此放行TCP 6783 和UDP 6783/6784這些端口號,這些是Weave控制和數(shù)據(jù)端口,主機名不能相同,Weave要通過主機名識別子網(wǎng)。Weave網(wǎng)絡(luò)類似于主機Overlay技術(shù),直接在主機上進行報文流量的封裝,從而實現(xiàn)主機到主機的跨Underlay三層網(wǎng)絡(luò)的互訪,這是和Flannel網(wǎng)絡(luò)的最大區(qū)別,F(xiàn)lannel是一種網(wǎng)絡(luò)Overlay方案。
三種容器網(wǎng)絡(luò)方案,適用于不同的應用場景,就看數(shù)據(jù)中心如何選擇了,從難易度上來講,Callico最簡單,其次Flannel,Weave最復雜,從網(wǎng)絡(luò)技術(shù)來看,Weave和Flannel都是網(wǎng)絡(luò)封裝技術(shù),區(qū)別在于封裝的位置在網(wǎng)絡(luò)設(shè)備上還是主機上。下圖詳列了下三種容器網(wǎng)絡(luò)方案的特點對比:
Calico | Flannel | Weave | |
組網(wǎng)模型 | 純?nèi)龑覤GP路由轉(zhuǎn)發(fā)方案 | VXLAN封裝 | VXLAN封裝 |
協(xié)議支持 | TCP、UDP、ICMP | 所有協(xié)議 | 所有協(xié)議 |
分布式存儲 | Etcd分布式存儲 | Etcd分布式存儲 | Rumor協(xié)議 |
時延測試 | 最小 | 一般 | 最大 |
BPS測試 | 最高 | 一般 | 最小 |
主機CPU使用率 | 最小 | 一般 | 最大 |
轉(zhuǎn)發(fā)效率 | 最大 | 一般 | 一般 |
從物理機到虛擬機,再到容器,這是服務(wù)器虛擬化技術(shù)發(fā)展的必然趨勢,容器解決虛擬機的使用限制,但也將網(wǎng)絡(luò)引入更復雜的境地,數(shù)據(jù)中心網(wǎng)絡(luò)要去適應這種變化,要去適配容器,所以才出現(xiàn)了這么多種容器網(wǎng)絡(luò)方案,這些方案都是為容器而生,從網(wǎng)絡(luò)層面去適配容器,是數(shù)據(jù)中心向容器進化所必須的。