上一节咱们学习了 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 网络方案。