指向一个外部URL,总是指向Docker容器的同一个实例



我有以下用例,我将感谢任何输入。我有一个Docker Swarm运行,trafik指向它的入口和路由。目前,我将其作为一个服务,定义为具有相同映像的6个副本,因此在三个节点上分别有两个容器。

容器基本上托管一个GraphQL服务器,我的要求是,根据请求来自哪个客户端,它总是去到相同的特定容器(即副本)。所以作为一个例子,说我有user1和user2在client1和user3和user4在client2,如果user1发出请求,它去replica1,那么如果user2发出请求,它必须去replica1,以及。因此,基本上,我可以对客户端id (client1)取一个数字哈希值,然后对其进行mod 6,并确定它指向哪个副本,并以这种方式确保来自该客户端id中的任何用户的任何后续调用都指向相同的副本。此外,调用来自哪个客户机的信息编码在用户在其请求中发送的JWT令牌中。

任何想法我将如何去改变我的Docker蜂群来实现这一点?我的最佳猜测是将集群更改为不是6个副本,而是将每个容器定义为具有自己端口的独立服务。然后我可能会将Traefik指向nginx或类似的东西,然后接收请求,抓取JWT,解码以找到客户端id,进行哈希,然后在内部将其路由到适当的节点:端口组合。

但是我觉得一定有一种更优雅、更简单的方法来做到这一点。也许Traefik可以以某种方式直接促进这一点,或者Docker Swarm有一些我不知道的配置,可以使用。什么好主意吗?

编辑:只是为了澄清我的用例,不只是寻找相同的用户总是去同一个容器但是相同类型的用户总是去同一个容器

对于这种路由,您需要设置Traefik For Sticky Sessions

这是添加一个cookie Traefik中间件响应,用于随后的请求路由到相同的服务。

最新更新