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_length
  • content_length
  • content_type
  • disable_on_etag_header
  • remove_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_length
OR
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_length
OR
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_type
OR
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 EnvoyFilter usando o filtro do compressor com campos descontinuados, conforme descrito em Identificar configurações descontinuadas.
  • Testar:modifique o YAML dos recursos EnvoyFilter e 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 EnvoyFilter para confirmar que os avisos ou erros found 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.
  • 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 recurso EnvoyFilter do 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 EnvoyFilter anterior, se necessário.
  • Entre em contato com o Google Cloud suporte para receber mais assistência.