You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Nginx Ingress限流?AKS环境配置未生效问题求解

Nginx Ingress 限流核心原理

Nginx 限流底层基于 ngx_http_limit_req_module 模块实现,默认采用漏桶算法,核心逻辑如下:

  • 以固定速率处理请求,默认统计维度为客户端IP,同一IP的所有请求统一计数
  • 超出速率阈值的请求会先存入burst(突发)缓存队列,队列未满时请求会被保留等待处理
  • 队列满后新增的超出请求会直接返回503错误
  • 若开启nodelay模式,burst队列内的请求无需等待固定速率的时间槽,会被直接处理,不会产生额外延迟
现有配置问题排查

你的配置没有达到预期效果,核心原因如下:

  • 未显式配置nginx.ingress.kubernetes.io/limit-burst注解,默认突发队列大小为5,无法达到你预期的rps叠加自定义突发的效果
  • 同时配置了limit-connections: "1"(单IP并发连接数限制)和limit-rps: "1"(单IP每秒请求数限制),两个规则同时生效,任意一个触发就会返回限流错误,严苛的限制导致你无法观测到突发流量的处理效果
  • 注意不要同时配置limit-rpm(每分钟请求限制)和limit-rps(每秒请求限制),两个均为速率限制规则,会同时生效取更严格的阈值,你的历史配置中残留的limit-rpm: "1"也可能影响限流效果
  • 若Nginx Ingress Controller版本低于0.25.0,部分限流注解的支持存在bug,也会导致配置不生效
正确限流配置示例

你可以参考以下注解修改你的Ingress配置,其余spec规则部分保持原有配置即可:

kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    # 单IP每秒允许的请求速率阈值为10
    nginx.ingress.kubernetes.io/limit-rps: "10"
    # 突发队列大小为20,允许峰值达到10+20=30rps
    nginx.ingress.kubernetes.io/limit-burst: "20"
    # 开启nodelay模式,突发请求直接处理无延迟
    nginx.ingress.kubernetes.io/limit-req-mode: "nodelay"
    # 若前端有CDN/反向代理,可修改统计键为X-Forwarded-For头,避免统计代理IP导致限流不准
    # nginx.ingress.kubernetes.io/limit-rate-key: "$http_x_forwarded_for"
    nginx.ingress.kubernetes.io/proxy-body-size: 30m
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
  name: hop-ingress
  namespace: default
验证注意事项
  • 测试时直接访问Ingress的公网IP,不要使用集群内部地址测试,避免所有请求被统计为集群节点出口IP,导致限流提前触发
  • 可进入Nginx Ingress Controller的Pod,查看日志中是否有limiting requests相关日志,确认限流规则是否正常触发
  • 调试阶段可以临时调高限流阈值,更容易观测到突发流量的处理效果

内容的提问来源于stack exchange,提问作者guru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 09:15:02