上一节咱们分析了 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 与外网的连通性。