Docker Swarm中如何实现类似Kubernetes Namespaces的Prod与Preprod隔离?
Docker Swarm 实现生产/预生产环境隔离(类似Kubernetes Namespaces)
Docker Swarm本身没有原生的Namespace概念,但可以通过以下几种方式实现生产(Prod)与预生产(Preprod)环境的隔离,达到类似Kubernetes Namespaces的效果:
1. 服务命名前缀+标签区分
- 给不同环境的服务加上明确前缀,比如
prod-、preprod-,直观区分服务所属环境 - 为服务添加环境标签,方便后续过滤管理:
- 创建生产环境服务:
docker service create --name prod-api --label environment=prod nginx - 查看所有生产环境服务:
docker service ls --filter label=environment=prod
- 创建生产环境服务:
2. 独立Overlay网络隔离
为两个环境分别创建专属的Overlay网络,实现网络层面的隔离,不同环境的服务默认无法互相通信:
- 创建生产环境网络:
docker network create --driver overlay prod-net - 创建预生产环境网络:
docker network create --driver overlay preprod-net - 创建服务时绑定对应网络:
docker service create --name prod-api --network prod-net nginx docker service create --name preprod-api --network preprod-net nginx
3. 配置与密钥的环境隔离
利用Swarm的Config和Secret功能,为不同环境创建独立的配置/密钥资源:
- 创建生产环境数据库配置:
docker config create prod-db-config ./prod-db.conf - 创建预生产环境数据库配置:
docker config create preprod-db-config ./preprod-db.conf - 服务挂载对应配置:
docker service create --name prod-db --config source=prod-db-config,target=/etc/db.conf mysql docker service create --name preprod-db --config source=preprod-db-config,target=/etc/db.conf mysql
4. 节点标签约束调度(可选)
如果需要将不同环境的服务调度到指定节点,可通过节点标签实现:
- 给Worker节点打环境标签:
docker node update --label-add environment=prod worker1 docker node update --label-add environment=preprod worker2 - 创建服务时指定调度约束:
docker service create --name prod-api --constraint 'node.labels.environment==prod' nginx docker service create --name preprod-api --constraint 'node.labels.environment==preprod' nginx
内容的提问来源于stack exchange,提问作者ELel
相关产品推荐
相关产品推荐

