【问题标题】:Pointing an external URL to always go to same instance of a Docker container指向外部 URL 以始终转到 Docker 容器的同一实例
【发布时间】:2021-10-09 03:46:14
【问题描述】:

我有以下用例,如果有任何意见,我将不胜感激。我有一个运行着 Traefik 的 Docker Swarm,指向它的入口和路由。目前我将它作为一个服务定义为具有相同图像的 6 个副本,因此可以在三个节点上分别为两个容器。

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

知道我将如何改变我的 Docker Swarm 来实现它吗?我最好的猜测是将 swarm 更改为不是 6 个副本,而是将每个容器定义为具有自己端口的单独服务。然后我可以将 Traefik 指向 nginx 或类似的东西,然后接收请求,获取 JWT,对其进行解码以找到客户端 ID,获取哈希,然后在内部将其路由到适当的节点:端口组合。

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

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

【问题讨论】:

    标签: docker nginx docker-swarm traefik


    【解决方案1】:

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

    这是一个 Traefik 中间件,它向响应中添加一个 cookie,用于在后续请求中路由到同一服务。

    【讨论】:

    • 谢谢,但这不是我的用例。不只是寻找同一个用户总是去同一个容器,而是寻找相同类型的用户总是去同一个容器
    • 大概同样的中间件想法也适用。您需要其他方式将用户类型提供给 traefik,并让 traefik 将其散列到容器实例。
    猜你喜欢
    • 1970-01-01
    • 2023-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    • 2021-09-16
    • 1970-01-01
    相关资源
    最近更新 更多