overlay 如何实现跨主机通讯?- 天天5分钟玩转 Docker 容器技术(52)

上一节咱们在 host1 中运行了容器 bbox1,今天将详细讨论 overlay 网络跨主机通讯的原理。linux

在 host2 中运行容器 bbox2:docker

bbox2 IP 为 10.0.0.3,能够直接 ping bbox1:网络

249.png

可见 overlay 网络中的容器能够直接通讯,同时 docker 也实现了 DNS 服务。spa

下面咱们讨论一下 overlay 网络的具体实现:code

docker 会为每一个 overlay 网络建立一个独立的 network namespace,其中会有一个 linux bridge br0,endpoint 仍是由 veth pair 实现,一端链接到容器中(即 eth0),另外一端链接到 namespace 的 br0 上。ip

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配置

......network

1-f4af9b33c0

......


这就是 ov_net1 的 namespace,查看 namespace 中的 br0 上的设备。

查看 vxlan1 设备的具体配置信息可知此 overlay 使用的 VNI(VxLAN ID)为 256。

理解了 overlay 网络的连通性,下一节咱们继续讨论 overlay 的网络隔离特性。

二维码+指纹.png

相关文章
相关标签/搜索