overlay 网络的具体实现
2019-11-29 本文已影响0人
逗比的一生
docker 会为每个 overlay 网络创建一个独立的 network namespace,其中会有一个 linux bridge br0,endpoint 还是由 veth pair 实现,一端连接到容器中(即 eth0),另一端连接到 namespace 的 br0 上。
br0 除了连接所有的 endpoint,还会连接一个 vxlan 设备,用于与其他 host 建立 vxlan tunnel。容器之间的数据就是通过这个 tunnel 通信的。逻辑网络拓扑结构如图所示:
逻辑网络拓扑图
要查看 overlay 网络的 namespace 可以在 host1 和 host2 上执行ip netns
(请确保在此之前执行过ln -s /var/run/docker/netns /var/run/netns
),可以看到两个 host 上有一个相同的namespace “1-f4af9b33c0”
:
ip netns
......
1-f4af9b33c0
......
这就是 ov_net1 的 namespace,查看 namespace 中的 br0 上的设备。
br0
查看 vxlan1 设备的具体配置信息可知此 overlay 使用的 VNI(VxLAN ID)为 256。
vxlan
overlay IPAM
docker 默认为 overlay 网络分配 24 位掩码的子网(10.0.X.0/24)
,所有主机共享这个 subnet,容器启动时会顺序从此空间分配 IP。当然我们也可以通过 --subnet
指定 IP 空间。
docker network create -d overlay --subnet 10.22.1.0/24 ov_net3