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
浙公網安備 33010602011771號