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_length、content_type、disable_on_etag_header、remove_accept_encoding_header、runtime_enabled など)を使用する以前のデプロイは引き続き機能しますが、信頼性のために直ちに更新することをおすすめします。
これらの非推奨フィールドを使用する場合、検証はリリース チャンネル(Rapid、Regular、Stable の順)で段階的にロールアウトされます。コントロール プレーンの検証は、デプロイが行われたタイミングに基づいて適用されます。
| デプロイタイプ | 検証動作 |
|---|---|
| 以前のデプロイ(検証が有効になる前にデプロイされたもの) | コントロール プレーンは、EnvoyFilter カスタム リソース(CR)に warning ステータスを設定し、found usage of unsupported fields: [...] と読み取ります。下位互換性のため、構成は引き続き適用されますが、サポートを継続するには、サポートされているフィールドに移行する必要があります。 |
| サポートされているデプロイ(検証が有効になった後にデプロイされたもの) | コントロール プレーンは、サポートされていないフィールドの使用を厳密にブロックします。構成を適用すると、EnvoyFilter リソースで found usage of unsupported fields: [...] というメッセージのエラーが発生し、サポートされていない構成は拒否されます。 |
構成を更新すると、リソース ステータスの警告とエラーが解決され、構成が検証に準拠します。
非推奨の構成を特定する
次のフィールドのいずれかを typed_config ブロックの直下に設定する場合は、EnvoyFilter 構成を更新する必要があります。
min_content_lengthcontent_lengthcontent_typedisable_on_etag_headerremove_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 サポートにお問い合わせください。