Mettre à jour les configurations du compresseur EnvoyFilter

Plusieurs champs de premier niveau dans la surface d'API du filtre envoy.extensions.filters.http.compressor.v3.Compressor sont obsolètes dans Envoy (consultez la définition de la source). Ces paramètres ont été déplacés dans des blocs response_direction_config.common_config et request_direction_config.common_config dédiés.

Ce guide fournit le contexte et les étapes nécessaires pour mettre à jour vos ressources EnvoyFilter dans un format compatible. Passer à ce format moderne vous permet de vous assurer que vos configurations restent compatibles avec les mises à jour ultérieures, de bénéficier d'une meilleure clarté structurelle et de vous aligner sur les bonnes pratiques de modernisation de Cloud Service Mesh.

Comprendre la nécessité de la modernisation

Le filtre Envoy Compressor permet de compresser et de décompresser les corps HTTP à la volée, ce qui contribue à réduire l'utilisation de la bande passante et à améliorer les performances des applications.

Cloud Service Mesh avec le plan de contrôle TRAFFIC_DIRECTOR (voir Vérifier l'implémentation du plan de contrôle) nécessite l'utilisation de la version compatible de l'API EnvoyFilter. Les anciens déploiements utilisant des champs de premier niveau obsolètes (tels que content_length, content_type, disable_on_etag_header, remove_accept_encoding_header ou runtime_enabled) continueront de fonctionner, mais il est recommandé de les mettre à jour immédiatement pour des raisons de fiabilité.

Lorsque vous utilisez ces champs obsolètes, les validations sont déployées progressivement sur les canaux de publication (Rapid, puis Regular, puis Stable). Les validations du plan de contrôle s'appliquent en fonction de la date à laquelle les déploiements ont eu lieu :

Type de déploiement Comportement de validation
Déploiements existants (déployés avant l'activation des validations) Le plan de contrôle définit l'état avertissement sur votre ressource personnalisée (CR) EnvoyFilter, qui indique found usage of unsupported fields: [...]. La configuration sera toujours appliquée pour assurer la rétrocompatibilité, mais vous devez migrer vers les champs acceptés pour continuer à bénéficier de l'assistance.
Déploiements compatibles (déployés après l'activation des validations) Le plan de contrôle bloque strictement l'utilisation des champs non compatibles. L'application de la configuration entraîne une erreur sur la ressource EnvoyFilter avec le message found usage of unsupported fields: [...]. La configuration non compatible est alors rejetée.

La mise à jour de vos configurations permet de résoudre ces avertissements et erreurs dans l'état de vos ressources, et garantit que vos configurations sont conformes aux validations.

Identifier les configurations obsolètes

Vous devez mettre à jour votre configuration EnvoyFilter si vous définissez l'un des champs suivants directement sous le bloc typed_config :

  • min_content_length
  • content_length
  • content_type
  • disable_on_etag_header
  • remove_accept_encoding_header

Vous pouvez lister vos EnvoyFilters à l'aide de la commande suivante :

kubectl get envoyfilters --all-namespaces -o yaml

Inspectez le résultat pour le correctif EnvoyFilters envoy.filters.http.compressor.

Formats de configuration

Les sections suivantes fournissent des exemples de configurations obsolètes et modernisées pour le filtre Compressor Envoy dans une ressource EnvoyFilter.

Exemple de configuration obsolète

Si la section de correctifs de votre EnvoyFilter ressemble à l'extrait de code suivant, cela signifie qu'elle utilise le format obsolète :

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

Exemple de configuration modernisée

Les champs obsolètes doivent être déplacés dans l'objet response_direction_config (ou request_direction_config, le cas échéant) :

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"

Champs et chemins de migration compatibles

Pour obtenir la liste complète des champs acceptés, consultez le guide Extensibilité du plan de données à l'aide d'EnvoyFilter. Le tableau suivant détaille le mappage pour la migration des champs obsolètes les plus courants.

Chemin d'accès du champ obsolète Chemin de champ moderne Remarques
typed_config.min_content_length typed_config.response_direction_config.common_config.min_content_length
OU
typed_config.request_direction_config.common_config.min_content_length
Définit la taille minimale de la réponse OU de la requête, respectivement, pour déclencher la compression.
typed_config.content_length typed_config.response_direction_config.common_config.min_content_length
OU
typed_config.request_direction_config.common_config.min_content_length
Ancien alias de min_content_length. Renommez-le en min_content_length dans le nouveau chemin d'accès.
typed_config.content_type typed_config.response_direction_config.common_config.content_type
OU
typed_config.request_direction_config.common_config.content_type
Tableau des types de contenu à compresser.
typed_config.disable_on_etag_header typed_config.response_direction_config.disable_on_etag_header Désactive la compression si la réponse contient un en-tête ETag.
typed_config.remove_accept_encoding_header typed_config.response_direction_config.remove_accept_encoding_header Supprime l'en-tête Accept-Encoding des requêtes avant de les distribuer en amont.

Plan de migration

Nous vous recommandons de mettre à jour vos configurations EnvoyFilter en suivant les bonnes pratiques standards de votre organisation en matière de déploiement et de tests. Voici les étapes générales à suivre lors de la migration :

  • Identifier : recherchez toutes les ressources EnvoyFilter à l'aide du filtre "Compressor" avec les champs obsolètes, comme décrit dans Identifier les configurations obsolètes.
  • Test : modifiez le fichier YAML de vos ressources EnvoyFilter et testez les modifications dans un environnement de préproduction. Vérifiez que la compression est active pour les types et tailles de contenu attendus.
  • Surveiller et valider :
    • Vérifiez l'état de votre ressource EnvoyFilter pour confirmer que les avertissements ou erreurs found usage of unsupported fields: [...] ne sont plus présents.
    • Surveillez les métriques clés : utilisation du processeur, latence et consommation de bande passante.
    • Inspectez les en-têtes de réponse (par exemple, Content-Encoding: gzip) et vérifiez la compression.
  • Déployer : appliquez les configurations EnvoyFilter compatibles aux charges de travail de production.

Avantages de la modernisation

  • Clarification de l'état des ressources : supprime les avertissements et les erreurs found usage of unsupported fields: [...] de l'état de la ressource EnvoyFilter de votre compresseur.
  • Normalisation : s'aligne sur les bonnes pratiques de configuration d'Envoy et les validations TRAFFIC_DIRECTOR actuelles.
  • Compatibilité future : garantit que vos configurations fonctionnent de manière transparente avec les prochaines versions d'Envoy et de Cloud Service Mesh.

Dépannage et assistance

Si vous rencontrez des problèmes, tenez compte des points suivants :

  • Vérifiez la syntaxe YAML et l'emplacement des champs.
  • Examinez les journaux du proxy Envoy pour obtenir des messages d'erreur détaillés : kubectl logs -l app=your-app -c istio-proxy -n your-namespace.
  • Si nécessaire, effectuez un rollback vers la configuration EnvoyFilter précédente.
  • Contactez l'assistance Google Cloud pour obtenir de l'aide.