Nginx-Ingress-Controller 限制部署的 rps 数量
Nginx-Ingress-Controller limit number of rps to deployment
我在高负载下提供数据时遇到问题,如果特定部署的总 rps 超过特定数量,我想 return 503。我正在玩弄他们的速率限制,但每个客户都有限制。
谢谢!
我想尝试的更简单的方法是限制该部署的资源(CPU 和内存)。您还可以为该服务分离入口控制器并限制该服务的资源。
或者,服务网格提供更多自定义,例如,istio
为 DestinationRule
对象提供 ConnectionPoolSettings,可以达到类似目的。
此外,还有一个 traffic shaping 的实验性功能可能会有所帮助,但需要更新您的 CNI 配置。
供参考:@Dylan 发现 limit_req_zone Nginx 配置也可以与 $host
一起使用来实现这一点。为此,(1) 更新您的 nginx 入口控制器配置映射并添加 http-snippet
data:
http-snippet: |
limit_req_zone $host zone=queue:10m rate=1r/s;
您可能需要重新启动控制器 pods 才能使用新配置。 (2) 使用 configuration-snippet
:
将配置应用到 Ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/configuration-snippet: |
limit_req zone=queue burst=12 delay=8;
...
我在高负载下提供数据时遇到问题,如果特定部署的总 rps 超过特定数量,我想 return 503。我正在玩弄他们的速率限制,但每个客户都有限制。
谢谢!
我想尝试的更简单的方法是限制该部署的资源(CPU 和内存)。您还可以为该服务分离入口控制器并限制该服务的资源。
或者,服务网格提供更多自定义,例如,istio
为 DestinationRule
对象提供 ConnectionPoolSettings,可以达到类似目的。
此外,还有一个 traffic shaping 的实验性功能可能会有所帮助,但需要更新您的 CNI 配置。
供参考:@Dylan 发现 limit_req_zone Nginx 配置也可以与 $host
一起使用来实现这一点。为此,(1) 更新您的 nginx 入口控制器配置映射并添加 http-snippet
data:
http-snippet: |
limit_req_zone $host zone=queue:10m rate=1r/s;
您可能需要重新启动控制器 pods 才能使用新配置。 (2) 使用 configuration-snippet
:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/configuration-snippet: |
limit_req zone=queue burst=12 delay=8;
...