Todos os produtos
Search
Central de documentação

Alibaba Cloud Service Mesh:Personalize cabeçalhos de requisição e resposta com VirtualService

Última atualização: Jun 28, 2026

Ao rotear tráfego por uma malha de serviços, é comum precisar injetar IDs de rastreamento, aplicar políticas de segurança ou transmitir metadados entre serviços. O Service Mesh (ASM) permite manipular cabeçalhos HTTP no nível de rota pelo campo headers da CustomResourceDefinition (CRD) VirtualService. Assim, você adiciona, sobrescreve ou remove cabeçalhos em requisições e respostas sem alterar o código da aplicação.

Pré-requisitos

Antes de começar, verifique se você tem:

Referência de operações de cabeçalho

O VirtualService oferece três operações para manipular cabeçalhos:

Operação

Campo YAML

Comportamento

Tipo de valor

add

headers.request.add / headers.response.add

Adiciona o cabeçalho especificado com o valor fornecido. Crie o cabeçalho caso não exista.

map<string, string>

set

headers.request.set / headers.response.set

Sobrescreve o valor do cabeçalho. Defina o cabeçalho se ainda não existir.

map<string, string>

remove

headers.request.remove / headers.response.remove

Exclua o cabeçalho completamente.

string[]

Valores de cabeçalho estáticos e dinâmicos

Os valores dos cabeçalhos podem ser strings estáticas ou operadores de comando dinâmicos do Envoy delimitados pelo símbolo %. Por exemplo, %UPSTREAM_CLUSTER% indica o nome de um provedor de serviços. Todos os operadores de comando HTTP usados em logs de acesso também são válidos em cabeçalhos personalizados de requisição ou resposta.

Variável

Descrição

%START_TIME%

Timestamp de início da requisição

%UPSTREAM_CLUSTER%

Nome do cluster de serviço upstream

Para consultar a lista completa de variáveis disponíveis, veja Operadores de comando na documentação do Envoy.

Configure a manipulação de cabeçalhos

A configuração de VirtualService a seguir demonstra as três operações aplicadas aos cabeçalhos de requisição e de resposta:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: httpbin-vs
spec:
  gateways:
    - httpbin
  hosts:
    - '*'
  http:
  - route:
    - destination:
        host: httpbin
        port:
          number: 8000
      weight: 100
    headers:
      request:
        add:
          x-custom-request-header: "custom-value"       # Append a static value
          x-dynamic-request-header: "%START_TIME%"       # Append a dynamic value
        set:
          x-another-request-header: "another-value"      # Overwrite or create
        remove:
          - x-unwanted-header                            # Delete entirely
      response:
        add:
          x-custom-response-header: "custom-response-value"
        set:
          x-another-response-header: "another-response-value"
        remove:
          - x-unwanted-response-header

Essa configuração aplica as seguintes alterações:

Cabeçalhos de requisição

  • Adiciona x-custom-request-header com o valor estático custom-value.

  • Inclui x-dynamic-request-header com o timestamp de início da requisição, resolvido em tempo de execução a partir de %START_TIME%.

  • Sobrescreve x-another-request-header com o valor another-value. Caso esse cabeçalho não exista, ele será criado.

  • Exclua x-unwanted-header.

Cabeçalhos de resposta

  • Adiciona x-custom-response-header com o valor custom-response-value.

  • Sobrescreve x-another-response-header com o valor another-response-value. Se o cabeçalho não existir, ele será criado.

  • Exclua x-unwanted-response-header.

Nota

A CRD VirtualService permite definir e modifique cabeçalhos HTTP. No entanto, os logs de acesso do Envoy não registram essas alterações se o Envoy mantiver as configurações padrão de log. Para registrar cabeçalhos personalizados nos logs de acesso do Envoy, modifique o formato de log do Envoy.

Verifique cabeçalhos personalizados nos logs de acesso

O ASM permite personalizar formatos de log. As expressões personalizadas dos logs de acesso obtêm valores de cabeçalhos de requisição, cabeçalhos de resposta e valores internos do Envoy. Para obter instruções, consulte Personalizar o formato dos logs de acesso.

Adicione os seguintes campos ao formato do seu log de acesso:

Nome do campo

Tipo

Expressão do formato de log

my-x-custom-request-header

Atributo de requisição

%REQ(x-custom-request-header)%

my-x-dynamic-request-header

Atributo de requisição

%REQ(x-dynamic-request-header)%

my-x-custom-response-header

Atributo de resposta

%RESP(x-custom-response-header)%

Aviso

Cabeçalhos de resposta modificados pelo VirtualService podem não aparecer nos logs de acesso se o Envoy aplicar a modificação após a etapa de registro em sua cadeia de filtros. Esse comportamento é esperado e não indica erro de configuração. Consulte o exemplo do pod HTTPBin abaixo.

Após atualize o formato de log, verifique os logs de acesso do pod de gateway e do pod HTTPBin.

Log de acesso do pod de gateway

O pod de gateway captura modificações nos cabeçalhos de requisição e de resposta:

{
    "bytes_received": "9",
    "bytes_sent": "33",
    "response_code": "200",
    "my-x-custom-request-header": "custom-value",
    "my-x-dynamic-request-header": "2024-01-16T14:49:21.187Z",
    "my-x-custom-response-header": "custom-response-value"
}

Log de acesso do pod HTTPBin

O sidecar do HTTPBin não captura cabeçalhos de resposta adicionados pelo VirtualService porque a modificação ocorre após o ponto de registro de log do sidecar. O campo my-x-custom-response-header exibe -:

{
    "bytes_received": "9",
    "bytes_sent": "33",
    "response_code": "200",
    "my-x-custom-request-header": "custom-value",
    "my-x-dynamic-request-header": "2024-01-16T14:49:21.187Z",
    "my-x-custom-response-header": "-"
}