基于 nginx-ingress 上的 HTTP 标头值对请求进行速率限制

2023-12-19

是否可以根据 nginx-ingress 上的 HTTP 标头值对请求进行速率限制?


由于我没有来自 nginxinc 的 kubernetes nginx 入口,因此此处建议的解决方案不起作用。

设法通过配置映射和注释调整来做到这一点。

配置图:

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-snippet 不允许作为注释!

一个入口定义的不同位置具有不同节流的示例:

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;

请注意,此处的定义位置为服务器片段注释不允许您在 ingress 中进一步定义它

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于 nginx-ingress 上的 HTTP 标头值对请求进行速率限制 的相关文章

随机推荐