Docker Swarm overlay 和 docker_gwbridge

在 Docker Swarm 中,容器需要同时连接 overlay 网络docker_gwbridge 网络,这是为了满足不同层面的通信需求,并确保服务的高可用性和外部可达性。


1 Overlay 网络:跨节点通信与服务发现

  • 作用

    • Overlay 网络(如用户自定义的 my-network 或系统自动生成的 ingress 网络)负责 跨节点容器间的通信,支持服务发现、DNS 解析和负载均衡 。
    • 所有服务容器通过 overlay 网络实现 内部通信,即使容器分布在不同节点上也能直接互通。
    • 例如,服务 A 调用服务 B 时,流量通过 overlay 网络传输,无需经过 NAT 或外部网络 。
  • 关键特性

    • 服务发现:通过内置 DNS,容器可以直接通过服务名解析目标容器的 IP。
    • 负载均衡:使用 VIP(虚拟 IP)或 DNSRR(DNS 轮询)模式,将请求均匀分配到后端容器。
    • 安全性 :支持加密(--opt encrypted),保护跨节点数据传输 。

2 docker_gwbridge 网络:外部通信与端口映射

  • 作用

    • docker_gwbridge 是默认的 桥接网络 ,负责将容器连接到宿主机的物理网络,主要解决以下问题:
      1. 外部访问 :容器需要访问互联网或外部服务时,通过 docker_gwbridge 实现 NAT 出站 。
      2. 端口发布 :当服务通过 -p 发布端口时,外部流量先到达宿主机的 docker_gwbridge,再转发到 overlay 网络中的容器 。
      3. 负载均衡入口ingress 网络(一种特殊的 overlay 网络)依赖 docker_gwbridge 处理外部请求的初始转发 。
  • 关键特性

    • NAT 功能:为容器提供私有 IP 到宿主机公网 IP 的地址转换。
    • 动态管理:Swarm 初始化或加入节点时自动创建,但支持自定义子网、MTU 等参数 。

3 两者协作的典型场景

场景 1:外部客户端访问服务
  1. 客户端请求发送到宿主机的公开端口(如 80)。
  2. 请求通过 docker_gwbridge 网络进入节点。
  3. Docker 的 IPVS 模块将流量路由到 ingress 网络(overlay 类型)。
  4. ingress 网络将请求转发到目标容器的 overlay 网络接口。
  5. 容器响应通过反向路径返回客户端 。
场景 2:容器访问外部网络
  1. 容器发起对外请求(如 apt-get update)。
  2. 请求通过 docker_gwbridge 网络进行 NAT 转换。
  3. 流量经宿主机的物理网卡发送到外部网络 。
场景 3:服务间内部通信
  1. 服务 A 调用服务 B 的服务名(如 redis)。
  2. 内置 DNS 解析出服务 B 的 VIP 或具体容器 IP。
  3. 流量通过 overlay 网络直接传输,不经过 docker_gwbridge

4 设计优势

  • 解耦内外通信 :overlay 网络专注于内部服务通信,docker_gwbridge 专注于外部交互,避免单点瓶颈。
  • 灵活扩展:用户可通过自定义 overlay 网络划分服务,同时依赖默认网络处理通用需求。
  • 高可用性ingress 网络结合 docker_gwbridge 实现跨节点负载均衡,确保服务对外可达 。

5 路由表解析

bash 复制代码
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.19.0.1      0.0.0.0         UG    0      0        0 eth1
10.0.5.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0
172.19.0.0      0.0.0.0         255.255.0.0     U     0      0        0 eth1

5.1 路由表字段含义
字段 说明
Destination 目标网络地址(0.0.0.0 表示默认路由)
Gateway 网关地址(0.0.0.0 表示本地直连网络)
Genmask 子网掩码(决定目标网络的范围)
Flags 标志位: - U(Up,路由可用) - G(Gateway,通过网关)
Metric 路由优先级(数值越小优先级越高)
Iface 出站网络接口(数据包从哪个网卡发出)

5.2 关键路由条目解析
(1) 默认路由(Default Route)
复制代码
0.0.0.0         172.19.0.1      0.0.0.0         UG    0      0        0 eth1
  • 作用 :所有非本地网络的流量(如访问公网、外部服务)都会通过 eth1 接口转发到网关 172.19.0.1
  • 意义
    • eth1 是 Docker 的 docker_gwbridge 网络(宿主机 NAT 网络),用于容器与外部网络的交互。
    • 该路由是容器访问外部世界的唯一通道。
(2) 本地 Overlay 网络
复制代码
10.0.5.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0
  • 作用 :目标地址为 10.0.5.0/24 子网的流量直接通过 eth0 接口发送,无需网关。
  • 意义
    • eth0 是 Docker 的 Overlay 网络(跨主机通信网络),用于容器间直接通信。
    • 该路由确保容器可以通过 Overlay 网络访问同一 Swarm 集群内的其他容器。
(3) docker_gwbridge 子网
复制代码
172.19.0.0      0.0.0.0         255.255.0.0     U     0      0        0 eth1
  • 作用 :目标地址为 172.19.0.0/16 子网的流量直接通过 eth1 接口发送,无需网关。
  • 意义
    • eth1 是 Docker 的 docker_gwbridge 网络,仅用于当前宿主机内的容器与外部网络交互。
    • 该网络的 IP(如 172.19.0.14)在跨主机时不可达,仅用于本地通信。

5.3 路由优先级
  • 匹配规则:数据包的目标地址会优先匹配最具体的路由(子网掩码最长的条目),最后匹配默认路由。
  • 示例
    1. 如果目标地址是 10.0.5.100(属于 10.0.5.0/24 子网),则通过 eth0 直接发送。
    2. 如果目标地址是 172.19.0.100(属于 172.19.0.0/16 子网),则通过 eth1 直接发送。
    3. 如果目标地址是 8.8.8.8(不属于任何子网),则通过 eth1 发送到网关 172.19.0.1


6 总结

网络 核心职责 典型用途 是否必须
Overlay 跨节点通信、服务发现、负载均衡 服务间通信、VIP/DNSRR 是(服务依赖)
docker_gwbridge 外部访问、端口发布、NAT 转换 容器出站访问、外部入站 是(Swarm 自动创建)

这种双网络模型是 Docker Swarm 实现高效服务编排和网络管理的关键设计 。

相关推荐
IT成长日记6 分钟前
【Docker基础】Docker核心概念:容器(Container)与镜像(Image)的区别与联系
运维·docker·区别与联系·container·imgae
容器魔方16 分钟前
科大讯飞基于Volcano实现AI基础设施突破,赢得CNCF最终用户案例研究竞赛
云原生·容器·云计算
德育处主任26 分钟前
亚马逊云 Lambda 容器化部署教程
后端·容器
xixingzhe241 分钟前
docker compose安装Prometheus、Grafana
docker·grafana·prometheus
Kevin不想说话926192 小时前
WSL2 Ubuntu Docker 完整部署指南
docker
啃火龙果的兔子2 小时前
在服务器上使用 Docker 部署 Node.js 后端服务和前端项目
服务器·docker·node.js
风清再凯3 小时前
docker-compose容器单机编排
docker·容器·dubbo
ℳ₯㎕ddzོꦿ࿐3 小时前
Ubuntu 24.04 上安装与 Docker 部署 Sentinel
ubuntu·docker·sentinel
masx2006 小时前
minio web console已死,Web管理功能全砍!使用 OpenMaxIO 恢复 MinIO 社区版的 Web 控制台功能!
docker·容器
爱学语言的人6 小时前
Docker快速构建并启动Springboot程序,快速发布和上线/
spring boot·docker·容器