overlay网络是swarm集群跨主机通信底座,通过vxlan封装构建逻辑二层网络;routing mesh实现l4层无感负载均衡,内置dns支持服务名解析与故障ip自动剔除。

要让容器化业务集群真正“扛得住、切得快、不中断”,Docker 网络技术不是辅助项,而是高可用的底层支撑。关键不在于堆砌功能,而在于选对网络模式、配好服务发现、用稳流量路径。
用 Overlay 网络打通跨主机通信
单机 bridge 网络无法支撑多节点故障转移——节点一挂,同网段容器全失联。Overlay 网络是 Swarm 集群的默认通信底座,它在主机间封装 VXLAN 流量,自动构建一个逻辑二层网络。
- 创建时启用加密和自定义子网:
docker network create -d overlay --opt encrypted --subnet 10.0.10.0/24 mynet - 服务必须显式接入该网络:
--network mynet,否则容器无法被路由网格识别 - 避免与宿主机物理网段重叠(如 192.168.1.0/24),否则可能导致 DNS 解析异常或健康检查失败
靠 Routing Mesh 实现无感负载均衡
Swarm 内置的路由网格(Routing Mesh)是 L4 层透明负载均衡器,所有暴露端口的服务都会自动注册到该网格。客户端只需访问任一节点 IP + 端口,请求即被转发至健康副本,无需额外部署 Nginx 或 HAProxy。
- 服务发布端口时加
-p 80:80即启用路由网格;若只想内部通信,改用--publish mode=host关闭外部暴露 - 网格自动剔除故障任务:当某副本连续三次健康检查失败(默认间隔30s),该节点将不再接收新连接
- 注意:路由网格仅作用于
ingress网络(默认),自定义 overlay 网络需手动配置 DNS 轮询或使用 VIP 方案
借内置 DNS 实现服务发现与故障隔离
Swarm 内置 DNS 服务器运行在每个节点上,容器可通过服务名直接解析——且返回的是当前健康的任务 IP 列表(非固定地址)。这是实现软故障隔离的基础。
- 同一服务多个副本,
curl http://web:80会轮询解析到不同 IP,天然支持客户端侧负载均衡 - 若某副本崩溃,DNS 缓存会在 1 秒内刷新,后续解析结果自动排除该 IP(基于任务状态同步)
- 避免硬编码 IP 或依赖外部注册中心(如 Consul)——除非需要跨集群或混合环境
通过网络标签控制流量亲和与容灾域
单纯靠副本数不能防止单点失效。利用节点标签 + 网络约束,可强制服务副本分散在不同物理区、机架甚至云可用区。
- 先给节点打标签:
docker node update --label-add region=shanghai-a manager1 - 部署时指定约束:
--constraint node.labels.region==shanghai-a或反亲和:--constraint "node.role==worker" - 结合 overlay 网络的
--opt com.docker.network.driver.overlay.vxlanid_list=4097可隔离多租户流量,避免广播风暴影响主业务











