Configura el enrutamiento basado en el cuerpo

Aprende a configurar el enrutamiento basado en el cuerpo, una capacidad de GKE Inference Gateway que te permite enrutar solicitudes de inferencia mediante la extracción del nombre del modelo directamente del cuerpo de la solicitud HTTP.

Esto es particularmente útil para las aplicaciones que cumplen con especificaciones como la API de OpenAI, en la que el identificador del modelo suele estar integrado en la carga útil de la solicitud en lugar de en los encabezados o las rutas de URL.

Cómo funciona el enrutamiento basado en el cuerpo

GKE Inference Gateway implementa el enrutamiento basado en el cuerpo como una extensión ext_proc del proxy de Envoy. El flujo de solicitudes está diseñado para integrarse sin problemas con las configuraciones existentes de la API de Gateway:

  1. Recepción de solicitudes: El balanceador de cargas de capa 7 recibe una solicitud de inferencia entrante.
  2. Extracción de parámetros del cuerpo: El balanceador de cargas de capa 7 reenvía la solicitud a la extensión Body to Header. Esta extensión extrae el parámetro model estándar del cuerpo de la solicitud HTTP.
  3. Inserción de encabezados: El valor del parámetro del modelo extraído se inserta como un encabezado de la solicitud nuevo (con la clave X-Gateway-Model-Name).
  4. Decisión de enrutamiento: Con el nombre del modelo ahora disponible en un encabezado de solicitud, GKE Inference Gateway puede usar las construcciones existentes de la API de Gateway HTTPRoute para tomar decisiones de enrutamiento. Por ejemplo, las reglas HTTPRoute pueden coincidir con el encabezado insertado para dirigir el tráfico al InferencePool adecuado.
  5. Selección de extremos: El balanceador de cargas de capa 7 selecciona el InferencePool (BackendService) y el grupo de extremos adecuados. Luego, reenvía la información de la solicitud y el extremo a la extensión Endpoint Picker para la selección detallada de extremos dentro del grupo elegido.
  6. Enrutamiento final: La solicitud se enruta a la réplica de modelo específica seleccionada por la extensión Endpoint Picker.

Este proceso ayuda a garantizar que, incluso cuando la información del modelo se encuentre en el cuerpo de la solicitud, tu GKE Inference Gateway pueda enrutar el tráfico de forma inteligente a los servicios de backend correctos.

Configura el enrutamiento basado en el cuerpo

La extensión de enrutamiento basado en el cuerpo (BBR) para GKE Inference Gateway se ejecuta como un servicio que administras dentro de tu clúster de Kubernetes. Desde la perspectiva del balanceador de cargas de capa 7, la extensión BBR es un servidor gRPC externo. Cuando el balanceador de cargas necesita inspeccionar el cuerpo de una solicitud para determinar el nombre del modelo, realiza una llamada gRPC al servicio BBR. Luego, el servicio BBR procesa la solicitud y muestra información al balanceador de cargas, como los encabezados que se insertarán para el enrutamiento.

Para habilitar el enrutamiento basado en el cuerpo, implementa la extensión BBR como un Pod y la integra con los recursos GCPRoutingExtension y HTTPRoute.

Requisitos previos

Implementa el router basado en el cuerpo

La extensión de enrutamiento basado en el cuerpo se implementa como un Deployment y un Service de Kubernetes, junto con un recurso GCPRoutingExtension dentro de tu clúster. Puedes usar Helm para una instalación simplificada.

Para implementar los recursos necesarios para el router basado en el cuerpo, ejecuta el siguiente comando:

helm install body-based-router oci://registry.k8s.io/gateway-api-inference-extension/charts/body-based-routing \
    --set provider.name=gke \
    --set inferenceGateway.name=GATEWAY_NAME

Reemplaza GATEWAY_NAME por el nombre de tu recurso de Gateway.

Este comando implementa los siguientes recursos:

  • Un Service y un Deployment para la extensión de enrutamiento basado en el cuerpo
  • Un recurso GCPRoutingExtension y un recurso GCPHealthCheckPolicy para adjuntar la extensión de enrutamiento basado en el cuerpo a tu recurso de GKE Gateway

Configura HTTPRoute para el enrutamiento con reconocimiento del modelo

Una vez que la extensión se implementa y configura, puedes definir recursos HTTPRoute que usen el encabezado insertado (X-Gateway-Model-Name) para las decisiones de enrutamiento.

A continuación, se muestra un ejemplo de manifiesto HTTPRoute para el enrutamiento con reconocimiento del modelo:

apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: routes-to-llms
spec:
  parentRefs:
  - name: GATEWAY_NAME
  rules:
  - matches:
    - headers:
      - type: Exact
        name: X-Gateway-Model-Name
        value: chatbot # Matches the extracted model name
      path:
        type: PathPrefix
        value: /
    backendRefs:
    - name: gemma # Target InferencePool for 'chatbot' model
      kind: InferencePool
      group: "inference.networking.k8s.io"
  - matches:
    - headers:
      - type: Exact
        name: X-Gateway-Model-Name
        value: sentiment # Matches another extracted model name
      path:
        type: PathPrefix
        value: /
    backendRefs:
    - name: llama # Target InferencePool for 'sentiment' model
      kind: InferencePool
      group: "inference.networking.k8s.io"

Para aplicar este manifiesto a tu clúster, guárdalo como httproute-for-models.yaml y ejecuta el siguiente comando:

kubectl apply -f httproute-for-models.yaml

Consideraciones y limitaciones

Cuando planifiques la implementación del enrutamiento basado en el cuerpo, ten en cuenta lo siguiente:

  • Comportamiento de cierre ante fallas: La extensión de enrutamiento basado en el cuerpo está diseñada para operar en un modo de "cierre ante fallas". Si la extensión no está disponible o no puede procesar una solicitud, se produce un error (por ejemplo, un código de respuesta 404 o 503 si no se configura un backend predeterminado) en lugar de enrutar de forma incorrecta. Asegúrate de que tus implementaciones tengan alta disponibilidad para mantener la confiabilidad del servicio.

  • Tamaño del cuerpo de la solicitud y transmisión: El procesamiento de cuerpos de solicitudes HTTP grandes, en especial con la transmisión habilitada, puede generar complejidades. Si el proxy de Envoy se ve obligado a transmitir el cuerpo de la solicitud (por lo general, para cuerpos de más de 250 KB), es posible que no pueda insertar encabezados nuevos. Esto puede provocar fallas de enrutamiento (por ejemplo, un error 404 si no se pueden aplicar las reglas de coincidencia de encabezados).

  • Mantenimiento a largo plazo: La extensión de enrutamiento basado en el cuerpo se ejecuta como un componente dentro de tus clústeres de GKE. Eres responsable de la administración de su ciclo de vida, incluidas las actualizaciones, los parches de seguridad y de garantizar su funcionamiento continuo.

¿Qué sigue?