【问题标题】:Isolate containers connected to traefik overlay network on swarm在 swarm 上隔离连接到 traefik 覆盖网络的容器
【发布时间】: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


    【解决方案1】:

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

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

    让我们可视化您当前的实现。现在你有一个网络traefik-net 并且你已经连接了你所有的服务所以你的设计看起来像这样:

    为了隔离不同堆栈上的服务但让 traefik 可以访问它们,您需要做的是在每个堆栈文件中创建不同的覆盖网络,并通过在 traefik 堆栈文件中将它们定义为外部来将 traefik 服务连接到这些网络。你最终会变成这样:

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

    【讨论】:

    • 我明白了。这种方法的缺点是每次我想连接新堆栈时都必须重新部署 traefik,并在 traefik 堆栈文件中手动定义网络。在我的场景中,随着时间的推移会慢慢添加数百个堆栈。我也会担心将 traefik 连接到数百个网络。也许这可能会导致问题。
    • 是的,使用这种方法每次都需要重新部署 traefik,另一方面,只有通过这种方式,您才有网络隔离,通过优先考虑您的 dns 分辨率,您只需根据自己的喜好解决。如果您不担心网络隔离的安全问题,那么 dns 技巧就足够了。
    • 是的。我的想法是,如果一个堆栈需要通过 traefik-net 对 Internet 公开,那么无论如何将这些堆栈连接在同一个网络上一样“不安全”。如果恶意行为者可以通过另一个堆栈访问堆栈,它也可以通过公共互联网访问。谢谢你的解释。
    【解决方案2】:

    我发现了一个类似的问题:Docker DNS with Multiple Projects Using the Same Network

    除了总是点击stack_service而不是service之外似乎没有任何解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-27
      • 1970-01-01
      • 1970-01-01
      • 2019-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多