上一節咱們學習了 Weave 網絡內部如何通訊,今天討論 Weave 如何與外界通訊。
docker
weave 是一個私有的 VxLAN 網絡,默認與外部網絡隔離。外部網絡如何才能訪問到 weave 中的容器呢? 網絡
答案是: 學習
首先將主機加入到 weave 網絡。 ui
而後把主機看成訪問 weave 網絡的網關。 spa
要將主機加入到 weave,執行 weave expose
。
設計
這個 IP 10.32.0.3
會被配置到 host1 的 weave 網橋上。 code
這是個精妙的設計,讓咱們再看看下面 host1 的網絡結構: orm
weave 網橋位於 root namespace,它負責將容器接入 weave 網絡。給 weave 配置同一 subnet 的 IP 其本質就是將 host1 接入 weave 網絡。 host1 如今已經能夠直接與同一 weave 網絡中的容器通訊了,不管容器是否位於 host1。 ip
在 host1 中 ping 同一主機的 bbox1: ci
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,因此容器無需額外配置就能訪問外網。
10.32.0.0/12 是 weave 網絡使用的默認 subnet,若是此地址空間與現有 IP 衝突,能夠經過 --ipalloc-range
分配特定的 subnet。
weave launch --ipalloc-range 10.2.0.0/16
不過請確保全部 host 都使用相同的 subnet。
Weave 網絡方案咱們就討論到這裏,下一節學習 Calico 網絡方案。