gpt4 book ai didi

docker - 隔离连接到集群上traefik覆盖网络的容器

转载 作者:行者123 更新时间:2023-12-02 19:04:04 27 4
gpt4 key购买 nike

我在使用traefik的docker swarm中运行多个堆栈,其中每个堆栈中的服务都连接到覆盖网络(traefik-net),以便traefik可以与它们通信。

如果我在每个堆栈中都有一个称为相同服务名称(service1)的服务,然后在每个堆栈中都有另一个服务(service2)尝试通过服务名称(ping http://service1)访问该服务,则有时会在其他堆栈,有时会在同一堆栈中命中service1。
docker network create --driver overlay traefik-net
stack1:

services:
service1:
networks:
- default
- traefik-net

service2:
networks:
- default
- traefik-net

networks:
traefik-net:
external: true

stack2:
services:
service1:
networks:
- default
- traefik-net

networks:
traefik-net:
external: true

我希望service2仅命中同一堆栈中的service1。

我假设服务可以通过在堆栈名称前加上服务名称(ping http // stack2_service1)来使命中另一个堆栈中的服务。但是我了解到,由于使用traefik-net覆盖网络,它们显然可以在没有堆栈名称前缀的情况下相互调用。

有没有办法关闭没有堆栈名称前缀的跨堆栈的服务通信?

也许有针对该问题的traefik特定解决方案?

如果有人遇到这个问题,我将不胜感激。

最佳答案

是的,对于您要实现的目标,有一个解决方案,您只需要正确使用覆盖网络即可。

默认情况下,连接在同一覆盖网络中的所有服务都可以彼此通话/解析。

因此,让我们可视化您当前的实现。现在您有了一个网络traefik-net,并且已将所有服务连接到那里,因此您的设计如下所示:

enter image description here

为了隔离不同堆栈上的服务但使traefik能够访问它们,您需要做的是在每个堆栈文件中创建一个不同的覆盖网络,并将traefik服务连接到这些网络,方法是将它们定义为traefik堆栈文件中的外部。您将最终像这样:

enter image description here

在此实现中,不同堆栈之间的所有流量只能通过traefik服务进行,而不能直接进行。

关于docker - 隔离连接到集群上traefik覆盖网络的容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56010982/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com