一文搞懂各類 Docker 網絡 - 天天5分鐘玩轉 Docker 容器技術(72)

前面各小節咱們前後學習了 Docker Overaly,Macvaln,Flannel,Weave 和 Calico 跨主機網絡方案。目前這個領域是百家爭鳴,並且還有新的方案不斷涌現。docker

本節將從不一樣維度比較各類網絡方案,你們在選擇的時候能夠參考。CloudMan 的建議是:沒有最好的,只有最適合的,明確本身的需求,經過 PoC 選型。
數據庫

Docker 起初只提供了簡單的 single-host 網絡,顯然這不利於 Docker 構建容器集羣並經過 scale-out 方式橫向擴展到多個主機上。 網絡

在市場需求的推進下,跨主機容器網絡技術開始發展。這是一個很是活躍的技術領域,在不長的時間裏已經涌現了不少優秀方案。本章咱們詳細討論了幾種主流的方案 - Docker Overlay、Macvlan、Flannel、Weave 和 Calico。如今是時候作個比較了,讓你們對各類方案的特色和優點有更深刻的理解。 分佈式

咱們將從以下幾個方面比較,你們能夠根據不一樣場景選擇最合適的方案。 性能

網絡模型
採用何種網絡模型支持 multi-host 網絡? 學習

Distributed Store 
是否須要 etcd 或 consul 這類分佈式 key-value 數據庫存儲網絡信息? 測試

IPMA
如何管理容器網絡的 IP? ui

連通與隔離
提供怎樣的網絡連通性?支持容器間哪一個級別和哪一個類型的隔離? spa

性能
性能比較。 code

網絡模型

跨主機網絡意味着將不一樣主機上的容器用同一個虛擬網絡鏈接起來。這個虛擬網絡的拓撲結構和實現技術就是網絡模型。

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 網絡。

各方案的網絡模型描述以下:

Distributed Store

Docker Overlay、Flannel 和 Calico 都須要 etcd 或 consul。Macvlan 是簡單的 local 網絡,不須要保存和共享網絡信息。Weave 本身負責在主機間交換網絡配置信息,也不須要 Distributed Store。

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。

連通與隔離

同一 Docker Overlay 網絡中的容器能夠通訊,但不一樣網絡之間沒法通訊,要實現跨網絡訪問,只有將容器加入多個網絡。與外網通訊能夠經過 docker_gwbridge 網絡。

Macvlan 網絡的連通或隔離徹底取決於二層 VLAN 和三層路由。

不一樣 Flannel 網絡中的容器直接就能夠通訊,沒有提供隔離。與外網通訊能夠經過 bridge 網絡。

Weave 網絡默認配置下全部容器在一個大的 subnet 中,能夠自由通訊,若是要實現隔離,須要爲容器指定不一樣的 subnet 或 IP。與外網通訊的方案是將主機加入到 weave 網絡,並把主機看成網關。

Calico 默認配置下只容許位於同一網絡中的容器之間通訊,但經過其強大的 Policy 可以實現幾乎任意場景的訪問控制。

性能

性能測試是一個很是嚴謹和複雜的工程,這裏咱們只嘗試從技術方案的原理上比較各方案的性能。

最樸素的判斷是: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 存儲。

二維碼+指紋.png

相關文章
相關標籤/搜索