Atualizar configurações do compressor do EnvoyFilter
Vários campos de nível superior na superfície da API do filtro
envoy.extensions.filters.http.compressor.v3.Compressor foram descontinuados
no
Envoy
(consulte a definição
de origem).
Essas configurações foram movidas para blocos dedicados response_direction_config.common_config e request_direction_config.common_config.
Este guia fornece o contexto e as etapas necessárias para atualizar os recursos EnvoyFilter para um formato compatível. A mudança para esse formato moderno garante que suas configurações permaneçam compatíveis com atualizações subsequentes, se beneficiem de uma clareza estrutural aprimorada e estejam alinhadas às práticas recomendadas de modernização do Cloud Service Mesh.
Entender a necessidade de modernização
O filtro do compressor do Envoy oferece compactação e descompactação instantâneas de corpos HTTP, ajudando a reduzir o uso de largura de banda e melhorar o desempenho do aplicativo.
O Cloud Service Mesh com o TRAFFIC_DIRECTOR plano de controle (consulte Verificar a implementação do plano de controle)
exige o uso da versão compatível da API EnvoyFilter. As implantações legadas que usam campos de nível superior descontinuados (como content_length, content_type, disable_on_etag_header, remove_accept_encoding_header ou runtime_enabled) vão continuar funcionando, mas é recomendável que sejam atualizadas imediatamente para fins de confiabilidade.
Ao usar esses campos descontinuados, as validações serão lançadas progressivamente em canais de lançamento (Rapid, Regular e Stable). As validações do plano de controle são aplicadas com base em quando as implantações ocorreram:
| Tipo de implantação | Comportamento da validação |
|---|---|
| Implantações legadas (implantadas antes da ativação das validações) | O plano de controle define um status de aviso no recurso personalizado EnvoyFilter (CR, na sigla em inglês) que lê: found usage of unsupported fields: [...]. A configuração ainda será aplicada para compatibilidade com versões anteriores, mas é necessário migrar para os campos compatíveis para garantir o suporte contínuo. |
| Implantações compatíveis (implantadas após a ativação das validações) | O plano de controle bloqueia estritamente o uso de campos sem suporte. A aplicação da configuração resulta em um erro no recurso EnvoyFilter com a mensagem: found usage of unsupported fields: [...], e a configuração sem suporte será rejeitada. |
A atualização das configurações resolve esses avisos e erros no status do recurso e garante que as configurações estejam em conformidade com as validações.
Identificar configurações descontinuadas
A configuração EnvoyFilter precisa ser atualizada se você estiver definindo algum dos campos a seguir diretamente no bloco typed_config:
min_content_lengthcontent_lengthcontent_typedisable_on_etag_headerremove_accept_encoding_header
É possível listar seus EnvoyFilters usando:
kubectl get envoyfilters --all-namespaces -o yaml
Inspecione a saída dos EnvoyFilters que corrigem envoy.filters.http.compressor.
Formatos de configuração
As seções a seguir fornecem exemplos das configurações descontinuadas e modernizadas para o filtro do compressor do Envoy em um recurso EnvoyFilter.
Exemplo de uma configuração descontinuada
Se a seção de patch do EnvoyFilter for semelhante ao snippet a seguir, ela usará o formato descontinuado:
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: compressor-filter-update
namespace: istio-system
spec:
configPatches:
- applyTo: HTTP_FILTER
match:
context: GATEWAY
listener:
filterChain:
filter:
name: envoy.filters.network.http_connection_manager
subFilter:
name: envoy.filters.http.router
patch:
operation: INSERT_BEFORE
value:
name: envoy.filters.http.compressor
typed_config:
'@type': type.googleapis.com/envoy.extensions.filters.http.compressor.v3.Compressor
# These top-level fields are DEPRECATED
min_content_length: 1024
content_type:
- "application/javascript"
- "application/json"
disable_on_etag_header: true
remove_accept_encoding_header: true
compressor_library:
name: gzip
typed_config:
'@type': type.googleapis.com/envoy.extensions.compression.gzip.compressor.v3.Gzip
Exemplo da configuração modernizada
Os campos descontinuados precisam ser movidos para o objeto response_direction_config (ou request_direction_config, se aplicável):
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: compressor-filter-update
namespace: istio-system
spec:
configPatches:
- applyTo: HTTP_FILTER
match:
context: GATEWAY
listener:
filterChain:
filter:
name: envoy.filters.network.http_connection_manager
subFilter:
name: envoy.filters.http.router
patch:
operation: INSERT_BEFORE
value:
name: envoy.filters.http.compressor
typed_config:
'@type': type.googleapis.com/envoy.extensions.filters.http.compressor.v3.Compressor
compressor_library:
name: gzip
typed_config:
'@type': type.googleapis.com/envoy.extensions.compression.gzip.compressor.v3.Gzip
response_direction_config:
disable_on_etag_header: true # MOVED
remove_accept_encoding_header: true # MOVED
common_config:
min_content_length: 1024 # MOVED
content_type: # MOVED
- "application/javascript"
- "application/json"
enabled:
default_value: true
runtime_key: "compressor.enabled"
Campos compatíveis e caminhos de migração
Para uma lista completa de campos compatíveis, consulte o guia Extensibilidade do plano de dados usando EnvoyFilter. A tabela a seguir detalha o mapeamento para migrar os campos descontinuados mais comuns.
| Caminho do campo descontinuado | Caminho do campo moderno | Observações |
|---|---|---|
typed_config.min_content_length |
typed_config.response_direction_config.common_config.min_content_lengthOR typed_config.request_direction_config.common_config.min_content_length |
Define o tamanho mínimo da resposta OU da solicitação, respectivamente, para acionar a compactação. |
typed_config.content_length |
typed_config.response_direction_config.common_config.min_content_lengthOR typed_config.request_direction_config.common_config.min_content_length |
Alias anterior de min_content_length. Renomeie para min_content_length no novo caminho. |
typed_config.content_type |
typed_config.response_direction_config.common_config.content_typeOR typed_config.request_direction_config.common_config.content_type |
Matriz de tipos de conteúdo a serem compactados. |
typed_config.disable_on_etag_header |
typed_config.response_direction_config.disable_on_etag_header |
Desativa a compactação se a resposta contiver um cabeçalho ETag. |
typed_config.remove_accept_encoding_header |
typed_config.response_direction_config.remove_accept_encoding_header |
Remove o cabeçalho Accept-Encoding das solicitações antes de enviar para o upstream. |
Plano de migração
Recomendamos atualizar as configurações do EnvoyFilter seguindo as práticas recomendadas de implantação e teste padrão da sua organização. Considere estas etapas gerais durante a migração:
- Identificar: encontre todos os recursos
EnvoyFilterusando o filtro do compressor com campos descontinuados, conforme descrito em Identificar configurações descontinuadas. - Testar:modifique o YAML dos recursos
EnvoyFiltere teste as mudanças em um ambiente de pré-produção. Verifique se a compactação está ativa para os tipos e tamanhos de conteúdo esperados. - Monitorar e validar:
- Verifique o status do recurso
EnvoyFilterpara confirmar que os avisos ou errosfound usage of unsupported fields: [...]não estão mais presentes. - Monitore as principais métricas: uso da CPU, latência e consumo de largura de banda.
- Inspecione os cabeçalhos de resposta (por exemplo,
Content-Encoding: gzip) e confirme a compactação.
- Verifique o status do recurso
- Implantar:aplique as configurações compatíveis do
EnvoyFilteràs cargas de trabalho de produção.
Benefícios da modernização
- Clareza do status do recurso: remove avisos e erros
found usage of unsupported fields: [...]do status do recursoEnvoyFilterdo compressor. - Padronização: alinha-se às práticas recomendadas de configuração do Envoy e às validações do
TRAFFIC_DIRECTOR. - Compatibilidade futura: garante que suas configurações funcionem perfeitamente com as próximas versões do Envoy e do Cloud Service Mesh.
Solução de problemas e suporte
Se você tiver problemas, considere o seguinte:
- Verifique novamente a sintaxe YAML e o posicionamento do campo.
- Examine os registros do proxy do Envoy para ver mensagens de erro detalhadas:
kubectl logs -l app=your-app -c istio-proxy -n your-namespace. - Reverta para a configuração
EnvoyFilteranterior, se necessário. - Entre em contato com o Google Cloud suporte para receber mais assistência.