最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

世界滚动:k8s~ingress限流机制

来源:博客园

Ingress限流

限速的注解定义了对连接和传输速率的限制。这些可以用来减轻DDoS攻击。它采用了 “漏斗” 算法实现限制。


(资料图)

主要参数

  • nginx.ingress.kubernetes.io/limit-connections单个IP地址允许的并发连接数。超出此限制时,将返回503错误。

  • nginx.ingress.kubernetes.io/limit-rps每秒从给定IP接受的请求数。突发限制设置为此限制乘以突发乘数,默认乘数为5。当客户端超过此限制时,将 返回limit-req-status-code默认值: 503,如果修改其它响应码,需要重写nginx.ingress.kubernetes.io/configuration-snippet配置,如下

annotations:    kubernetes.io/ingress.class: nginxnginx.ingress.kubernetes.io/limit-burst-multiplier: "3"    nginx.ingress.kubernetes.io/limit-rpm: "1"    nginx.ingress.kubernetes.io/configuration-snippet: |        limit_req_status 429;

rancher中的显示

  • nginx.ingress.kubernetes.io/limit-rpm:每分钟从给定IP接受的请求数。突发限制设置为此限制乘以突发乘数,默认乘数为5。当客户端超过此限制时,将 返回limit-req-status-code默认值: 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的限流是一个队列模型。所以限流连接数为 队列长度+队列处理能力。对应下面的配置即,rate为队列处理能力。burst为队列长度。

ingress配置

ingress控制器会把注解修改成如下nginx配置,此例子之修改了limit-rps=5或者limit-rpm=300,limit-burst-multiplier(放大系数)为默认值5。

​实例

apiVersion: networking.k8s.io/v1kind: Ingressmetadata:  name: ingress-example-host  annotations:    # 每个 IP 每秒可以访问 5 次    nginx.ingress.kubernetes.io/limit-rps: 5    # 为计算限速漏桶算法的 burst size,和 limit-rps 的相乘系数    nginx.ingress.kubernetes.io/limit-burst-multiplier: 5    # 配合 limit-window 表示全局限速 100 次每秒(需要依赖 memcached)    nginx.ingress.kubernetes.io/global-rate-limit: 100    nginx.ingress.kubernetes.io/global-rate-limit-window: 1s    # 限制发送给后端服务的发送速率为 1MB 每秒    nginx.ingress.kubernetes.io/limit-rate: 1024    # 发送给后端服务的前 10MB 数据不进行限速    nginx.ingress.kubernetes.io/limit-rate-after: 10240    # 超出后的响应码    nginx.ingress.kubernetes.io/configuration-snippet: |        limit_req_status 429;spec:  rules:  - host: "www.test.com"    http:      paths:      - path: "/"        backend:          service:            name: test            port:              number: 80

关键词: 主要参数 队列长度 的情况下