Ingress限流
先说结论:
ingress节点数量=n0
ingress限流配置
nginx.ingress.kubernetes.io/limit-rps: "n1"
nginx.ingress.kubernetes.io/limit-burst-multiplier: "n2"
每分钟限流连接数为 (60*n1+n1*n2)*n0
ingress限流配置
nginx.ingress.kubernetes.io/limit-rps: "n1"
nginx.ingress.kubernetes.io/limit-burst-multiplier: "n2"
每分钟限流连接数为 (n1+n1*n2)\n0
所以,当n2为定值的情况下,set rps=1和rpm=60并不等价。
解析
nginx的限流是一个队列模型。所以限流连接数为 队列长度+队列处理能力。
对应下面的配置即,rate为队列处理能力。burst为队列长度。
nginx配置
ingress控制器会把注解修改成如下nginx配置,此例子之修改了limit-rps=5或者limit-rpm=300,limit-burst-multiplier(放大系数)为默认值5。
# qps = 5
#实际效果为每分钟限流325
limit_req_zone $limit_cmRfaW5ncmVzcy1yZC1oZWxsby1sZWdhY3k zone=rd_ingress-rd-hello-legacy_rps:5m rate= 5r/s ;
limit_req zone=rd_ingress-rd-hello-legacy_rps burst=25 nodelay;
# qpm = 300
#实际效果为每分钟限流1800
limit_req_zone $limit_cmRfaW5ncmVzcy1yZC1oZWxsby1sZWdhY3k zone=rd_ingress-rd-hello-legacy_rpm:5m rate= 300r/m ;
limit_req zone=rd_ingress-rd-hello-legacy_rpm burst=1500 nodelay;
参考:
https://medium.com/titansoft-engineering/rate-limiting-for-your-kubernetes-applications-with-nginx-ingress-2e32721f7f57
https://www.nginx.com/blog/rate-limiting-nginx/