EnvoyFilter コンプレッサ構成を更新する

envoy.extensions.filters.http.compressor.v3.Compressor フィルタの API サーフェスの最上位フィールドの一部は、Envoy で非推奨になっています(ソース定義を参照)。これらの設定は、専用の response_direction_config.common_config ブロックと request_direction_config.common_config ブロックに移動されました。

このガイドでは、EnvoyFilter リソースをサポートされている形式に更新するために必要なコンテキストと手順について説明します。この最新の形式に移行すると、構成が後続の更新と互換性を維持し、構造の明確性が向上し、Cloud Service Mesh の最新化のベスト プラクティスに沿ったものになります。

モダナイゼーションの必要性を理解する

Envoy Compressor フィルタは、HTTP 本文のオンザフライ圧縮と解凍を提供し、帯域幅の使用量を削減してアプリケーションのパフォーマンスを向上させます。

TRAFFIC_DIRECTOR コントロール プレーンを使用する Cloud Service Mesh(コントロール プレーンの実装を確認するを参照)では、サポートされているバージョンの EnvoyFilter API を使用する必要があります。非推奨のトップレベル フィールド(content_lengthcontent_typedisable_on_etag_headerremove_accept_encoding_headerruntime_enabled など)を使用する以前のデプロイは引き続き機能しますが、信頼性のために直ちに更新することをおすすめします。

これらの非推奨フィールドを使用する場合、検証はリリース チャンネル(RapidRegularStable の順)で段階的にロールアウトされます。コントロール プレーンの検証は、デプロイが行われたタイミングに基づいて適用されます。

デプロイタイプ 検証動作
以前のデプロイ(検証が有効になる前にデプロイされたもの) コントロール プレーンは、EnvoyFilter カスタム リソース(CR)に warning ステータスを設定し、found usage of unsupported fields: [...] と読み取ります。下位互換性のため、構成は引き続き適用されますが、サポートを継続するには、サポートされているフィールドに移行する必要があります。
サポートされているデプロイ(検証が有効になった後にデプロイされたもの) コントロール プレーンは、サポートされていないフィールドの使用を厳密にブロックします。構成を適用すると、EnvoyFilter リソースで found usage of unsupported fields: [...] というメッセージのエラーが発生し、サポートされていない構成は拒否されます。

構成を更新すると、リソース ステータスの警告とエラーが解決され、構成が検証に準拠します。

非推奨の構成を特定する

次のフィールドのいずれかを typed_config ブロックの直下に設定する場合は、EnvoyFilter 構成を更新する必要があります。

  • min_content_length
  • content_length
  • content_type
  • disable_on_etag_header
  • remove_accept_encoding_header

EnvoyFilter を一覧表示するには、次のコマンドを使用します。

kubectl get envoyfilters --all-namespaces -o yaml

EnvoyFilters の envoy.filters.http.compressor パッチの出力を調べます。

構成の形式

以降のセクションでは、EnvoyFilter リソース内の Compressor Envoy フィルタの非推奨構成と最新構成の両方の例を示します。

非推奨の構成の例

EnvoyFilter のパッチ セクションが次のスニペットのようになっている場合、非推奨の形式が使用されています。

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

最新の構成の例

非推奨のフィールドは、response_direction_config オブジェクト(または該当する場合は request_direction_config)に移動する必要があります。

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"

サポートされているフィールドと移行パス

サポートされているフィールドの一覧については、EnvoyFilter を使用したデータプレーンの拡張性ガイドをご覧ください。次の表に、最も一般的な非推奨フィールドを移行するためのマッピングの詳細を示します。

非推奨のフィールドパス Modern Field Path メモ
typed_config.min_content_length typed_config.response_direction_config.common_config.min_content_length
または
typed_config.request_direction_config.common_config.min_content_length
圧縮をトリガーする最小レスポンス サイズまたは最小リクエスト サイズをそれぞれ設定します。
typed_config.content_length typed_config.response_direction_config.common_config.min_content_length
または
typed_config.request_direction_config.common_config.min_content_length
min_content_length の以前のエイリアス。新しいパスで min_content_length に名前を変更します。
typed_config.content_type typed_config.response_direction_config.common_config.content_type
または
typed_config.request_direction_config.common_config.content_type
圧縮するコンテンツ タイプの配列。
typed_config.disable_on_etag_header typed_config.response_direction_config.disable_on_etag_header レスポンスに ETag ヘッダーが含まれている場合、圧縮を無効にします。
typed_config.remove_accept_encoding_header typed_config.response_direction_config.remove_accept_encoding_header 上流にディスパッチする前に、リクエストから Accept-Encoding ヘッダーを削除します。

移行プラン

組織の標準的なデプロイとテストのベスト プラクティスに沿って EnvoyFilter 構成を更新することをおすすめします。移行の際は、次の一般的な手順を検討してください。

  • 特定: 非推奨の構成を特定するで説明されているように、非推奨のフィールドを含む Compressor フィルタを使用して、すべての EnvoyFilter リソースを見つけます。
  • テスト: EnvoyFilter リソースの YAML を変更し、変更を事前運用環境でテストします。想定されるコンテンツ タイプとサイズに対して圧縮が有効になっていることを確認します。
  • モニタリングと検証:
    • EnvoyFilter リソースのステータスを確認して、found usage of unsupported fields: [...] の警告またはエラーがなくなっていることを確認します。
    • CPU 使用率、レイテンシ、帯域幅使用量などの主要な指標をモニタリングします。
    • レスポンス ヘッダー(Content-Encoding: gzip など)を調べて、圧縮を確認します。
  • デプロイ: サポートされている EnvoyFilter 構成を本番環境のワークロードに適用します。

モダナイゼーションの特典

  • リソース ステータスの明確化: コンプレッサーの EnvoyFilter リソース ステータスから found usage of unsupported fields: [...] の警告とエラーを削除します。
  • 標準化: 現在の Envoy 構成のベスト プラクティスと TRAFFIC_DIRECTOR 検証に沿っています。
  • 将来の互換性: 今後の Envoy と Cloud Service Mesh のバージョンで構成がシームレスに動作することを保証します。

トラブルシューティングとサポート

問題が発生した場合は、次の点を考慮してください。

  • YAML 構文とフィールドの配置を再確認します。
  • Envoy プロキシのログで詳細なエラー メッセージ(kubectl logs -l app=your-app -c istio-proxy -n your-namespace)を確認します。
  • 必要に応じて、以前の EnvoyFilter 構成にロールバックします。
  • 詳しくは、 Google Cloud サポートにお問い合わせください。