基于Docker Overlay网络驱动实现双集群单Leader架构
基于Docker Overlay网络实现单Leader双隔离集群的配置方案
前提条件
- 三台服务器已安装Docker,IP分别为
192.168.31.141、192.168.31.142、192.168.31.143 - 服务器之间基础网络互通,防火墙开放Swarm必备端口:TCP 2377(集群管理)、UDP 4789(VXLAN隧道)、TCP/UDP 7946(节点间通信)
配置步骤
1. 将192.168.31.142设为Swarm Leader节点
在142服务器上执行Swarm初始化命令:
docker swarm init --advertise-addr 192.168.31.142
执行成功后会输出Worker节点加入指令,格式类似:
docker swarm join --token SWMTKN-1-xxxxxxxxx 192.168.31.142:2377
复制该指令,后续141、143节点会用到。
2. 创建两个隔离的Overlay网络
在142服务器上创建两个独立的Overlay网络,分别用于142与141、142与143的专属通信:
# 创建仅用于142和141通信的网络 docker network create --driver overlay --attachable net-141 # 创建仅用于142和143通信的网络 docker network create --driver overlay --attachable net-143
--attachable参数允许非Swarm服务的独立容器接入该网络,适配灵活部署需求。
3. 将141、143加入Swarm作为Worker节点
- 在141服务器上执行之前复制的join指令:
docker swarm join --token SWMTKN-1-xxxxxxxxx 192.168.31.142:2377
- 在143服务器上执行同样的join指令:
docker swarm join --token SWMTKN-1-xxxxxxxxx 192.168.31.142:2377
4. 绑定容器到对应网络
在142上启动容器并接入两个网络
docker run -d --name node142-container --network net-141 --network net-143 nginx:alpine
该容器可同时与两个网络内的节点通信。
在141上启动容器仅接入net-141
docker run -d --name node141-container --network net-141 nginx:alpine
在143上启动容器仅接入net-143
docker run -d --name node143-container --network net-143 nginx:alpine
5. 验证连通性
- 141容器ping 142容器(应连通):
docker exec node141-container ping node142-container
- 143容器ping 142容器(应连通):
docker exec node143-container ping node142-container
- 141容器ping 143容器(应无法连通):
docker exec node141-container ping node143-container
架构说明
192.168.31.142作为Swarm集群的Leader节点,同时接入两个隔离的Overlay网络,实现与两个Worker节点的双向互通;141、143仅接入各自专属的Overlay网络,因此彼此无法直接通信,完全满足需求中的网络隔离要求。
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

