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