【发布时间】:2019-05-06 19:05:54
【问题描述】:
我有多个堆栈在 docker swarm 中使用 traefik 运行,每个堆栈中的服务都连接到覆盖网络 (traefik-net),因此 traefik 可以与它们通信。
如果我在每个堆栈中都有一个名为相同服务名称 (service1) 的服务,然后在任一堆栈中有另一个服务 (service2) 尝试通过服务名称 (ping http://service1) 访问它,它会有时在另一个堆栈中命中 service1,有时在同一个堆栈中命中 service1。
docker network create --driver overlay traefik-net
堆栈1:
services:
service1:
networks:
- default
- traefik-net
service2:
networks:
- default
- traefik-net
networks:
traefik-net:
external: true
堆栈2:
services:
service1:
networks:
- default
- traefik-net
networks:
traefik-net:
external: true
我希望 service2 只命中同一个堆栈中的 service1。
我假设服务可以仅通过将堆栈名称添加到服务名称的前缀(ping http//stack2_service1)来访问另一个堆栈中的服务。但是我了解到,由于 traefik-net 覆盖网络,它们显然可以在没有堆栈名称前缀的情况下相互调用。
有没有办法在没有堆栈名称前缀的情况下关闭跨堆栈的服务通信?
或者也许有针对问题的 traefik 特定解决方案?
如果有人遇到此问题,我将非常感谢您的解决方案。
【问题讨论】:
标签: docker docker-swarm traefik docker-swarm-mode