Weave 如何與外網通信?- 每天5分鐘玩轉 Docker 容器技術(66)
上一節我們學習了 Weave 網絡內部如何通信,今天討論 Weave 如何與外界通信。
weave 是一個私有的 VxLAN 網絡,默認與外部網絡隔離。外部網絡如何才能訪問到 weave 中的容器呢?
答案是:
-
首先將主機加入到 weave 網絡。
-
然後把主機當作訪問 weave 網絡的網關。
要將主機加入到 weave,執行 weave expose
。
這個 IP 10.32.0.3
會被配置到 host1 的 weave 網橋上。
這是個精妙的設計,讓我們再看看下面 host1 的網絡結構:
weave 網橋位於 root namespace,它負責將容器接入 weave 網絡。給 weave 配置同一 subnet 的 IP 其本質就是將 host1 接入 weave 網絡。 host1 現在已經可以直接與同一 weave 網絡中的容器通信了,無論容器是否位於 host1。
在 host1 中 ping 同一主機的 bbox1:
ping host2 上的 bbox3:
接下來要讓其他非 weave 主機訪問到 bbox1 和 bbox3,只需將網關指向 host1。例如在 192.168.56.101 上添加如下路由:
ip route add 10.32.0.0/12 via 192.168.56.104
能夠 ping 到 weave 中的容器了。
通過上面的配置我們實現了外網到 weave 這個方向的通信,反方向呢?
其實答案很簡單:因為容器本身就掛在默認的 bridge 網絡上,docker0 已經實現了 NAT,所以容器無需額外配置就能訪問外網。
IPAM
10.32.0.0/12 是 weave 網絡使用的默認 subnet,如果此地址空間與現有 IP 沖突,可以通過 --ipalloc-range
分配特定的 subnet。
weave launch --ipalloc-range 10.2.0.0/16
不過請確保所有 host 都使用相同的 subnet。
Weave 網絡方案我們就討論到這裏,下一節學習 Calico 網絡方案。
Weave 如何與外網通信?- 每天5分鐘玩轉 Docker 容器技術(66)