求助:基于JWT解码值配置NGINX Ingress Controller速率限制
基于JWT字段配置NGINX Kubernetes Ingress速率限制
要实现基于JWT解码值的速率限制,需先让NGINX Ingress完成JWT解析并提取目标字段,再将该字段作为速率限制的key。结合你的Kubernetes 1.25和NGINX Ingress 3.0.2版本,以下是完整配置方案:
1. 核心配置逻辑
- 先通过
jwtAuth配置完成JWT验证,并将需要的JWT字段提取到NGINX变量中 - 在
rateLimit的key字段中引用该变量,实现基于JWT字段的精准速率限制
完整配置示例
apiVersion: k8s.nginx.org/v1 kind: Policy metadata: name: rate-limit-policy spec: # 配置JWT认证并提取目标字段 jwtAuth: # 若使用JWKS端点验证JWT,填写你的JWKS地址 jwksUri: "https://your-jwks-provider/.well-known/jwks.json" # 若使用对称密钥验证,替换为以下配置(需提前创建对应Secret) # secret: # name: jwt-symmetric-secret # key: secret-value # 提取JWT中的sub字段,存入$jwt_sub变量 extractClaims: - name: sub variable: jwt_sub # 配置速率限制,使用提取的JWT字段作为key rateLimit: rate: 10r/s key: "$jwt_sub" # 引用提取的JWT字段变量,必须用双引号包裹 zoneSize: 10M --- apiVersion: k8s.nginx.org/v1 kind: VirtualServer metadata: name: api-vs spec: ingressClassName: nginx-api host: api.example.com policies: - name: rate-limit-policy upstreams: - name: api service: api port: 80 routes: - path: / action: pass: api
关键注意事项
- 替换
jwksUri或secret配置为你的实际JWT验证信息 - 若需使用JWT中的其他字段(如自定义
user_id),修改extractClaims中的name值即可 - 速率限制的key必须用双引号包裹变量,否则NGINX会将其当作普通字符串处理
内容的提问来源于stack exchange,提问作者Michel Foucault
相关产品推荐
相关产品推荐

