Estoy usando Kubernetes Kops. Quiero establecer rps de límite de velocidad en el nivel de Ingress-Nginx solo para una ruta específica.
Se acerca de
nginx.ingress.kubernetes.io/limit-rpsSi configuro esto en las reglas de ingreso, se aplicará a todas las rutas. Pero, quiero aplicarlo para una ruta específica. Digamos, cuando intento acceder
/loginQuiero establecer el límite de rps en 100 para la ruta / inicio de sesión
nginx.ingress.kubernetes.io/limit-rps: 100Esta es mi configuración de reglas de ingreso,
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: 80Es posible abusar ligeramente de la configuración de ingreso-nginx al agregar varias definiciones de ingreso para el mismo nombre de host. ingress-nginx fusionará las reglas/rutas juntas. Sin embargo, la configuración será más difícil de administrar y se está acercando a los límites de lo que el proxy nginx puede hacer por usted.
Traefik tiene un middleware de límite de velocidad que se puede aplicar a las rutas .
También mire algo como kong o istio si desea comenzar a administrar servicios individuales con más detalle.
Aquí será importante crear una estructura para sus convenciones de nomenclatura para que sepa qué Ingress alberga qué rutas. Usar la ruta de la ruta en el name de Ingress es donde comenzaría, pero su caso de uso puede variar:
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 No estoy seguro de cómo deberían administrarse las anotaciones de todo el host o del servidor (como nginx.ingress.kubernetes.io/ssl-ciphers ). Si todos se fusionan bien, entonces tal vez cree un ingreso especial solo para albergarlos. De lo contrario, podría terminar administrando la configuración del host en todas las configuraciones de Ingress, lo que será una molestia.