如何在 traefik 实例之间共享速率限制状态?

fru*_*uuf 7 ddos kubernetes traefik

我的公司运行具有 6 个节点的 kubernetes 设置,并将 traefik 1.6 作为 DaemonSet 部署到生产中的每个节点。每个 traefik 实例在端口 80 上从 AWS ALB 接收传入(ssl 终止)请求并将它们转发到各个 pod。

在对我们的后端进行了相当严重的 DDoS 攻击之后,我们启用了 traefiks 速率限制功能,以防止请求通过实际的 pod。

由于我们运行了多个彼此不知道的 traefik 实例,因此用户感知的速率限制比 traefik 配置中设置的速率限制高 1 到 6 倍,因为请求随机命中 6 个 traefik 实例中的一个。这使得无法设置精确的限制,我们不能依赖 AWS ALB 粘性会话设置来确保客户端每次都命中同一个框,因为攻击者可以忽略 cookie。

使用带有部署的单个 traefik 实例而不是 daemonset 不是一个很好的解决方案。对于每个请求,从接受请求的节点到 traefik 实例,需要在节点之间进行额外的跳转。在 6 个请求中有 5 个该实例将在不同的节点上运行。

有没有办法在每个节点上的 traefik 守护进程之间共享速率限制状态?