CentOS上Overlay网络模式选择指南

一、先明确你的使用场景

仅在单台主机内的容器通信:优先使用bridge,简单、开销小;需要直接复用主机网络时用host(无网络隔离);完全隔离用none。跨主机才考虑overlay。

跨多台CentOS主机编排容器:使用DockerSwarm的overlay(内置、与Swarm服务集成,操作最简)。

跨主机但不用Swarm:使用Docker的overlay+外部键值存储(如Consul/etcd)来维护网络成员信息。

需要给“非Swarm服务容器”接入overlay:创建网络时加–attachable,便于手工把容器连入。

对网络性能极度敏感、可改造底层网络:考虑Macvlan/IPvlan等二层直连方案(非overlay),减少封装开销。

二、常见方案对比与选择建议

方案适用场景依赖/前提主要优点主要注意点
bridge(单机)单机多容器互通配置简单、资源占用低不支持跨主机
host(单机)需要容器直接使用主机网络栈网络性能最好、端口直曝端口冲突风险、隔离性差
overlay+Swarm多主机容器编排DockerSwarm初始化内置跨主机网络、与Swarm服务无缝需维护Swarm集群
overlay+Consul/etcd多主机但不用Swarm外部KV集群灵活、与编排解耦需额外部署与运维KV
Macvlan/IPvlan极致性能、可改网络二层网络可达少封装、接近物理性能与宿主机网络耦合、配置复杂

说明:Overlay本质是在IP之上封装二层报文(常见为VXLAN/GRE),便于在不改动现有网络的前提下实现跨主机容器网络;在大型集群中相比传统VLAN更具扩展性与灵活性。

三、快速决策步骤

    是否跨主机:否→选bridge/host;是→继续。

    是否使用DockerSwarm:是→选overlay+Swarm;否→选overlay+Consul/etcd。

    是否有“非Swarm服务容器”要加入overlay:是→创建网络时加–attachable。

    是否追求极致网络性能且可改造底层网络:是→考虑Macvlan/IPvlan;否则→用overlay。

四、关键配置要点(以CentOS为例)

使用Swarm的overlay

初始化与管理节点:

dockerswarminit
;工作节点加入:
dockerswarmjoin--token:

创建网络:

dockernetworkcreate--driveroverlaymy-overlay
(给非Swarm容器接入时加–attachable)。

运行服务/容器:

dockerservicecreate--networkmy-overlaynginx
dockerrun-d--networkmy-overlaynginx

使用外部KV(Consul/etcd)的overlay

每台主机配置/etc/docker/daemon.json(示例为Consul):{“cluster-store”:“consul://:”,“cluster-advertise”:“:”,“default-address-pools”:[{“base”:“10.0.0.0/16”,“size”:24}]}

重启Docker:

systemctlrestartdocker
;创建网络:
dockernetworkcreate--driveroverlaymy-overlay
(需要手工接入时用–attachable)。

网络与连通性

可预先规划子网,例如:

dockernetworkcreate--driveroverlay--subnet=10.0.0.0/24--gateway=10.0.0.1my-overlay

验证:

dockerexec-it<容器名>ping<对端容器IP或名称>

防火墙与底层网络

放行VXLAN所需UDP端口(默认4789)及节点间管理通信端口,确保UDP/TCP互通。

云上环境注意安全组/NACL策略,避免封装流量被拦截。

五、常见误区与建议

将Docker存储驱动overlay/overlay2与Overlay网络混为一谈:前者是镜像层存储,后者是跨主机容器网络,职责不同。

未放行VXLANUDP4789或节点间通信端口导致“能创建网络但跨主机不通”。

在大型二层广播域中滥用VLAN扩展容器网络:规模与广播风暴风险高,Overlay(如VXLAN)更合适。

过度使用host网络:带来端口冲突与隔离性下降,非必要不建议。