首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nginx Ingress中基于授权令牌的速率限制GRPC连接

Nginx Ingress中基于授权令牌的速率限制GRPC连接
EN

Stack Overflow用户
提问于 2021-05-05 12:23:47
回答 1查看 330关注 0票数 1

我正在尝试根据Authorization报头中包含的令牌来限制GRPC连接的速率。我在Nginx configmap和Ingress注释中尝试了以下设置,但Nginx速率限制不起作用。

代码语言:javascript
复制
---
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接收到了这个值。我面临的问题是,由于某些原因,速率限制规则没有被触发。

这是正确的方法吗?

任何帮助和反馈都将不胜感激!

谢谢

EN

回答 1

Stack Overflow用户

发布于 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您将找到配置速率限制的所有重要参数。

预期成功的请求数可按如下方式计算:

代码语言:javascript
复制
successful requests = (period * rate + burst) * nginx replica

因此需要注意的是,nginx副本的数量也会使成功请求的数量成倍增加。此外,请注意,Nginx入口控制器将突发值设置为限制的5倍。在设置了所需的注释之后,您可以在nginx.conf上检查这些参数。例如:

代码语言:javascript
复制
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;

我还想强调两个限制:

  • 请求按客户端IP计数,这可能不准确,也可能不符合您的业务需求,例如按用户身份进行速率限制。

脉冲串和延迟等延迟选项不是configurable.

我强烈建议通过以下来源对此主题进行更深入的解释:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67395168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档