【问题标题】:Using traefik for docker internal traffic via websockets通过 websockets 使用 traefik 进行 docker 内部流量
【发布时间】:2020-05-04 09:19:33
【问题描述】:

我在集群模式下使用 docker 在我的应用程序中提供服务,并使用 traefik 来处理流量。我的目标是为我的应用程序的每个 API 部分创建一个单独的服务(例如,domain.com/api/foo_api 上的请求转到 foo_api 服务,domain.com/api/bar_api 上的请求转到 bar_api 服务。

现在使用 traefik,这一切都非常简单。但是,我还将 API 服务与与 API 无关的其他内部服务一起使用。他们使用到内部 docker URL 的 websocket 连接,所以目前它是ws://api:api_port/ws。但是,如果我拆分 API 部分,我需要像 ws://foo_api:foo_api_port/ws 这样的东西,这显然使服务只能访问 foo_api,而不是其他所有的。

所以我的问题是:我可以使用 traefik 路由此 websocket 流量吗?类似于我在外部但在 docker 网络内部的方式?

【问题讨论】:

    标签: docker websocket traefik


    【解决方案1】:

    Traefik 是一个南北反向代理。历史上,传统基础设施中的大多数人会使用 NGINX 或 Apache 来解决入站问题——很高兴看到您使用更现代的工具。您所描述的是在 traefik 后面的防火墙内的东西向通信模式(假设您通过 traefik 控制所有入口)。

    您是否考虑过将服务发现和注册功能与 Hashicorp Consul - https://consul.io 等工具结合使用?

    拥有服务发现的想法是,可以通过注册表发现和提供集群中的容器/服务,并通过名称相互引用,而无需在构建和维护复杂的名称时进行人工劳动 - IP查询。大多数人在历史上都在 DNS SRV 后面的更持久的模型中理解这一点,该模型需要外部查询。 Consul 仍然可以支持传统的参考集成。

    这个网站可能会帮助你:https://attx-project.github.io/Consul-for-Service-Discovery-on-Docker-Swarm.html

    他们似乎处理了与您类似的案例。只需稍作调整,这项工作就可以重复使用。

    【讨论】:

    • 感谢您的建议。我目前正在研究使用 DNSMasq 的解决方案,但是 Consul 看起来更有意义。一旦我尝试过,我会更新这个问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2020-02-12
    • 2019-06-24
    • 2021-03-06
    • 2022-08-17
    • 2020-11-19
    • 2021-05-10
    相关资源
    最近更新 更多