上一節咱們分析了 Weave 的網絡結構,今天討論 Weave 的連通和隔離特性。
docker
首先在host2 執行以下命令: 網絡
weave launch 192.168.56.104ui
這裏必須指定 host1 的 IP 192.168.56.104
,這樣 host1 和 host2 才能加入到同一個 weave 網絡。 spa
運行容器 bbox3: code
eval $(weave env) orm
docker run --name bbox3 -itd busyboxci
bbox3 可以直接 ping bbox1 和 bbox2。 路由
bbox一、bbox2 和 bbox3 的 IP 分別爲 10.32.0.1/十二、10.32.0.2/12 和 10.44.0.0/12,注意掩碼爲 12 位,實際上這三個 IP 位於同一個 subnet 10.32.0.0/12。經過 host1 和 host2 之間的 VxLAN 隧道,三個容器邏輯上是在同一個 LAN 中的,固然能直接通訊了。bbox3 ping bbox1 的數據流向以下圖所示: input
① 數據包目的地址爲 10.32.0.1,根據 bbox3 的路由表,數據從 ethwe 發送出去。 it
② host2 weave 查詢到目的地主機,將數據經過 VxLAN 發送給 host1。
③ host1 weave 接受到數據,根據目的 IP 將數據轉發給 bbox1。
默認配置下,weave 使用一個大 subnet(例如 10.32.0.0/12),全部主機的容器都從這個地址空間中分配 IP,由於同屬一個 subnet,容器能夠直接通訊。若是要實現網絡隔離,能夠經過環境變量 WEAVE_CIDR
爲容器分配不一樣 subnet 的 IP,舉例以下:
這裏 WEAVE_CIDR=net:10.32.2.0/24
的做用是使容器分配到 IP 10.32.2.2
。因爲 10.32.0.0/12 與 10.32.2.0/24 位於不一樣的 subnet,因此沒法 ping 到 bbox1。除了 subnet,咱們還能夠直接爲容器分配特定的 IP:
Weave 網絡中的連通特性就討論到這裏,下一節咱們討論 Weave 與外網的連通性。