(二十五)一文搞懂各種 Docker 網路
前面各小節我們先后學習了 Docker Overaly,Macvaln,Flannel,Weave 和 Calico 跨主機網路方案,目前這個領域是百家爭鳴,而且還有新的方案不斷涌現,本節將從不同維度比較各種網路方案,大家在選擇的時候可以參考,我的建議是:沒有最好的,只有最適合的,明確自己的需求,通過 PoC 選型,
Docker 起初只提供了簡單的 single-host 網路,顯然這不利于 Docker 構建容器集群并通過 scale-out 方式橫向擴展到多個主機上,
在市場需求的推動下,跨主機容器網路技術開始發展,這是一個非常活躍的技術領域,在不長的時間里已經涌現了很多優秀方案,本章我們詳細討論了幾種主流的方案 - Docker Overlay、Macvlan、Flannel、Weave 和 Calico,現在是時候做個比較了,讓大家對各種方案的特點和優勢有更深入的理解,
我們將從如下幾個方面比較,大家可以根據不同場景選擇最合適的方案,
- 網路模型:采用何種網路模型支持 multi-host 網路?
- Distributed Store: 是否需要 etcd 或 consul 這類分布式 key-value 資料庫存盤網路資訊?
- PMA:如何管理容器網路的 IP?
- 連通與隔離:提供怎樣的網路連通性?支持容器間哪個級別和哪個型別的隔離?
- 性能:性能比較,
(1)網路模型
跨主機網路意味著將不同主機上的容器用同一個虛擬網路連接起來,這個虛擬網路的拓撲結構和實作技術就是網路模型,
Docker overlay 如名稱所示,是 overlay 網路,建立主機間 VxLAN 隧道,原始資料包在發送端被封裝成 VxLAN 資料包,到達目的后在接收端解包,
Macvlan 網路在二層上通過 VLAN 連接容器,在三層上依賴外部網關連接不同 macvlan,資料包直接發送,不需要封裝,屬于 underlay 網路,
Flannel 我們討論了兩種 backend:vxlan 和 host-gw,vxlan 與 Docker overlay 類似,屬于 overlay 網路,host-gw 將主機作為網關,依賴三層 IP 轉發,不需要像 vxlan 那樣對包進行封裝,屬于 underlay 網路,
Weave 是 VxLAN 實作,屬于 overlay 網路,
各方案的網路模型描述如下:

(2)Distributed Store
Docker Overlay、Flannel 和 Calico 都需要 etcd 或 consul,Macvlan 是簡單的 local 網路,不需要保存和共享網路資訊,Weave 自己負責在主機間交換網路配置資訊,也不需要 Distributed Store,

(3)IPAM
Docker Overlay 網路中所有主機共享同一個 subnet,容器啟動時會順序分配 IP,可以通過 --subnet 定制此 IP 空間,
Macvlan 需要用戶自己管理 subnet,為容器分配 IP,不同 subnet 通信依賴外部網關,
Flannel 為每個主機自動分配獨立的 subnet,用戶只需要指定一個大的 IP 池,不同 subnet 之間的路由資訊也由 Flannel 自動生成和配置,
Weave 的默認配置下所有容器使用 10.32.0.0/12 subnet,如果此地址空間與現有 IP 沖突,可以通過 --ipalloc-range 分配特定的 subnet,
Calico 從 IP Pool(可定制)中為每個主機分配自己的 subnet,

(4)連通與隔離
同一 Docker Overlay 網路中的容器可以通信,但不同網路之間無法通信,要實作跨網路訪問,只有將容器加入多個網路,與外網通信可以通過 docker_gwbridge 網路,
Macvlan 網路的連通或隔離完全取決于二層 VLAN 和三層路由,
不同 Flannel 網路中的容器直接就可以通信,沒有提供隔離,與外網通信可以通過 bridge 網路,
Weave 網路默認配置下所有容器在一個大的 subnet 中,可以自由通信,如果要實作隔離,需要為容器指定不同的 subnet 或 IP,與外網通信的方案是將主機加入到 weave 網路,并把主機當作網關,
Calico 默認配置下只允許位于同一網路中的容器之間通信,但通過其強大的 Policy 能夠實作幾乎任意場景的訪問控制,
(5)性能
性能測驗是一個非常嚴謹和復雜的工程,這里我們只嘗試從技術方案的原理上比較各方案的性能,
最樸素的判斷是:Underlay 網路性能優于 Overlay 網路,
Overlay 網路利用隧道技術,將資料包封裝到 UDP 中進行傳輸,因為涉及資料包的封裝和解封,存在額外的 CPU 和網路開銷,雖然幾乎所有 Overlay 網路方案底層都采用 Linux kernel 的 vxlan 模塊,這樣可以盡量減少開銷,但這個開銷與 Underlay 網路相比還是存在的,所以 Macvlan、Flannel host-gw、Calico 的性能會優于 Docker overlay、Flannel vxlan 和 Weave,
Overlay 較 Underlay 可以支持更多的二層網段,能更好地利用已有網路,以及有避免物理交換機 MAC 表耗盡等優勢,所以在方案選型的時候需要綜合考慮,
至此,Docker 網路部分我們已經全部討論完了,下一節將開啟資料管理部分,即跨主機 Docker 存盤,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/239481.html
標籤:其他
上一篇:容器網路(八)如何定制 Calico Policy?【65】
下一篇:YUM源部署和使用
