我在 swarm 模式下使用 docker 来处理应用程序中的服务,并使用 traefik 来处理流量。我的目标是为我的应用程序的每个 API 部分创建一个单独的服务(例如,domain.com/api/foo_api
上的请求转到foo_api
服务,domain.com/api/bar_api
上的请求转到bar_api
服务。
现在,对于traefik来说,这一切都非常简单。但是,我也将 API 服务与其他与 API 无关的内部服务一起使用。他们使用websocket连接到内部docker URL,因此目前它是ws://api:api_port/ws
。但是,如果我拆分 API 部分,我需要类似ws://foo_api:foo_api_port/ws
的东西,这显然使服务只能访问foo_api
,而不是其他所有服务。
所以我的问题是:我是否可以使用 traefik 路由此 websocket 流量,类似于我在外部但在 docker 网络中内部的方式?
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
他们似乎处理了与你的案件类似的案件。 这项工作可能可以通过一些调整来重复使用。