es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Istio bloquea las solicitudes excesivas de una única IP.

Necesito configurar un límite de tasa para el número de solicitudes que puede desencadenar una única dirección IP.

Seguí este tutorial en la documentación de Istio para el límite de tasa global.
https://istio.io/latest/docs/tasks/policy-enforcement/rate-limit/

Implementé el servicio de límite de tasa usando este archivo, compartido en el enlace anterior.
https://github.com/istio/istio/blob/release-1.12/samples/ratelimit/rate-limit-service.yaml

El configmap compartido a continuación funciona bien, pero bloquea las solicitudes de todas las direcciones IP una vez que se alcanza el límite. Necesito bloquear a las IPs que intenten enviar más solicitudes de las especificadas.

apiVersion: v1
kind: ConfigMap
metadata:
  name: ratelimit-config
data:
  config.yaml: |
    domain: productpage-ratelimit
    descriptors:
      - key: PATH
        value: "/productpage"
        rate_limit:
          unit: minute
          requests_per_unit: 1
      - key: PATH
        rate_limit:
          unit: minute
          requests_per_unit: 100

Actualicé la configuración anterior siguiendo el ejemplo 3 en este enlace https://github.com/envoyproxy/ratelimit#example-3. Reinicié el servicio de límite de tasa y los pods de Istio después de eso también. Intenté acceder a la URL después de esto, pero no bloqueó mis solicitudes.

apiVersion: v1
kind: ConfigMap
metadata:
  name: ratelimit-config
data:
  config.yaml: |
    domain: edge_proxy_per_ip
    descriptors:
      - key: remote_address
        rate_limit:
          requests_per_unit: 1
          unit: minute

Registros del servicio de límite de tasa cuando intento abrir la URL.
enter image description here

Versión de Istio: 1.12.1
Versión de Kubernetes:
Versión del cliente: v1.22.2 Versión del servidor: v1.21.2-eks-06eac09 –

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para establecer un límite de velocidad para la cantidad de solicitudes que una sola IP puede activar, puedes seguir la documentación de Istio para el límite de velocidad, específicamente sobre cómo configurar el límite de velocidad basado en las direcciones IP de los clientes.

    1. Primero, despliega el servicio de límite de velocidad utilizando el archivo yaml compartido en la documentación de Istio: https://github.com/istio/istio/blob/release-1.12/samples/ratelimit/rate-limit-service.yaml
    2. Luego, crea un configmap para configurar los límites de velocidad para tu aplicación. Puedes utilizar este configmap de ejemplo como punto de partida:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: ratelimit-config
    data:
      config.yaml: |
        domain: edge_proxy_per_ip
        descriptors:
          - key: remote_address
            rate_limit:
              requests_per_unit: 10
              unit: minute
    

    Este configmap especifica un límite de velocidad de 10 solicitudes por minuto para cada dirección IP. Actualiza el valor de requests_per_unit para establecer el número de solicitudes permitidas por unidad de tiempo.

    1. Aplica el configmap a tu clúster utilizando kubectl apply -f <configmap.yaml>
  2. Asegúrate de que Istio esté configurado para utilizar el servicio de límite de velocidad. La instalación predeterminada de Istio utiliza el servicio de límite de velocidad para el límite de velocidad, pero puede que necesites verificar que la configuración esté establecida correctamente para tu clúster.

  3. Prueba el límite de velocidad realizando solicitudes desde diferentes direcciones IP. Puedes utilizar herramientas como curl para simular las solicitudes. Una vez que se alcance el límite de velocidad para una dirección IP, Istio devolverá una respuesta HTTP 429 “Too Many Requests”.

  4. Si el límite de velocidad no funciona como se esperaba, verifica los registros del servicio de límite de velocidad y los pods de Istio para solucionar el problema. También puedes considerar experimentar con diferentes configuraciones de límite de velocidad, como establecer un límite de ráfaga para permitir que algunas solicitudes superen temporalmente el límite de velocidad.</configmap.yaml>

Comments are closed.