Service Mesh (ASM) では、VirtualService と EnvoyFilter の両方を使用して、リクエストヘッダーとレスポンスヘッダーをカスタマイズできます。ただし、それらの使用シナリオと柔軟性は異なります。このトピックでは、VirtualService と EnvoyFilter CustomResourceDefinitions (CRD) を使用してリクエストヘッダーとレスポンスヘッダーをカスタマイズする場合の違いについて説明します。
VirtualService と EnvoyFilter の比較
VirtualService は、ルーティング関連の単純なリクエストヘッダーとレスポンスヘッダーの変更に適していますが、EnvoyFilter は、Envoy プロキシを詳細にカスタマイズする機能を提供します。ビジネス要件と次の表の比較に基づいて、どちらかを選択できます。
項目 | VirtualService | EnvoyFilter |
抽象化レベル | Istio のルーティングルールでリクエストヘッダーとレスポンスヘッダーの追加または削除を直接定義できる、より高レベルの抽象化を提供します。これらのルーティングルールは理解と定義が容易であり、リクエストヘッダーとレスポンスヘッダーを設定するための推奨される方法です。 | Envoy プロキシの構成を直接管理できる、より低レベルのインターフェイスを提供します。EnvoyFilter を使用すると、カスタム Lua スクリプトを作成したり、他の Envoy 拡張機能を使用して複雑なロジックを実装したりできます。この方法はより強力で柔軟性がありますが、より複雑でもあります。Envoy 構成の深い理解が必要です。 |
使いやすさ | Istio の CRD に従っているため、構成と理解が容易です。 | 構成が複雑で、Envoy の内部動作原理をよく理解している必要があります。Envoy フィルターを正しく記述するには、Envoy 構成 API に精通している必要があります。そのため、エラーが発生する可能性が高くなります。 |
適用範囲 | VirtualService は、リクエストヘッダーとレスポンスヘッダーの単純な追加、変更、削除など、ほとんどの一般的なヘッダー操作要件を満たすことができます。たとえば、ヘッダー値を固定の静的文字列に設定できます。さらに、組み込み式を使用して、リクエストヘッダー値とレスポンスヘッダー値を動的に生成できます。これらの式は通常 | EnvoyFilter は、条件チェック、複雑なデータ変換、外部サービスの呼び出しなど、VirtualService では実装できない高度なカスタマイズと複雑な操作をサポートしています。リクエストヘッダーとレスポンスヘッダーのカスタム値は、コードによって実装される動的値にすることができます。 |
使用シナリオ | ASM は、リクエストまたはレスポンスでヘッダーを追加、削除、または変更するだけで済み、これらの操作は特定のルーティングルールに関連付けられています。 | ASM は、詳細なリクエスト操作またはレスポンス操作を実行する必要があるか、Istio のルーティングルールを変更せずにヘッダーをグローバルに変更する必要があります。 |
参照
VirtualService: VirtualService CRD を使用したリクエストヘッダーとレスポンスヘッダーのカスタマイズ
EnvoyFilter: EnvoyFilter CRD を使用したリクエストヘッダーとレスポンスヘッダーのカスタマイズ