Aggiorna le configurazioni del compressore EnvoyFilter

Diversi campi di primo livello nell'interfaccia API del filtro envoy.extensions.filters.http.compressor.v3.Compressor sono obsoleti in Envoy (vedi la definizione dell'origine). Queste impostazioni sono state spostate in blocchi dedicati response_direction_config.common_config e request_direction_config.common_config.

Questa guida fornisce il contesto e i passaggi necessari per aggiornare le tue risorse EnvoyFilter a un formato supportato. Il passaggio a questo formato moderno garantisce che le tue configurazioni rimangano compatibili con gli aggiornamenti successivi, usufruiscano di una migliore chiarezza strutturale e siano in linea con le best practice di modernizzazione di Cloud Service Mesh.

Comprendere la necessità di modernizzazione

Il filtro Envoy Compressor fornisce la compressione e la decompressione al volo dei corpi HTTP, contribuendo a ridurre l'utilizzo della larghezza di banda e a migliorare le prestazioni dell'applicazione.

Cloud Service Mesh con il control plane TRAFFIC_DIRECTOR (vedi Controllare l'implementazione del control plane) richiede l'utilizzo della versione supportata dell'API EnvoyFilter. Le implementazioni legacy che utilizzano campi di primo livello deprecati (come content_length, content_type, disable_on_etag_header, remove_accept_encoding_header o runtime_enabled) continueranno a funzionare, ma è consigliabile aggiornarle immediatamente per motivi di affidabilità.

Quando utilizzi questi campi ritirati, le convalide vengono implementate progressivamente nei canali di rilascio (Rapid, poi Regular e poi Stable). Le convalide del control plane vengono applicate in base alla data di deployment:

Tipo di deployment Comportamento di convalida
Deployment legacy (eseguiti prima dell'attivazione delle convalide) Il control plane imposta lo stato warning sulla risorsa personalizzata (CR) EnvoyFilter che indica: found usage of unsupported fields: [...]. La configurazione verrà comunque applicata per la compatibilità con le versioni precedenti, ma devi eseguire la migrazione ai campi supportati per garantire il supporto continuo.
Deployment supportati (eseguiti dopo l'attivazione delle convalide) Il control plane blocca rigorosamente l'utilizzo di campi non supportati. L'applicazione della configurazione genera un errore nella risorsa EnvoyFilter con il messaggio: found usage of unsupported fields: [...] e la configurazione non supportata verrà rifiutata.

L'aggiornamento delle configurazioni risolve questi avvisi ed errori nello stato delle risorse e garantisce che le configurazioni siano conformi alle convalide.

Identificare le configurazioni ritirate

La configurazione di EnvoyFilter deve essere aggiornata se imposti uno dei seguenti campi direttamente sotto il blocco typed_config:

  • min_content_length
  • content_length
  • content_type
  • disable_on_etag_header
  • remove_accept_encoding_header

Puoi elencare i tuoi EnvoyFilter utilizzando:

kubectl get envoyfilters --all-namespaces -o yaml

Controlla l'output per la patch EnvoyFilters envoy.filters.http.compressor.

Formati di configurazione

Le sezioni seguenti forniscono esempi di configurazioni sia deprecate che modernizzate per il filtro Compressor Envoy all'interno di una risorsa EnvoyFilter.

Esempio di configurazione ritirata

Se la sezione delle patch del tuo EnvoyFilter è simile al seguente snippet, utilizza il formato ritirato:

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

Esempio di configurazione modernizzata

I campi ritirati devono essere spostati nell'oggetto response_direction_config (o request_direction_config, se applicabile):

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"

Campi e percorsi di migrazione supportati

Per un elenco completo dei campi supportati, consulta la guida Estensibilità del piano dati tramite EnvoyFilter. La tabella seguente descrive nel dettaglio il mapping per la migrazione dei campi ritirati più comuni.

Percorso campo deprecato Percorso campo moderno Note
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
Imposta le dimensioni minime della risposta O della richiesta rispettivamente per attivare la compressione.
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 precedente per min_content_length. Rinomina in min_content_length nel nuovo percorso.
typed_config.content_type typed_config.response_direction_config.common_config.content_type
OR
typed_config.request_direction_config.common_config.content_type
Array di tipi di contenuti da comprimere.
typed_config.disable_on_etag_header typed_config.response_direction_config.disable_on_etag_header Disabilita la compressione se la risposta contiene un'intestazione ETag.
typed_config.remove_accept_encoding_header typed_config.response_direction_config.remove_accept_encoding_header Rimuove l'intestazione Accept-Encoding dalle richieste prima di inviarle all'upstream.

Piano di migrazione

Ti consigliamo di aggiornare le configurazioni di EnvoyFilter seguendo le best practice standard di deployment e test della tua organizzazione. Considera questi passaggi generali durante la migrazione:

  • Identifica:trova tutte le risorse EnvoyFilter utilizzando il filtro Compressor con i campi ritirati come descritto in Identificare le configurazioni ritirate.
  • Testare: modifica il file YAML delle tue risorse EnvoyFilter e testa le modifiche in un ambiente di pre-produzione. Verifica che la compressione sia attiva per i tipi e le dimensioni dei contenuti previsti.
  • Monitoraggio e convalida:
    • Controlla lo stato della risorsa EnvoyFilter per verificare che gli avvisi o gli errori found usage of unsupported fields: [...] non siano più presenti.
    • Monitora le metriche chiave: utilizzo della CPU, latenza e consumo di larghezza di banda.
    • Ispeziona le intestazioni di risposta (ad esempio Content-Encoding: gzip) e conferma la compressione.
  • Deployment:applica le configurazioni EnvoyFilter supportate ai carichi di lavoro di produzione.

Vantaggi della modernizzazione

  • Chiarezza dello stato delle risorse: rimuove found usage of unsupported fields: [...] avvisi ed errori dallo stato della risorsa EnvoyFilter del compressore.
  • Standardizzazione: si allinea alle best practice di configurazione di Envoy e alle convalide TRAFFIC_DIRECTOR.
  • Compatibilità futura: garantisce che le configurazioni funzionino perfettamente con le versioni future di Envoy e Cloud Service Mesh.

Risoluzione dei problemi e assistenza

Se riscontri problemi, tieni presente quanto segue:

  • Controlla la sintassi YAML e il posizionamento dei campi.
  • Esamina i log del proxy Envoy per visualizzare messaggi di errore dettagliati: kubectl logs -l app=your-app -c istio-proxy -n your-namespace.
  • Se necessario, esegui il rollback alla configurazione EnvoyFilter precedente.
  • Contatta l' Google Cloud assistenza per ulteriore supporto.