Personalize cabeçalhos de requisição e resposta por meio do CustomResourceDefinition (CRD) EnvoyFilter. Esse CRD permite modifique diretamente a configuração de um proxy Istio (Envoy). Assim, é possível adicionar, exclua ou alterar cabeçalhos de requisição ou resposta conforme o tráfego passa pelo proxy.
Pré-requisitos
A aplicação HTTPBin deve estar implantada. Para mais informações, consulte Implantar a aplicação HTTPBin.
Etapa 1: defina um modelo de filtro Envoy
O ASM permite crie filtros Envoy com base em modelos. Um único modelo serve para gerar múltiplos filtros, aplicáveis a diferentes workloads e namespaces. Essa abordagem torna as configurações reutilizáveis e aumenta a eficiência do gerenciamento.
O código yaml abaixo exemplifica um modelo de filtro Envoy. Para mais detalhes, consulte Envoy Filter.
Se usar o Istio 1.9 ou posterior, substitua o valor do campo
proxyVersionpela versão correspondente do Istio.Se usar o Istio 1.8 ou anterior, substitua o valor do campo
proxyVersionpela versão do Istio instalada. Além disso, no código yaml acima, substituaenvoy.filters.network.http_connection_managerporenvoy.http_connection_manager,envoy.filters.http.routerporenvoy.routeretype.googleapis.com/envoy.extensions.filters.http.lua.v3.Luaportype.googleapis.com/envoy.config.filter.http.lua.v2.Lua.
Etapa 2: crie um filtro Envoy a partir do modelo
Após defina o modelo, vincule-o aos workloads ou namespaces desejados. Dessa forma, os filtros gerados afetam apenas os recursos especificados. O ASM cria automaticamente os filtros Envoy com base no modelo assim que a associação é estabelecida.
O filtro criado adiciona um cabeçalho de requisição personalizado à requisição que entra no workload e um cabeçalho de resposta personalizado à resposta que será enviada pelo workload. No exemplo a seguir, cria-se um filtro chamado custom-header-filter e configura-se um filtro Lua para adicionar cabeçalhos de requisição e resposta. O filtro Envoy entra em vigor para todos os workloads com o rótulo app: my-app.
O EnvoyFilter é um método de configuração poderoso, mas complexo, pois modifique diretamente as configurações subjacentes do Envoy. Portanto, ao usar o EnvoyFilter, recomendamos familiarizar-se com o modelo de configuração do Envoy e aplicar alterações com cautela para evitar erros potenciais. Além disso, a configuração do EnvoyFilter pode mudar com a atualização das versões do Istio. Atenção às questões de compatibilidade.
Etapa 3: visualize cabeçalhos personalizados nos logs de acesso
O ASM permite personalizar formatos de log. As expressões personalizadas dos logs de acesso podem obter valores de cabeçalhos de requisição, cabeçalhos de resposta e valores internos do Envoy. Para mais informações, consulte Personalizar o formato dos logs de acesso.
A tabela a seguir lista três novos campos usados para exibir conteúdo nos logs de acesso.
|
Campo |
Tipo |
Valor |
|
my-x-custom-request-header |
Atributo de requisição |
%REQ(x-custom-request-header)% |
|
baggage-from-request |
Atributo de requisição |
%REQ(baggage)% |
|
my-x-custom-response-header |
Atributo de resposta |
%RESP(x-custom-response-header)% |
Verifique os logs de acesso do pod HTTPBin para visualize um conteúdo semelhante ao seguinte:
{
"bytes_received": "0",
"bytes_sent": "490",
"duration": "1",
"istio_policy_status": "-",
"method": "GET",
"path": "/headers",
"protocol": "HTTP/1.1",
"response_code": "200",
"response_flags": "-",
"my-x-custom-request-header": "xxx",
"baggage-from-request": "x-custom-request-header=xxx",
"my-x-custom-response-header": "x-custom-request-header=xxx",
}