设置特定路径的Invress-nginx限制RPS



我正在使用kubernetes kops。我想仅针对特定路径设置速率限制RPS在入口-NGINX级别上。

我知道

nginx.ingress.kubernetes.io/limit-rps 

如果我在Ingress规则中进行设置,则适用于所有路线。但是,我想将其应用于特定路线。假设,当我尝试访问

/login

我想将RPS限制为路径/登录

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

这是我的入口规则配置,

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

可以通过为同一主机名添加多个入口定义来稍微滥用Ingress-nginx的配置。Ingress-nginx将将规则/路线合并在一起。不过,配置将变得更难管理,并且您正在朝着NGINX代理可以为您做什么的限制。

其他选项

traefik具有可应用于路线的费率限制中间件。

,如果您想更详细地开始管理单个服务,还要查看像Kong或Istio之类的东西。

nginx indress config

为您的命名惯例创建一个结构将在这里很重要,因此您知道哪些进水室路线。使用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配置中管理主机设置,这将很痛苦。

相关内容

  • 没有找到相关文章

最新更新