nginx 入口控制器限制-rps 似乎不起作用

时间:2021-02-18 09:15:42

标签: nginx kubernetes

在尝试进行一些负载测试时,我有一个奇怪的行为。

环境:

  • NGINX Ingress 控制器版本:0.44.0
  • Kubernetes 版本:1.17.8
  • openidc.lua 版本:1.7.4

情况如下:

  • nginx 入口控制器部署为 daemonset,由于 openidc 模块,我激活了对 ClientIP 的 sessionAffinity。
  • 我有一个简单的无状态休息服务,它部署了一个基本入口,该入口经过负载测试(没有 sessionAffinity)。

在没有 sessionAffinity ClientIP 的情况下对其余服务启动负载测试时,我达到了远远超过 25 req/s(在服务资源开始崩溃之前大约 130 req/s,这是另一回事)。 但是在 sessionAffinity 激活后,我只能达到 25 req/s。

经过一番研究,我发现了一些有趣的东西,描述如下:https://medium.com/titansoft-engineering/rate-limiting-for-your-kubernetes-applications-with-nginx-ingress-2e32721f7f57

所以公式,因为负载测试应该总是由同一个 nginx pod 服务,应该是:成功请求 = 周期 * 速率 + 突发

所以我确实尝试在我的入口添加注释 nginx.ingress.kubernetes.io/limit-rps: "100",但没有运气,仍然是相同的 25 req/s。

我还尝试了以下注释的不同组合:https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#rate-limiting,但也没有运气。

我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

事实上,它比那更恶毒。

它与 sessionAffinity 无关,也与速率限制无关(实际上默认情况下没有,我一开始没有得到它,只有当我们想为 ddos​​ 目的进行限制时才存在速率限制)。< /p>

问题是,我在 configmap 中添加了 modsecurity 和 owasp 规则的选项。

正因为如此,请求处理太慢,它限制了每秒的请求数。当 sessionAffinity 未设置时,我没有看到问题,因为 req/s 是公平的,分布在所有 pod 中。

但是使用 sessionAffinity,所以在单个 pod 上进行负载测试,问题是清晰可见的。

所以我不得不删除 modsecurity 和 owasp,而应用程序将对此负责。

有点难过,因为我希望在 nginx 上有更多的中央安全性,所以应用程序不需要处理它,但不是以这个代价...

我很想知道 modsecurity 到底做了什么才这么慢。