overlay 如何實現跨主機通訊?- 天天5分鐘玩轉 Docker 容器技術(52)

上一節咱們在 host1 中運行了容器 bbox1,今天將詳細討論 overlay 網絡跨主機通訊的原理。linux

在 host2 中運行容器 bbox2:docker

bbox2 IP 爲 10.0.0.3,能夠直接 ping bbox1:網絡

249.png

可見 overlay 網絡中的容器能夠直接通訊,同時 docker 也實現了 DNS 服務。spa

下面咱們討論一下 overlay 網絡的具體實現:code

docker 會爲每一個 overlay 網絡建立一個獨立的 network namespace,其中會有一個 linux bridge br0,endpoint 仍是由 veth pair 實現,一端鏈接到容器中(即 eth0),另外一端鏈接到 namespace 的 br0 上。ip

br0 除了鏈接全部的 endpoint,還會鏈接一個 vxlan 設備,用於與其餘 host 創建 vxlan tunnel。容器之間的數據就是經過這個 tunnel 通訊的。邏輯網絡拓撲結構如圖所示:容器

要查看 overlay 網絡的 namespace 能夠在 host1 和 host2 上執行 ip netns(請確保在此以前執行過 ln -s /var/run/docker/netns /var/run/netns),能夠看到兩個 host 上有一個相同的 namespace 「1-f4af9b33c0」:原理

ip netns配置

......network

1-f4af9b33c0

......


這就是 ov_net1 的 namespace,查看 namespace 中的 br0 上的設備。

查看 vxlan1 設備的具體配置信息可知此 overlay 使用的 VNI(VxLAN ID)爲 256。

理解了 overlay 網絡的連通性,下一節咱們繼續討論 overlay 的網絡隔離特性。

二維碼+指紋.png

相關文章
相關標籤/搜索