Ubuntu Overlay网络配置步骤
一、Docker Swarm 模式
- 适用场景:跨主机容器通信、原生服务发现与负载均衡。
- 步骤
- 初始化 Swarm(任选一台管理节点):执行命令:docker swarm init。如有多网卡,可指定管理地址:docker swarm init --advertise-addr <管理网卡IP>。
- 创建 Overlay 网络:
- 默认加密:
docker network create -d overlay my_overlay
- 指定网段与网关:
docker network create -d overlay --subnet 10.22.1.0/24 --gateway 10.22.1.1 my_overlay_network
- 如需跨主机自动发现,可启用加密:在上述命令后追加 –opt encrypted。
- 部署服务或启动容器并加入网络:
- 服务方式:docker service create --name web --network my_overlay nginx
- 容器方式:docker run -d --name app1 --network my_overlay ubuntu:24.04 sleep infinity
- 验证:
- 查看网络与服务:docker network ls、docker service ls
- 进入容器互 ping:docker exec -it app1 sh -c “ping -c 4 app2”(将 app2 替换为同网络下另一容器名或 IP)。
说明:Docker Swarm 的 Overlay 网络默认基于 VXLAN 封装,实现跨主机二层/三层连通与内置 DNS 解析服务名。
二、Docker Swarm 使用外部 KV 发现(可选)
- 适用场景:不运行内置 Raft 共识、希望对接外部一致性存储(如 Consul)进行集群成员与网络信息存储。
- 步骤
- 准备外部 KV(如 Consul),确保其对外可达(示例地址:192.168.1.100:8500)。
- 配置 Docker 守护进程(所有节点):编辑 /etc/docker/daemon.json
{
“cluster-store”: “consul://192.168.1.100:8500”,
“cluster-advertise”: “ens33:2376”
}
说明:将 ens33 替换为实际承载管理流量的网卡名。
- 重启 Docker:systemctl daemon-reload && systemctl restart docker
- 按“一、Docker Swarm 模式”的步骤创建 Overlay 网络并部署服务。
提示:使用外部 KV 时,请确保网络、防火墙与端口策略允许节点与 KV 之间通信。
三、多 Overlay 网络与 Docker Compose
- 适用场景:业务隔离(如 frontend/backend/db 分网)、同一主机多租户。
- 步骤
- 预先创建多个 Overlay 网络:
docker network create --driver overlay --subnet 10.0.9.0/24 --gateway 10.0.9.1 net_a
docker network create --driver overlay --subnet 10.0.10.0/24 --gateway 10.0.10.1 net_b
- 使用 Docker Compose(v3.8+)编排,将服务接入不同网络:
version: “3.8”
services:
web1:
image: nginx
networks:
- net_a
web2:
image: nginx
networks:
- net_b
networks:
net_a:
external: true
net_b:
external: true
- 部署与验证:
- 部署:docker stack deploy -c docker-compose.yml my_stack
- 验证:docker inspect web1 | grep -A3 Networks 查看是否连接到 net_a。
说明:多 Overlay 网络在同一 Swarm 内天然互通(基于 VXLAN 隧道与内置路由),可按业务划分网段与策略。
四、基于 Open vSwitch 的虚拟机 Overlay 组网(可选)
- 适用场景:非容器场景(KVM 虚拟机)、需要自定义隧道(如 VXLAN/GRE)与网桥策略。
- 步骤
- 安装组件:sudo apt update && sudo apt install openvswitch-switch qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
- 创建 OVS 网桥:sudo ovs-vsctl add-br br-overlay
- 创建隧道端口(示例为 VXLAN,对端 IP 为 192.168.10.20):
sudo ovs-vsctl add-port br-overlay vxlan0 – set interface vxlan0 type=vxlan options:remote_ip=192.168.10.20 options:key=100
如需 GRE 隧道:
sudo ovs-vsctl add-port br-overlay gre0 – set interface gre0 type=gre options:remote_ip=192.168.10.20
- 将虚拟机网络连接到 br-overlay(如使用 libvirt 网络或桥接)。
- 验证:在虚拟机内 ping 对端虚拟机 IP,或在宿主机查看 OVS 端口与转发表:ovs-vsctl show、ovs-ofctl dump-flows br-overlay。
说明:该方式通过 VXLAN/GRE 在现有三层网络上构建二层 Overlay,适合虚拟化与裸金属混合组网。
五、常见问题与排障要点
- 节点间互通:确保管理/隧道端口可达(如 2377/7946/4789 UDP),云环境需放通安全组与主机防火墙。
- MTU 设置:Overlay 封装引入额外头部,建议将容器/实例网卡 MTU 设置为 1450(或物理网络支持值),避免分片。
- 子网规划:不同 Overlay 网络使用不重叠 –subnet,避免与服务网段冲突。
- 加密与合规:对敏感流量启用 –opt encrypted;对接外部 KV 时,限制访问范围并启用鉴权。
- 服务发现:同一 Overlay 内可直接用服务名解析;跨网络需显式互联或使用外部 DNS/路由策略。