Ubuntu 搭建 Overlay 网络的两种常见方式
- 面向容器场景:使用 Docker Swarm 内置的 overlay 驱动,多主机上容器可直接互通,适合微服务与编排部署。
- 面向虚拟化/物理机场景:使用 Open vSwitch(OVS)+ VXLAN 在现有二层/三层网络上构建叠加网络,适合 KVM/QEMU 虚机或裸金属跨主机互联。
方式一 Docker Swarm 内置 Overlay 快速搭建
方式二 基于 Open vSwitch 的 Overlay 网络搭建
-
适用场景
- 需要在 KVM/QEMU 虚机或物理机之间构建跨主机二层/三层叠加网络,不依赖容器编排平台。
-
步骤
- 安装组件
sudo apt update
sudo apt install -y openvswitch-switch qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
- 在每台主机创建 OVS 网桥(示例名 br-overlay)
sudo ovs-vsctl add-br br-overlay
- 配置 VXLAN 隧道(示例:两台主机 IP 分别为 192.168.1.10/24 与 192.168.1.11/24,VNI 取 100)
- 主机A:
sudo ovs-vsctl add-port br-overlay vxlan0 – set interface vxlan0 type=vxlan options:remote_ip=192.168.1.11 options:key=100
- 主机B:
sudo ovs-vsctl add-port br-overlay vxlan0 – set interface vxlan0 type=vxlan options:remote_ip=192.168.1.10 options:key=100
- 将虚拟机或物理口接入网桥(示例将已有接口 eth1 接入)
sudo ovs-vsctl add-port br-overlay eth1
注:若使用 libvirt,可在虚拟机 XML 中将 的 bridge 指定为 br-overlay。
- 验证
- 查看 OVS 配置:ovs-vsctl show
- 在虚机内检查二层连通(如 arp/ping),确认跨主机二层可达。
常见问题与排查要点
-
Docker Swarm 模式
- 未加入 Swarm 无法创建或看到 global 作用域的 overlay 网络。
- 防火墙需放行 2377/TCP、7946/TCP+UDP、4789/UDP;跨主机时间不同步会导致控制面异常。
- 自定义子网避免与宿主机/物理网络冲突(如 10.10.0.0/24、172.17.0.0/16 等常见网段)。
-
OVS/VXLAN 模式
- 确保 VNI 一致、remote_ip 可达(跨三层需路由可达),物理/安全组策略允许 UDP 4789。
- 使用 ovs-vsctl show 检查端口与隧道状态;虚机/容器网卡正确接入 br-overlay。
扩展方案
- Docker 外部 KV 发现模式(不启用 Swarm)
- 以 Consul/Etcd/ZooKeeper 作为键值存储,配置 Docker daemon 的 cluster-store/cluster-advertise 后创建 overlay 网络。适合已有服务发现体系的场景。
- 第三方容器网络插件
- 如 Flannel、Weave、Calico 等,可与 Kubernetes 或 Docker 集成,提供更丰富的网络策略与规模能力。