Configurar o roteamento com base no corpo


Saiba como configurar o roteamento com base no corpo, um recurso do gateway de inferência do GKE que permite rotear solicitações de inferência extraindo o nome do modelo diretamente do corpo da solicitação HTTP.

Isso é útil principalmente para aplicativos que seguem especificações como a API da OpenAI, em que o identificador do modelo geralmente é incorporado ao payload da solicitação em vez de cabeçalhos ou caminhos de URL.

Como funciona o roteamento com base no corpo

O gateway de inferência do GKE implementa o roteamento com base no corpo como uma extensão ext_proc do proxy Envoy. O fluxo de solicitação foi projetado para se integrar perfeitamente às suas configurações atuais da API Gateway:

  1. Recepção de solicitações: o balanceador de carga da camada 7 recebe uma solicitação de inferência.
  2. Extração de parâmetros do corpo: o balanceador de carga da Camada 7 encaminha a solicitação para a extensão "Body to Header". Essa extensão extrai o parâmetro model padrão do corpo da solicitação HTTP.
  3. Injeção de cabeçalho: o valor do parâmetro do modelo extraído é injetado como um novo cabeçalho de solicitação (com a chave X-Gateway-Model-Name).
  4. Decisão de roteamento: com o nome do modelo agora disponível em um cabeçalho de solicitação, o gateway de inferência do GKE pode usar construções HTTPRoute da API Gateway para tomar decisões de roteamento. Por exemplo, as regras HTTPRoute podem corresponder ao cabeçalho injetado para direcionar o tráfego ao InferencePool adequado.
  5. Seleção de endpoint: o balanceador de carga da camada 7 seleciona o InferencePool (BackendService) e o grupo de endpoints apropriados. Em seguida, ele encaminha informações de solicitação e endpoint para a extensão Seletor de endpoints para seleção refinada de endpoints no pool escolhido.
  6. Roteamento final: a solicitação é encaminhada para a réplica do modelo específica selecionada pela extensão Endpoint Picker.

Esse processo garante que, mesmo quando as informações do modelo estão no corpo da solicitação, o gateway de inferência do GKE possa rotear o tráfego de maneira inteligente para os serviços de back-end corretos.

Configurar o roteamento com base no corpo

A extensão de roteamento com base no corpo (BBR, na sigla em inglês) para o gateway de inferência do GKE é executada como um serviço gerenciado no cluster do Kubernetes. Do ponto de vista do balanceador de carga da camada 7, a extensão BBR é um servidor gRPC externo. Quando o balanceador de carga precisa inspecionar um corpo de solicitação para determinar o nome do modelo, ele faz uma chamada gRPC para o serviço BBR. Em seguida, o serviço BBR processa a solicitação e retorna informações ao balanceador de carga, como cabeçalhos a serem inseridos para roteamento.

Para ativar o roteamento com base no corpo, implante a extensão BBR como um pod e a integre usando os recursos GCPRoutingExtension e HTTPRoute.

Pré-requisitos

Implantar o roteador com base no corpo

A extensão de roteamento baseada em corpo é implantada como uma implantação e um serviço do Kubernetes, além de um recurso GCPRoutingExtension no cluster. Você pode usar o Helm para uma instalação simplificada.

Para implantar os recursos necessários para o roteador baseado em corpo, execute o seguinte 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

Substitua GATEWAY_NAME pelo nome do recurso de gateway.

Esse comando implanta os seguintes recursos:

  • Um serviço e uma implantação para a extensão de roteamento com base no corpo.
  • Um recurso GCPRoutingExtension e um recurso GCPHealthCheckPolicy para anexar a extensão de roteamento com base no corpo ao recurso do gateway do GKE.

Configurar o HTTPRoute para o roteamento com reconhecimento de modelo

Depois que a extensão for implantada e configurada, será possível definir recursos HTTPRoute que usam o cabeçalho injetado (X-Gateway-Model-Name) para decisões de roteamento.

Confira a seguir um exemplo de manifesto HTTPRoute para roteamento com reconhecimento de 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 esse manifesto ao cluster, salve-o como httproute-for-models.yaml e execute o seguinte comando:

kubectl apply -f httproute-for-models.yaml

Considerações e limitações

Ao planejar a implementação do roteamento com base no corpo, considere o seguinte:

  • Comportamento de falha ao fechar:a extensão de roteamento com base no corpo foi projetada para operar no modo "falha ao fechar". Se a extensão não estiver disponível ou não conseguir processar uma solicitação, isso vai resultar em um erro (por exemplo, um código de resposta 404 ou 503 se nenhum back-end padrão estiver configurado), em vez de um roteamento incorreto. Verifique se as implantações estão altamente disponíveis para manter a confiabilidade do serviço.

  • Tamanho e streaming do corpo da solicitação:o processamento de corpos de solicitação HTTP grandes, especialmente com o streaming ativado, pode gerar complexidades. Se o proxy do Envoy for forçado a transmitir o corpo da solicitação (normalmente para corpos maiores que 250 KB), talvez ele não consiga injetar novos cabeçalhos. Isso pode levar a falhas de roteamento, por exemplo, um erro 404 se as regras de correspondência de cabeçalho não puderem ser aplicadas.

  • Manutenção de longo prazo:a extensão de roteamento com base no corpo é executada como um componente nos clusters do GKE. Você é responsável pelo gerenciamento do ciclo de vida, incluindo upgrades, patches de segurança e garantia de operação contínua.

A seguir