【问题标题】:Setup Ingress-Nginx rate limit rps for a specific path为特定路径设置 Ingress-Nginx 速率限制 rps
【发布时间】:2019-10-12 11:45:15
【问题描述】:

我正在使用 Kubernetes Kops。我只想为特定路径在 Ingress-Nginx 级别设置速率限制 rps。

我知道

nginx.ingress.kubernetes.io/limit-rps 

如果我在 Ingress 规则中设置它,那么它将适用于所有路由。但是,我想将其应用于特定路线。比方说,当我尝试访问时

/login

我想将路径 /login 的 rps 限制设置为 100

nginx.ingress.kubernetes.io/limit-rps: 100

这是我的 Ingress 规则配置,

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: staging-ingress-rules
  namespace: staging
  annotations:
    kubernetes.io/ingress.class: 'nginx'
    nginx.ingress.kubernetes.io/proxy-body-size: '0'
spec:
  rules:
  - host: staging.mysite.com
    http:
      paths:
      - path: /login
        backend:
          serviceName: login_site
          servicePort: 80
      - path: /registration
        backend:
          serviceName: registration_site
          servicePort: 80

【问题讨论】:

    标签: amazon-web-services docker kubernetes kubernetes-ingress nginx-ingress


    【解决方案1】:

    通过为同一个主机名添加多个 Ingress 定义,可能会稍微滥用 ingress-nginx 的配置。 ingress-nginx 会将规则/路由合并在一起。不过,配置将变得更难管理,并且您正在接近 nginx 代理可以为您做的事情的极限。

    其他选项

    Traefik 有一个rate limit middleware,可以应用于routes

    如果您想开始更详细地管理单个服务,还可以查看 kongistio 之类的内容。

    Nginx 入口配置

    为您的命名约定创建一个结构在这里很重要,这样您就可以知道哪些 Ingress 包含哪些路由。在 Ingress name 中使用路由路径是我要开始的地方,但您的用例可能会有所不同:

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: staging-ingress-rules-registration
      annotations:
        kubernetes.io/ingress.class: 'nginx'
        nginx.ingress.kubernetes.io/proxy-body-size: '0'
        nginx.ingress.kubernetes.io/limit-rps: '10'
    spec:
      rules:
      - host: staging.mysite.com
        http:
          paths:
          - path: /registration
            backend:
              serviceName: registration-site
              servicePort: 80
    
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: staging-ingress-rules-login
      annotations:
        kubernetes.io/ingress.class: 'nginx'
        nginx.ingress.kubernetes.io/proxy-body-size: '0'
        nginx.ingress.kubernetes.io/limit-rps: '100'
    spec:
      rules:
      - host: staging.mysite.com
        http:
          paths:
          - path: /login
            backend:
              serviceName: login-site
              servicePort: 80
    

    我不确定如何管理主机范围或服务器范围的注释(如nginx.ingress.kubernetes.io/ssl-ciphers)。如果它们都很好地合并,那么也许可以创建一个特殊的 Ingress 来容纳它们。如果不是这样,您最终可能会在所有 Ingress 配置中管理主机设置,这将是一件痛苦的事情。

    【讨论】:

      猜你喜欢
      • 2022-12-13
      • 2020-12-05
      • 2019-05-31
      • 1970-01-01
      • 2021-09-08
      • 2022-12-11
      • 1970-01-01
      • 1970-01-01
      • 2021-05-15
      相关资源
      最近更新 更多