Kompressorkonfigurationen für EnvoyFilter aktualisieren
Mehrere Felder der obersten Ebene in der API-Oberfläche des envoy.extensions.filters.http.compressor.v3.Compressor-Filters sind in Envoy als veraltet markiert (siehe Quelldefinition).
Diese Einstellungen wurden in separate Blöcke response_direction_config.common_config und request_direction_config.common_config verschoben.
In diesem Leitfaden finden Sie den Kontext und die Schritte, die erforderlich sind, um Ihre EnvoyFilter-Ressourcen in ein unterstütztes Format zu aktualisieren. Durch die Umstellung auf dieses moderne Format bleiben Ihre Konfigurationen mit nachfolgenden Updates kompatibel, profitieren von einer verbesserten strukturellen Klarheit und entsprechen den Best Practices für die Modernisierung von Cloud Service Mesh.
Gründe für die Modernisierung
Der Envoy Compressor-Filter bietet die On-the-fly-Komprimierung und ‑Dekomprimierung von HTTP-Bodys. So lässt sich die Bandbreitennutzung reduzieren und die Anwendungsleistung verbessern.
Für Cloud Service Mesh mit der TRAFFIC_DIRECTOR-Steuerungsebene (siehe Implementierung der Steuerungsebene prüfen) muss die unterstützte Version der EnvoyFilter API verwendet werden. Legacy-Bereitstellungen mit eingestellten Feldern der obersten Ebene (z. B. content_length, content_type, disable_on_etag_header, remove_accept_encoding_header oder runtime_enabled) funktionieren weiterhin, sollten aber aus Gründen der Zuverlässigkeit sofort aktualisiert werden.
Wenn Sie diese verworfenen Felder verwenden, werden Validierungen schrittweise in den Release-Versionen eingeführt (Rapid, dann Regular, dann Stable). Die Validierungen der Steuerungsebene werden je nach Zeitpunkt der Bereitstellungen angewendet:
| Bereitstellungstyp | Validierungsverhalten |
|---|---|
| Alte Bereitstellungen (vor der Aktivierung von Validierungen bereitgestellt) | Die Steuerungsebene legt für Ihre benutzerdefinierte EnvoyFilter-Ressource (CR) den Status Warnung fest: found usage of unsupported fields: [...]. Die Konfiguration wird aus Gründen der Abwärtskompatibilität weiterhin angewendet. Sie müssen jedoch zu den unterstützten Feldern migrieren, um weiterhin Support zu erhalten. |
| Unterstützte Bereitstellungen (Bereitstellung nach Aktivierung der Validierungen) | Die Steuerungsebene blockiert die Verwendung nicht unterstützter Felder strikt. Wenn Sie die Konfiguration anwenden, führt das zu einem Fehler für die EnvoyFilter-Ressource mit der Meldung: found usage of unsupported fields: [...]. Die nicht unterstützte Konfiguration wird abgelehnt. |
Wenn Sie Ihre Konfigurationen aktualisieren, werden diese Warnungen und Fehler im Ressourcenstatus behoben und Ihre Konfigurationen entsprechen den Validierungen.
Verworfene Konfigurationen identifizieren
Ihre EnvoyFilter-Konfiguration muss aktualisiert werden, wenn Sie eines der folgenden Felder direkt unter dem typed_config-Block festlegen:
min_content_lengthcontent_lengthcontent_typedisable_on_etag_headerremove_accept_encoding_header
Sie können Ihre Envoy-Filter mit dem folgenden Befehl auflisten:
kubectl get envoyfilters --all-namespaces -o yaml
Prüfen Sie die Ausgabe auf das Patchen von EnvoyFilters envoy.filters.http.compressor.
Konfigurationsformate
In den folgenden Abschnitten finden Sie Beispiele für die alte und die moderne Konfiguration des Compressor-Envoy-Filters in einer EnvoyFilter-Ressource.
Beispiel für eine verworfene Konfiguration
Wenn der Patch-Abschnitt Ihres EnvoyFilter dem folgenden Snippet ähnelt, wird das eingestellte Format verwendet:
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
Beispiel für die modernisierte Konfiguration
Die eingestellten Felder müssen in das Objekt response_direction_config (oder gegebenenfalls request_direction_config) verschoben werden:
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"
Unterstützte Felder und Migrationspfade
Eine vollständige Liste der unterstützten Felder finden Sie im Leitfaden Data plane extensibility using EnvoyFilter. In der folgenden Tabelle finden Sie die Zuordnung für die Migration der häufigsten eingestellten Felder.
| Nicht mehr unterstützter Feldpfad | Moderner Feldpfad | Hinweise |
|---|---|---|
typed_config.min_content_length |
typed_config.response_direction_config.common_config.min_content_lengthODER typed_config.request_direction_config.common_config.min_content_length |
Legt die Mindestgröße für Antworten bzw. Anfragen fest, um die Komprimierung auszulösen. |
typed_config.content_length |
typed_config.response_direction_config.common_config.min_content_lengthODER typed_config.request_direction_config.common_config.min_content_length |
Früherer Alias für min_content_length. Benennen Sie die Datei im neuen Pfad in min_content_length um. |
typed_config.content_type |
typed_config.response_direction_config.common_config.content_typeODER typed_config.request_direction_config.common_config.content_type |
Array von Inhaltstypen, die komprimiert werden sollen. |
typed_config.disable_on_etag_header |
typed_config.response_direction_config.disable_on_etag_header |
Deaktiviert die Komprimierung, wenn die Antwort einen ETag-Header enthält. |
typed_config.remove_accept_encoding_header |
typed_config.response_direction_config.remove_accept_encoding_header |
Entfernt den Accept-Encoding-Header aus Anfragen, bevor sie an das Upstream-System weitergeleitet werden. |
Migrationsplan
Wir empfehlen, die EnvoyFilter-Konfigurationen gemäß den Standard-Best Practices Ihrer Organisation für Bereitstellung und Tests zu aktualisieren. Beachten Sie bei der Migration die folgenden allgemeinen Schritte:
- Identifizieren:Suchen Sie alle
EnvoyFilter-Ressourcen mit dem Compressor-Filter mit eingestellten Feldern, wie unter Eingestellte Konfigurationen identifizieren beschrieben. - Testen:Ändern Sie das YAML Ihrer
EnvoyFilter-Ressourcen und testen Sie die Änderungen in einer Pre-Production-Umgebung. Prüfen Sie, ob die Komprimierung für die erwarteten Inhaltstypen und ‑größen aktiv ist. - Überwachen und validieren:
- Prüfen Sie den Status Ihrer
EnvoyFilter-Ressource, um zu bestätigen, dass diefound usage of unsupported fields: [...]-Warnungen oder ‑Fehler nicht mehr vorhanden sind. - Wichtige Messwerte überwachen: CPU-Nutzung, Latenz und Bandbreitenverbrauch.
- Prüfen Sie die Antwortheader (z. B.
Content-Encoding: gzip) und bestätigen Sie die Komprimierung.
- Prüfen Sie den Status Ihrer
- Bereitstellen:Wenden Sie die unterstützten
EnvoyFilter-Konfigurationen auf Produktionsarbeitslasten an.
Vorteile der Modernisierung
- Klarheit des Ressourcenstatus:
found usage of unsupported fields: [...]-Warnungen und ‑Fehler werden aus dem Ressourcenstatus Ihres KompressorsEnvoyFilterentfernt. - Standardisierung: Entspricht den aktuellen Best Practices für die Envoy-Konfiguration und den
TRAFFIC_DIRECTOR-Validierungen. - Zukunftskompatibilität: Ihre Konfigurationen funktionieren nahtlos mit zukünftigen Envoy- und Cloud Service Mesh-Versionen.
Fehlerbehebung und Support
Wenn Probleme auftreten, sollten Sie Folgendes beachten:
- Überprüfen Sie die YAML-Syntax und die Feldplatzierung noch einmal.
- Prüfen Sie die Proxy-Logs von Envoy auf detaillierte Fehlermeldungen:
kubectl logs -l app=your-app -c istio-proxy -n your-namespace. - Führen Sie bei Bedarf ein Rollback zur vorherigen
EnvoyFilter-Konfiguration durch. - Wenden Sie sich an den Google Cloud -Support, um weitere Unterstützung zu erhalten.