上一節咱們在 host1 中運行了容器 bbox1,今天將詳細討論 overlay 網絡跨主機通訊的原理。linux
在 host2 中運行容器 bbox2:docker
bbox2 IP 爲 10.0.0.3,能夠直接 ping bbox1:網絡
可見 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 的網絡隔離特性。