如何在EKS集群的nginx-ingress-controller中为特定API设置速率限制?
完全可行,以下是具体配置方案
1. 定义全局速率限制规则(ConfigMap)
首先在nginx-ingress-controller的ConfigMap中定义速率限制zone,这会作用于Nginx的http块级别:
apiVersion: v1 kind: ConfigMap metadata: name: nginx-ingress-controller namespace: kube-system # 替换为你的ingress控制器所在命名空间 data: # 基于客户端IP创建名为mylimit的速率限制zone,内存占用10MB,速率10次/秒 limit_req_zone: "$binary_remote_addr zone=mylimit:10m rate=10r/s"
2. 在Ingress资源中针对特定路径配置速率限制
通过nginx.ingress.kubernetes.io/configuration-snippet注解,给目标路径(如/healthz)添加Nginx location级别的速率限制规则,其他路径不受影响:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: your-app-ingress annotations: nginx.ingress.kubernetes.io/configuration-snippet: | # 仅对/healthz路径应用速率限制 location /healthz { limit_req zone=mylimit burst=20 nodelay; proxy_pass http://$service_name:$service_port; } spec: ingressClassName: nginx # 替换为你的ingress类名 rules: - host: your-domain.com # 替换为你的域名 http: paths: - path: /healthz pathType: Prefix backend: service: name: your-app-service # 替换为你的服务名 port: number: 80 - path: / pathType: Prefix backend: service: name: your-app-service port: number: 80
关键参数说明
rate=10r/s:每秒允许10个请求burst=20:允许最多20个突发请求超出速率限制nodelay:突发请求不排队直接处理,超出burst的请求直接返回503
验证配置
应用上述ConfigMap和Ingress后,等待nginx-ingress-controller同步配置,可通过ab、curl等工具测试/healthz路径的速率限制效果,其他路径不会受到影响。
内容的提问来源于stack exchange,提问作者user3398900
相关产品推荐
相关产品推荐

