是否可以基于nginx-ingress上的HTTP标头值对限制请求进行评分?
答案 0 :(得分:3)
由于我没有kubernetes,nginxinc的nginx入口表明这里的解决方案不起作用。
设法通过configmap和注释调整来做到这一点。
配置映射:
kind: ConfigMap
apiVersion: v1
metadata:
name: nginx-configuration
namespace: ingress-nginx
labels:
app: nginx-ingress
chart: nginx-ingress-1.33.0-dev
release: nginx-ingress
data:
http-snippet: |
limit_req_zone $http_authorization zone=my-zone:20m rate=5r/s;
limit_req_zone $binary_remote_addr zone=my-zone:20m rate=10r/s;
limit_req_zone $http_someheader zone=my-zone:20m rate=20r/s;
入口资源中的注释:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/configuration-snippet: |
limit_req zone=my-zone-1 burst=10 nodelay;
limit_req_log_level notice;
limit_req_status 429;
注意:不允许将http代码段用作注释!
对于一个入口定义的不同位置,具有不同节流的示例:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/server-snippet: |
location /content/images/ {
limit_req zone=my-zone-2 burst=50 nodelay;
}
location /content/texts/ {
limit_req zone=my-zone-3 burst=50 nodelay;
}
nginx.ingress.kubernetes.io/configuration-snippet: |
limit_req zone=my-zone-1 burst=10 nodelay;
limit_req_log_level notice;
limit_req_status 429;
请注意,在服务器摘要批注中在此处定义位置不允许您在入口处进一步定义
答案 1 :(得分:1)