我正在尝试根据Authorization报头中包含的令牌来限制GRPC连接的速率。我在Nginx configmap和Ingress注释中尝试了以下设置,但Nginx速率限制不起作用。
---
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-ingress-controller
namespace: default
data:
http-snippet: |
limit_req_zone $http_authorization zone=zone-1:20m rate=10r/m;
limit_req_zone $http_token zone=zone-2:20m rate=10r/m;
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/backend-protocol: GRPC
nginx.ingress.kubernetes.io/configuration-snippet: |
limit_req zone=zone-1;
limit_req_log_level notice;
limit_req_status 429;我尝试让Nginx Ingress Controller根据$http_authorization变量中的值对GRPC/HTTP2流连接进行速率限制。我已经修改了Nginx的log_format来记录$http_authorization的值,并观察到Nginx接收到了这个值。我面临的问题是,由于某些原因,速率限制规则没有被触发。
这是正确的方法吗?
任何帮助和反馈都将不胜感激!
谢谢
发布于 2021-05-06 17:15:27
你好,Bobby_H,欢迎来到Stack Overflow!
在Kubernetes上使用Nginx Ingress时,您可以使用these annotations设置速率限制
nginx.ingress.kubernetes.io/limit-connections:允许来自单个IP地址的并发连接数。超过此限制时会返回503错误。nginx.ingress.kubernetes.io/limit-rps:每秒从给定IP接受的请求数。突发限制设置为此限制乘以突发乘数,默认乘数为5。当客户端超过此限制时,将返回limit-req-status-code default: 503。nginx.ingress.kubernetes.io/limit-rpm:每分钟从给定IP接受的请求数。突发限制设置为此限制乘以突发乘数,默认乘数为5。当客户端超过此限制时,将返回limit-req-status-code default: 503。突发大小限制速率的
nginx.ingress.kubernetes.io/limit-burst-multiplier:乘数。默认的突发倍增是5,此注释覆盖默认的倍增。当客户端超过此限制时,将返回limit-req-status-code默认值: 503。nginx.ingress.kubernetes.io/limit-rate-after:初始千字节数,在此之后,对给定连接的响应的进一步传输将受到速率限制。此功能必须在启用代理缓冲的情况下使用。nginx.ingress.kubernetes.io/limit-rate:允许发送到给定连接的每秒千字节数。零值禁用速率限制。此功能必须在启用代理缓冲的情况下使用。要从速率限制中排除的
nginx.ingress.kubernetes.io/limit-whitelist:客户端IP源范围。该值是逗号分隔的CIDR列表。Nginx实现了leaky bucket算法,传入的请求被缓冲到一个先进先出队列中,然后以有限的速率消费。Burst值定义队列的大小,这允许超过基本限制的请求数量得到服务。当队列已满时,以下请求将被拒绝,并返回错误码。
Here您将找到配置速率限制的所有重要参数。
预期成功的请求数可按如下方式计算:
successful requests = (period * rate + burst) * nginx replica因此需要注意的是,nginx副本的数量也会使成功请求的数量成倍增加。此外,请注意,Nginx入口控制器将突发值设置为限制的5倍。在设置了所需的注释之后,您可以在nginx.conf上检查这些参数。例如:
limit_req_zone $limit_cmRfaW5ncmVzcy1yZC1oZWxsby1sZWdhY3k zone=ingress-hello-world_rps:5m rate=5r/s;
limit_req zone=ingress-hello-world_rps burst=25 nodelay;
limit_req_zone $limit_cmRfaW5ncmVzcy1yZC1oZWxsby1sZWdhY3k zone=ingress-hello-world_rpm:5m rate=300r/m;
limit_req zone=ingress-hello-world_rpm burst=1500 nodelay;我还想强调两个限制:
脉冲串和延迟等延迟选项不是configurable.
我强烈建议通过以下来源对此主题进行更深入的解释:
https://stackoverflow.com/questions/67395168
复制相似问题