Docker Weave Network
Weave Network:屬於第三方網絡項目。
Weave在Docker主機之間實現Overlay網絡,使用業界標准VXLAN封裝,基於UDP傳輸,也可以加密傳輸。
Weave Net創建一個連接多個Docker主機的虛擬網絡,類似於一個以太網交換機,所有的容器都連接到這上面,互相通信。
Weave Net由多個peer組成,Weave路由器運行不同Docker主機上,是一個用戶空間的進程;每個peer都有一個名稱,重啟保持不變。它們通過TCP連接彼此,建立后交換拓撲信息。
Weave Net可以在具有編號拓撲的部分連接的網絡中路由數據包。
例如:在下面網絡中,peer1直接連接2和3,但是如果1需要發送數據包到4和5,則必須先將其發送到peer3。
Weave Net中的”fast data path”使用Linux內核的OpenvSwich datapath模塊。該模塊使Weave Net路由器能夠告知內核如何處理數據包。
OpenvSwich datapath和VXLAN功能在Linux內核版本3.12+才支持,如果內核不支持,則Weave Net使用”user mode”數據包路徑。Weave Net會自動選擇兩台主機之間最快的路徑傳輸數據,提供近原生吞吐量和延遲。
特點:
# IP地址管理(IPAM) Weave自動為容器分配唯一的IP地址。可通過weave ps查看 # 命名和發現 命名的容器自動會注冊到Weave DNS中,並可以通過容器名稱訪問。 注:weave自己維護了一個微型的dns服務器。可以實現主機名通信。 # 負載均衡 允許注冊多個相同名稱的容器,Weave DNS隨機為每個請求返回地址,提供基本的負載均衡功能。 注:如果訪問容器名相同,則會自動輪詢訪問該容器,實現負載均衡。 # 手動指定IP地址 docker run –it –e WEAVE_CIDR=10.32.0.100/24 busybox # 動態拓撲 可以在不停止或重新配置剩余Docker主機的情況下添加主機到Weave網絡中或從Weave網絡中刪除 # 容錯 weave peer不斷交換拓撲信息,監視和建立與其他peer的網絡連接。如果有主機或網絡出現故障,Weave會繞過這個主機,保證兩邊容器可以繼續通信,當恢復時,恢復完全連接
Docker Weave 工作原理
- 網卡設備
- Container eth0:eth0是容器主機的默認網絡,主要提供容器訪問外網所提供的服務,走的默認docker網絡架構,只不過他創建了docker_gwbridge這個網橋。
- docker_gwbridge:docker_gwbridge是容器所創建的網橋它替代了docker0的服務。
- Contailner ethwe:它是veth pair虛擬設備對,與其他容器通信的網絡虛擬網卡。
- vethwe-bridge:是ethwe設備對創建的weave網橋。網橋內分配的具體的IP與網關。
- weave:weave網橋,通過route路由表找到目標,通過端口將數據包轉發到對端端口節點。
- eth0:真機網卡與外界網卡連接得真機網卡,它用來轉發,容器VXLAN與NAT兩種網卡類型的數據包到指定的對端節點。
- 注:weave會將相鄰的節點互相學習,通過route路由表進行相互通信,並通過單獨的端口發送數據。類似於靜態路由。
Contailner ethwe 發送數據包到對端容器通信
1、ethwe 會將數據包發送給vethwe-bridge網橋。
2、vethwe-bridge接收到數據包后由weave去處理這個數據,通過UDP6783數據端口依照weave的路由表轉發到下一路由節點。
3、如果該節點就是目的地,本地weave會把信息轉發到內核的TCP協議站,再轉發到目的節點。