You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Swarm服务网格无法跨AWS VPC扩展问题咨询

Docker Swarm跨区域Overlay网络故障排查与修复

核心排查与修复步骤

1. 确认节点注册的IP为VPN互通的内网IP

Swarm节点默认用网卡默认IP进行集群通信,若AWS EC2实例注册的是公网IP,或本地节点无法通过VPN路由到AWS节点的内网IP,会直接导致跨区域通信失败:

  • 执行docker info查看每个节点的NodeAddr,确保所有节点注册的是VPN可互通的内网IP(本地节点用本地内网IP,AWS节点用VPC内网IP)。
  • 若IP错误,重新加入集群时指定正确IP:
    # Worker节点重新加入
    docker swarm join --token <worker-token> <manager-ip>:2377 --advertise-addr <节点内网IP>
    # Manager节点先退出再重新加入
    docker swarm leave --force
    docker swarm join --token <manager-token> <manager-ip>:2377 --advertise-addr <节点内网IP>
    

2. 验证Swarm核心端口的跨区域连通性

Overlay网络依赖VXLAN封装,需确保VPN两端节点能互通以下端口:

  • 2377/tcp(Swarm管理端口)
  • 7946/tcp/udp(节点gossip通信)
  • 4789/udp(VXLAN封装端口)
    直接在节点上用工具测试连通性:
# 从本地节点测试AWS节点的4789 UDP端口
nc -zvu <aws-node-ip> 4789
# 测试7946 TCP端口
nc -zv <aws-node-ip> 7946

若不通,检查VPN隧道的ACL规则,确认未拦截这些端口的跨区域流量。

3. 排查Overlay网络与本地/AWS子网的冲突

如果本地数据中心内网子网和AWS VPC子网重叠,会导致Swarm Overlay网络路由混乱:

  • 执行docker network inspect <overlay-network-name>查看Overlay子网配置(默认是10.0.0.0/24)。
  • 若存在冲突,创建新的Overlay网络并指定不冲突的子网:
    docker network create --driver overlay --subnet 192.168.100.0/24 --attachable cross-region-overlay
    
    将服务重新部署到该网络测试。

4. 确认跨区域节点的路由可达性

确保本地节点能ping通AWS EC2实例的内网IP,反之亦然:

  • 检查本地数据中心路由表,是否存在指向AWS VPC子网的路由,下一跳为VPN网关。
  • 检查AWS VPC路由表,是否存在指向本地数据中心子网的路由,下一跳为VPN虚拟网关。

5. 检查节点本地防火墙规则

即使AWS安全组开放流量,节点本地的iptables/firewalld可能拦截Swarm相关流量:

  • 查看iptables规则,确认放行Swarm端口:
    iptables -L | grep docker
    
  • 若有拦截,添加放行规则(以本地子网为例):
    iptables -A INPUT -s <本地子网>/<掩码> -p tcp --dport 2377 -j ACCEPT
    iptables -A INPUT -s <本地子网>/<掩码> -p tcp --dport 7946 -j ACCEPT
    iptables -A INPUT -s <本地子网>/<掩码> -p udp --dport 7946 -j ACCEPT
    iptables -A INPUT -s <本地子网>/<掩码> -p udp --dport 4789 -j ACCEPT
    
    AWS节点需同步放行本地子网的流量。

快速验证方法

  1. 在本地和AWS节点分别启动测试容器,加入同一Overlay网络:
    docker run -d --name test-local --network cross-region-overlay alpine sleep 3600
    docker run -d --name test-aws --network cross-region-overlay alpine sleep 3600
    
  2. 从本地容器ping AWS容器的Overlay IP:
    docker exec test-local ping <test-aws-overlay-ip>
    
  3. 若ping不通,优先排查节点间物理连通性(ping节点内网IP),再回溯端口和路由配置。

内容的提问来源于stack exchange,提问作者Дмитро Іванов

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 17:27:39