1. 程式人生 > >Weave 如何與外網通信?- 每天5分鐘玩轉 Docker 容器技術(66)

Weave 如何與外網通信?- 每天5分鐘玩轉 Docker 容器技術(66)

ont 地址空間 是個 地址 title size lis ubuntu 微軟雅黑

上一節我們學習了 Weave 網絡內部如何通信,今天討論 Weave 如何與外界通信。

weave 是一個私有的 VxLAN 網絡,默認與外部網絡隔離。外部網絡如何才能訪問到 weave 中的容器呢?

答案是:

  1. 首先將主機加入到 weave 網絡。

  2. 然後把主機當作訪問 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)