【问题标题】:How to apply Nginx Ingress rate limiting?如何应用 Nginx 入口速率限制?
【发布时间】:2021-10-20 00:00:49
【问题描述】:

我正在尝试使用 nginx 入口速率限制对我的 AKS 实施速率限制功能。我刚刚在 nginx 入口资源中提供了limit-rps:10。不过,我没有看到预期的行为,即 rps * 默认突发率。有人可以帮助了解 nginx 中限速的工作原理以及如何在 nginx 资源中设置配置吗?

kind: Ingress
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{"kubernetes.io/ingress.class":"nginx","nginx.ingress.kubernetes.io/limit-rpm":"1","nginx.ingress.kubernetes.io/proxy-body-size":"30m","nginx.ingress.kubernetes.io/rewrite-target":"/$2","nginx.ingress.kubernetes.io/ssl-redirect":"false"},"name":"hop-ingress","namespace":"default"},"spec":{"rules":[{"http":{"paths":[{"backend":{"serviceName":"example-service","servicePort":80},"path":"/"}]}}]}}
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/limit-connections: "1"
    nginx.ingress.kubernetes.io/limit-rps: "1"
    nginx.ingress.kubernetes.io/proxy-body-size: 30m
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
  creationTimestamp: "2021-08-13T13:33:12Z"
  generation: 2
  name: hop-ingress
  namespace: default
  resourceVersion: "21201898"
  selfLink: /apis/extensions/v1beta1/namespaces/default/ingresses/hop-ingress
  uid: 574f4cf5-6b66-414f-ba2c-3c36c9d62ef0
spec:
  rules:
  - http:
      paths:
      - backend:
          serviceName: example-service
          servicePort: 80
        path: /
        pathType: ImplementationSpecific
  - http:
      paths:
      - backend:
          serviceName: productpage
          servicePort: 9080
        path: /productpage(/|$)(.*)
        pathType: ImplementationSpecific
status:
  loadBalancer:
    ingress:
    - ip: 13.71.57.131

【问题讨论】:

    标签: kubernetes kubernetes-ingress azure-aks nginx-ingress nginx-config


    【解决方案1】:

    limit-rps 是一个local rate limit settings,应用于特定的入口对象,而不是提供给入口控制器的配置映射。

    它将限制每秒来自 IP 地址的请求数:

    nginx.ingress.kubernetes.io/limit-rps:接受的请求数 每秒来自给定的 IP。突发限制设置为此限制 乘以突发乘数,默认乘数为 5。当 客户端超出此限制,limit-req-status-code 默认:503 是 返回。

    请参阅下面的虚拟示例。如您所见,nginx.ingress.kubernetes.io/limit-rps: 10 已添加到入口对象的 metadata.annotations

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: minimal-ingress
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /
        nginx.ingress.kubernetes.io/limit-rps: 10
    spec:
      rules:
      - http:
          paths:
          - path: /testpath
            pathType: Prefix
            backend:
              service:
                name: test
                port:
                  number: 80
    

    也可以申请global rate limiting,详情请看说明书

    【讨论】:

    • @danielorn- 感谢您的回复!!!我已经实现了本地速率限制。我已经设置了 limit-rps: 1 。根据我的理解,如果请求限制超过 5/秒,入口应该拒绝请求。随着阈值的增加,我没有收到 503 http 代码。
    • 能否请您使用 yaml 更新您的问题,以获得您期望速率限制的入口对象?
    • 同一个IP每秒必须有5个请求,否则不会踢进去。
    猜你喜欢
    • 2021-03-29
    • 1970-01-01
    • 2021-10-14
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    • 2011-11-29
    相关资源
    最近更新 更多