首页 > 解决方案 > 通过 websockets 使用 traefik 进行 docker 内部流量

问题描述

我在集群模式下使用 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 网络内部?

标签: dockerwebsockettraefik

解决方案


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

他们似乎已经解决了与您类似的案例。并且通过一些调整,这项工作很可能可以重复使用。


推荐阅读