Tengo un ingreso algo como a continuación
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' spec: rules: - host: staging.mysite.com http: paths: - path: / backend: serviceName: login servicePort: 80 - path: /login/info backend: serviceName: login servicePort: 80
y el nginx.conf para esto es algo como esto
server { location / { --------- --------- } location /login/info { --------- ------- } }
Me gustaría agregar el límite de velocidad para la ubicación /login.info, probé el fragmento de ubicación pero está creando una ubicación anidada dentro de /login/info y el resultado de esta API es 404, ¿alguna forma de hacerlo?
Esta es una respuesta wiki de la comunidad, siéntase libre de editarla y expandirla.
Como nos faltan algunos detalles con respecto a su configuración, le explicaré cómo puede manejar esto en general.
Puede usar la siguiente anotación para agregar un bloque de ubicación personalizado:
nginx.ingress.kubernetes.io/configuration-snippet: | limit_req zone=authentication_ratelimit nodelay;
Y que usar un mapa , por ejemplo:
http-snippets: | map $uri $with_limit_req { default 0; "~*^/authenticate$" 1; } map $with_limit_req $auth_limit_req_key { default ''; '1' $binary_remote_addr; # the limit key } limit_req_zone $auth_limit_req_key zone=authentication_ratelimit:10m rate=1r/s;
Note que :
Syntax: limit_req_zone key zone=name:size rate=rate [sync]; Default: — Context: http
Establece parámetros para una zona de memoria compartida que mantendrá estados para varias claves. En particular, el estado almacena el número actual de solicitudes excesivas. La clave puede contener texto, variables y su combinación. Las solicitudes con un valor de clave vacío no se contabilizan.