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_length
  • content_length
  • content_type
  • disable_on_etag_header
  • remove_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_length
ODER
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_length
ODER
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_type
ODER
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 die found 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.
  • 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 Kompressors EnvoyFilter entfernt.
  • 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.