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_lengthcontent_lengthcontent_typedisable_on_etag_headerremove_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_lengthOU 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_lengthOU 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_typeOU 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
EnvoyFilteret 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
EnvoyFilterpour confirmer que les avertissements ou erreursfound 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.
- Vérifiez l'état de votre ressource
- Déployer : appliquez les configurations
EnvoyFiltercompatibles 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 ressourceEnvoyFilterde votre compresseur. - Normalisation : s'aligne sur les bonnes pratiques de configuration d'Envoy et les validations
TRAFFIC_DIRECTORactuelles. - 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
EnvoyFilterprécédente. - Contactez l'assistance Google Cloud pour obtenir de l'aide.