ingress-nginx-限速

限速
这些注释定义了可由单个客户端IP地址打开的连接的限制。这可用于缓解DDoS攻击。

  • nginx.ingress.kubernetes.io/limit-connections:来自单个IP地址的并发连接数。
  • nginx.ingress.kubernetes.io/limit-rps:每秒可从给定IP接受的连接数。
  • nginx.ingress.kubernetes.io/limit-rpm:每分钟可从给定IP接受的连接数。
  • nginx.ingress.kubernetes.io/limit-rate-after:设置初始金额,在此之后,对客户的进一步传输响应将受到速率限制。
  • nginx.ingress.kubernetes.io/limit-rate:每秒从客户接受的请求率。

您可以指定要通过nginx.ingress.kubernetes.io/limit-whitelist注释从速率限制中排除的客户端IP源范围。该值是逗号分隔的CIDR列表。

如果在单个Ingress规则中指定多个注释limit-rpm,则limit-rps优先。

注释nginx.ingress.kubernetes.io/limit-rate,nginx.ingress.kubernetes.io/limit-rate-after定义对客户端的响应传输速率的限制。速率以每秒字节数指定。零值禁用速率限制。根据请求设置限制,因此如果客户端同时打开两个连接,则总速率将是指定限制的两倍。

例子:

$ cat my-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
#    nginx.ingress.kubernetes.io/limit-connections: "300"
#    nginx.ingress.kubernetes.io/limit-rps: "300"
#    nginx.ingress.kubernetes.io/limit-rpm: "300"
    nginx.ingress.kubernetes.io/limit-whitelist: "192.168.7.0/24"
spec:
  rules:
  - host: my.test.com
    http:
      paths: 
      - path: /
        backend:
          serviceName: nginx
          servicePort: 80

要为所有Ingress规则全局配置此设置,可以在NGINX ConfigMap中设置limit-rate-after和limit-rate值。如果在入口注释中设置值,则将覆盖全局设置

$ cat ingress-nginx-nginx-0.22.0/deploy/configmap.yaml
kind: ConfigMap
apiVersion: v1
metadata:
  name: nginx-configuration
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
data:
  limit-rate-after: "300"
  limit-rate-after: "300"
  #worker-processes: "4"
  #keep-alive: "75"
  #keep-alive-requests: "100"
  #proxy-next-upstream: "http_502 http_503 http_504"

limit-rate
限制向客户端传输的响应速率。速率以每秒字节数指定。零值禁用速率限制。根据请求设置限制,因此如果客户端同时打开两个连接,则总速率将是指定限制的两倍。
参考文献: http://nginx.org/en/docs/http/ngx_http_core_module.html#limit_rate

limit-rate-after
设置初始量,在此之后,对客户端的响应的进一步传输将受到速率限制。
参考文献: http://nginx.org/en/docs/http/ngx_http_core_module.html#limit_rate_after

参考:

https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/nginx-configuration/annotations.md

https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/nginx-configuration/configmap.md