Ingress 限流由 Ingress Controller(如 nginx-ingress)实现,通过注解配置:limit-rps 控制每秒请求数,limit-burst 设置突发容量,limit-connections 限制并发连接;需注意 IP 识别、作用范围及与后端限流协同。

在 Kubernetes 中,Ingress 本身不直接执行限流,真正起作用的是背后的 Ingress Controller(如 nginx-ingress)。要保护后端微服务免受突发流量或恶意请求冲击,需通过控制器支持的注解(annotations)在 Ingress 资源中声明速率限制规则。
使用 nginx-ingress 的限流注解
nginx-ingress 提供了开箱即用的限流能力,基于 NGINX 的 limit_req 模块实现,核心注解包括:
-
nginx.ingress.kubernetes.io/limit-rps:限制每个客户端 IP 每秒请求数(Requests Per Second),例如设为
"5"表示单 IP 每秒最多 5 个请求 -
nginx.ingress.kubernetes.io/limit-burst:允许的突发请求数(令牌桶的桶容量),配合
limit-rps使用,缓解短时峰值 - nginx.ingress.kubernetes.io/limit-connections:限制单个客户端 IP 到该 Ingress 后端的并发连接数,防连接耗尽
示例配置:
评估 Kubernetes 集群安全态势,覆盖 RBAC、工作负载安全、网络策略、基础设施即代码(IaC)、运行时监控和密钥管理等 30 项控制项……
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: api-ingress
annotations:
nginx.ingress.kubernetes.io/limit-rps: "10"
nginx.ingress.kubernetes.io/limit-burst: "20"
nginx.ingress.kubernetes.io/limit-connections: "50"
spec:
rules:
- host: api.example.com
http:
paths:
- path: /v1/
pathType: Prefix
backend:
service:
name: user-service
port:
number: 8080
理解限流作用范围和粒度
这些注解默认按 客户端 IP 统计,适用于大多数防护场景。但要注意:
- 若集群前有 CDN、LB 或代理(如云厂商 SLB),真实客户端 IP 可能被覆盖,需确保
use-forwarded-headers: "true"和compute-full-forwarded-for: "true"在 nginx-config ConfigMap 中启用,并正确设置X-Forwarded-For头传递 - 限流策略绑定在单个 Ingress 资源上,不同 host 或 path 的规则互不影响;如需跨路径统一限流,需合并到同一 Ingress 或借助全局配置
- 限流触发时,nginx-ingress 默认返回
503 Service Temporarily Unavailable,可通过自定义错误页或响应头进一步优化用户体验
增强防护的补充配置
单纯依赖 rps 限流可能不够,建议组合以下实践提升鲁棒性:
- 开启 白名单豁免:对运维、监控或可信来源 IP 设置
nginx.ingress.kubernetes.io/whitelist-source-range,避免误限 - 结合 连接数限制(
limit-connections)防止慢速攻击(如 Slowloris),尤其对长连接或 WebSocket 场景有效 - 在
nginx-configurationConfigMap 中启用enable-modsecurity: "true"并集成 OWASP CRS,提供 WAF 级防护,与限流形成纵深防御 - 接入 Prometheus + Grafana,采集
nginx_ingress_controller_requests_total{status=~"503"}等指标,及时发现限流高频触发点
注意与后端限流的协同
Ingress 层限流是第一道防线,但不能替代服务内部的限流:
- 微服务自身应保留业务级限流(如 Spring Cloud Gateway 的 Redis RateLimiter、Sentinel 或 Resilience4j),用于更细粒度控制(按用户 ID、API 方法、租户等维度)
- Ingress 限流值建议略高于后端限流阈值,避免因网络延迟、重试等造成前端过早拒绝
- 全链路上传大文件等特殊场景,还需同步调大
proxy-body-size、超时时间及后端服务接收限制,否则限流可能被其他瓶颈掩盖

















