Docker群上的动态服务路由

问题描述 投票:0回答:1

我需要找到一种将请求动态路由到服务的特定容器的方法。我将为我的应用程序制作一个简化的示例,以帮助您理解。我有一个贯穿整个Docker群的Rest API服务。该API有两个端点。

第一个端点创建一个具有唯一session_id的会话。可以平衡到此终结点的请求,并且可以正常使用我的任何服务实例。然后,我有另一个端点,该端点的路径参数如/session_id,需要路由到最初创建此会话的服务实例。

因此,可以说我将服务扩展到3个实例,并向第一个端点发出了新请求。例如,该请求命中了3的第二个实例。过了一会儿,第二个请求session_id随即被创建,该请求以前是作为路径参数创建的。此请求也必须转到第二个实例。

我知道设计无状态应用程序会更好,这样您就不会遇到类似这样的问题,但是在这种情况下是不可能的。我搜索了一些有关consulceryx的信息,但是我不确定这两种工具是否都可以。

有人知道如何实现这样的功能吗?谢谢您的提前帮助!

docker routes docker-swarm consul
1个回答
0
投票

您正在寻找具有持久/粘性会话支持的负载平衡器。

Docker Enterprise通过在创建服务时配置粘性会话来支持此操作。

$> docker service create \
 --name demo \
 --network demo \
 --detach=false \
 --replicas=5 \
 --label com.docker.lb.hosts=demo.local \
 --label com.docker.lb.sticky_session_cookie=session \
 --label com.docker.lb.port=8080 \
 --env METADATA="demo-sticky" \
 ehazlett/docker-demo

有关更多信息,请参见https://docs.docker.com/ee/ucp/interlock/usage/sessions/。>>

您还可以使用Traefik负载平衡器来实现。有关如何配置它的逐步说明,请参见Deploy your Stateful Web Applications in Docker Swarm using Traefik Sticky Sessions

© www.soinside.com 2019 - 2024. All rights reserved.