首页 > 解决方案 > 如何在 traefik 实例之间共享限速状态?

问题描述

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

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

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

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

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

标签: kubernetesddostraefik

解决方案


推荐阅读