Ubuntu 上设置 Overlay 网络的实用做法
在 Ubuntu 上,Overlay 网络常见有两类场景:一是 Docker Swarm/Compose 的多主机容器互联,二是基于 Open vSwitch 的虚拟主机/虚拟机 Overlay 组网。下面给出两种方案的最小可用步骤与验证方法。
方案一 Docker Swarm 与 Compose 的 Overlay 网络
- 准备与初始化
- 安装 Docker(若未安装):sudo apt-get update && sudo apt-get install -y docker.io && sudo systemctl enable --now docker
- 初始化 Swarm(任一管理节点执行):sudo docker swarm init
- 创建 Overlay 网络(全局可见,跨主机)
- 命令:sudo docker network create --driver overlay my_overlay_net
- 运行服务并接入网络(示例)
- 命令:sudo docker service create --name web --network my_overlay_net --replicas 2 nginx:alpine
- 使用 Docker Compose(version ≥ 3.8)
- 验证
- 查看网络:docker network ls | grep my_overlay_net
- 查看服务/容器:docker service ls;docker ps
- 进入容器测试:docker exec -it <容器ID> sh;ping <另一服务名或容器IP>
说明:Overlay 网络用于跨主机的容器通信;Compose 文件需启用 Swarm 模式(docker stack deploy)或在 Swarm 服务中使用。
方案二 基于 Open vSwitch 的虚拟主机 Overlay 组网
- 安装组件
- sudo apt update
- sudo apt install -y openvswitch-switch qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
- 创建 OVS 网桥并添加端口
- 创建网桥:sudo ovs-vsctl add-br br-overlay
- 添加端口(示例将虚拟机 TAP 设备接入):sudo ovs-vsctl add-port br-overlay tap0
- 创建并连接虚拟机(示例使用 virt-install)
- 验证
- 在宿主机查看网桥与端口:ovs-vsctl show
- 进入虚拟机后互 ping(或通过 SSH):ping <对端VM_IP>
说明:该方式通过 OVS 构建虚拟交换机,将多台虚拟机的 TAP 接口接入同一网桥,实现二层/三层 Overlay 互通。
常见问题与排查要点
- Docker Swarm 模式未启用
- 现象:创建 overlay 网络或部署 stack 时报错。
- 处理:先执行 sudo docker swarm init,再创建网络/部署服务。
- 多主机互通失败
- 现象:同网段 Overlay 容器跨主机不通。
- 处理:确认各主机 Docker 可互通管理端口(默认 2377/TCP)、VXLAN 端口(默认 4789/UDP)未被防火墙拦截;云主机需放通对应安全组规则。
- OVS 端口未接入或未获取到 IP
- 现象:VM 起不来或无法跨 VM 通信。
- 处理:确认 VM 网卡已连接到 br-overlay,并检查 DHCP/静态 IP 配置是否正确;使用 ovs-vsctl show 核对端口绑定。
- 旧版 Docker 外部键值存储配置(不推荐)
- 现象:需要外部集群存储(如 Consul)时,旧方式通过 daemon.json 的 cluster-store/cluster-advertise 配置。
- 建议:优先使用 Swarm 内置 Raft 管理集群,仅在特殊需求下才采用外部 KV。