CentOS 上 Overlay 网络模式选择指南
一、先明确你的使用场景
- 仅在单台主机内的容器通信:优先使用 bridge,简单、开销小;需要直接复用主机网络时用 host(无网络隔离);完全隔离用 none。跨主机才考虑 overlay。
- 跨多台 CentOS 主机编排容器:使用 Docker Swarm 的 overlay(内置、与 Swarm 服务集成,操作最简)。
- 跨主机但不用 Swarm:使用 Docker 的 overlay + 外部键值存储(如 Consul/etcd)来维护网络成员信息。
- 需要给“非 Swarm 服务容器”接入 overlay:创建网络时加 –attachable,便于手工把容器连入。
- 对网络性能极度敏感、可改造底层网络:考虑 Macvlan/IPvlan 等二层直连方案(非 overlay),减少封装开销。
二、常见方案对比与选择建议
| 方案 |
适用场景 |
依赖/前提 |
主要优点 |
主要注意点 |
| bridge(单机) |
单机多容器互通 |
无 |
配置简单、资源占用低 |
不支持跨主机 |
| host(单机) |
需要容器直接使用主机网络栈 |
无 |
网络性能最好、端口直曝 |
端口冲突风险、隔离性差 |
| overlay + Swarm |
多主机容器编排 |
Docker Swarm 初始化 |
内置跨主机网络、与 Swarm 服务无缝 |
需维护 Swarm 集群 |
| overlay + Consul/etcd |
多主机但不用 Swarm |
外部 KV 集群 |
灵活、与编排解耦 |
需额外部署与运维 KV |
| Macvlan/IPvlan |
极致性能、可改网络 |
二层网络可达 |
少封装、接近物理性能 |
与宿主机网络耦合、配置复杂 |
说明:Overlay 本质是在 IP 之上封装二层报文(常见为 VXLAN/GRE),便于在不改动现有网络的前提下实现跨主机容器网络;在大型集群中相比传统 VLAN 更具扩展性与灵活性。
三、快速决策步骤
- 是否跨主机:否 → 选 bridge/host;是 → 继续。
- 是否使用 Docker Swarm:是 → 选 overlay + Swarm;否 → 选 overlay + Consul/etcd。
- 是否有“非 Swarm 服务容器”要加入 overlay:是 → 创建网络时加 –attachable。
- 是否追求极致网络性能且可改造底层网络:是 → 考虑 Macvlan/IPvlan;否则 → 用 overlay。
四、关键配置要点(以 CentOS 为例)
- 使用 Swarm 的 overlay
- 初始化与管理节点:
docker swarm init;工作节点加入:docker swarm join --token <TOKEN> <MANAGER-IP>:<PORT>。
- 创建网络:
docker network create --driver overlay my-overlay(给非 Swarm 容器接入时加 –attachable)。
- 运行服务/容器:
docker service create --network my-overlay nginx 或 docker run -d --network my-overlay nginx。
- 使用 外部 KV(Consul/etcd)的 overlay
- 每台主机配置 /etc/docker/daemon.json(示例为 Consul):
{
“cluster-store”: “consul://<consul_ip>:<consul_port>”,
“cluster-advertise”: “<node_ip>:<docker_port>”,
“default-address-pools”: [ { “base”: “10.0.0.0/16”, “size”: 24 } ]
}
- 重启 Docker:
systemctl restart docker;创建网络:docker network create --driver overlay my-overlay(需要手工接入时用 –attachable)。
- 网络与连通性
- 可预先规划子网,例如:
docker network create --driver overlay --subnet=10.0.0.0/24 --gateway=10.0.0.1 my-overlay。
- 验证:
docker exec -it <容器名> ping <对端容器IP或名称>。
- 防火墙与底层网络
- 放行 VXLAN 所需 UDP 端口(默认 4789)及节点间管理通信端口,确保 UDP/TCP 互通。
- 云上环境注意 安全组/NACL 策略,避免封装流量被拦截。
五、常见误区与建议
- 将 Docker 存储驱动 overlay/overlay2 与 Overlay 网络混为一谈:前者是镜像层存储,后者是跨主机容器网络,职责不同。
- 未放行 VXLAN UDP 4789 或节点间通信端口导致“能创建网络但跨主机不通”。
- 在大型二层广播域中滥用 VLAN 扩展容器网络:规模与广播风暴风险高,Overlay(如 VXLAN) 更合适。
- 过度使用 host 网络:带来端口冲突与隔离性下降,非必要不建议。