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/v1
kind: Ingress
metadata:
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2021-02-23 java~和.net相通的DES-ECB加解密技术
2021-02-23 java的byte和C#的byte的不同之处
2012-02-23 解决COOKIES存储中文乱码的问题
2012-02-23 MVC中一个表单实现多个提交按钮(一个action搞定添删改)