すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Service Mesh:VirtualService CRD を使用したリクエストヘッダーとレスポンスヘッダーのカスタマイズ

最終更新日:Jan 13, 2025

Service Mesh(ASM)では、VirtualService CustomResourceDefinition(CRD)の headers フィールドを使用して、リクエストヘッダーとレスポンスヘッダーをカスタマイズできます。 VirtualService CRD を使用すると、ルートレベルで HTTP ヘッダーを追加、変更、または削除できます。 これにより、ヘッダー情報のカスタマイズされた処理が実装されます。

前提条件

HTTPBin アプリケーションがデプロイされています。 詳細については、「HTTPBin アプリケーションのデプロイ」をご参照ください。

ステップ 1:VirtualService CRD を定義する

VirtualService は、リクエストヘッダーとレスポンスヘッダーの単純な追加、変更、削除など、ほとんどの一般的なヘッダー操作要件を満たすことができます。 たとえば、ヘッダー値を固定の静的文字列に設定できます。 さらに、組み込み式を使用して、リクエストヘッダー値とレスポンスヘッダー値を動的に生成できます。 これらの式は通常 % 記号で囲まれ、リクエスト属性などのさまざまな動的コンテンツを参照できます。 ログにアクセスするために使用されるすべての HTTP コマンド演算子は、カスタムリクエストヘッダーまたはレスポンスヘッダーで指定できます。 たとえば、%UPSTREAM_CLUSTER% はサービスプロバイダーの名前を示します。 詳細については、「Command Operators」をご参照ください。

ルーティングルールに基づいて、リクエストとレスポンスの HTTP ヘッダーをカスタマイズできます。 これは、トレース、ロギング、セキュリティヘッダーの追加、特定のサービスロジックの実装などのシナリオで役立ちます。 次のセクションでは、VirtualService の構成例を示します。 この例では、リクエストヘッダーとレスポンスヘッダーをカスタマイズする方法を示します。

種類

説明

リクエストヘッダー

  • x-custom-request-header リクエストヘッダーを追加し、値を "custom-value" に設定します。

  • x-another-request-header リクエストヘッダーを "another-value" に設定します。 このリクエストヘッダーが既に存在する場合は、その値が上書きされます。 このリクエストヘッダーが存在しない場合は、追加されます。

  • x-unwanted-header リクエストヘッダーを削除します。

レスポンスヘッダー

  • x-custom-response-header レスポンスヘッダーを追加し、値を "custom-response-value" に設定します。

  • x-another-response-header レスポンスヘッダーを "another-response-value" に設定します。 このレスポンスヘッダーが既に存在する場合は、その値が上書きされます。 このレスポンスヘッダーが存在しない場合は、追加されます。

  • x-unwanted-response-heade レスポンスヘッダーを削除します。

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: httpbin-vs
spec:
  gateways:
    - httpbin
  hosts:
    - '*'
  http:
  - route:
    - destination:
        host: httpbin
        port:
          number: 8000
      weight: 100
    headers:
      request:
        add:
          x-custom-request-header: "custom-value" # カスタムリクエストヘッダーを追加します。
          x-dynamic-request-header: "%START_TIME%" # カスタムリクエストヘッダーを追加します。
        set:
          x-another-request-header: "another-value" # リクエストヘッダーを変更または設定します。
        remove:
        -x-unwanted-header # リクエストヘッダーを削除します。
      response:
        add:
          x-custom-response-header: "custom-response-value" # カスタムレスポンスヘッダーを追加します。
        set:
          x-another-response-header: "another-response-value" # レスポンスヘッダーを変更または設定します。
        remove:
        -x-unwanted-response-header # レスポンスヘッダーを削除します。
説明

VirtualService CRD を使用して、HTTP ヘッダーを設定および変更できます。 ただし、Envoy がアクセスログのデフォルト設定を保持している場合、Envoy アクセスログにはこれらの変更は記録されません。 Envoy アクセスログにカスタムヘッダーを記録する場合は、Envoy のログ形式を変更する必要があります。

ステップ 2:アクセスログでカスタムリクエストヘッダーとレスポンスヘッダーを表示する

ASM では、ログ形式をカスタマイズできます。 アクセスログのカスタム式は、リクエストヘッダー、レスポンスヘッダー、および Envoy の組み込み値から値を取得できます。 詳細については、「アクセスログの形式のカスタマイズ」をご参照ください。

次の表に、アクセスログにコンテンツを表示するために使用される 3 つの新しいフィールドを示します。

フィールド

種類

my-x-custom-request-header

リクエスト属性

%REQ(x-custom-request-header)%

my-x-dynamic-request-header

リクエスト属性

%REQ(x-dynamic-request-header)%

my-x-custom-response-header

レスポンス属性

%RESP(x-custom-response-header)%

説明

VirtualService で、レスポンスヘッダーの変更がロギング後に有効になる場合、これらの変更されたレスポンスヘッダーはアクセスログに記録されません。

  • ゲートウェイ ポッドのアクセスログを確認すると、次のような内容が表示されます。

    {
        "bytes_received": "9",
        "bytes_sent": "33",
        "response_code": "200",
        "my-x-custom-request-header": "custom-value",
        "my-x-dynamic-request-header":"2024-01-16T14:49:21.187Z"
        "my-x-custom-response-header": "custom-response-value"
    }
  • HTTPBin ポッドのアクセスログを確認すると、次のような内容が表示されます。

    {
        "bytes_received": "9",
        "bytes_sent": "33",
        "response_code": "200",
        "my-x-custom-request-header": "custom-value",
        "my-x-dynamic-request-header": "2024-01-16T14:49:21.187Z"
        "my-x-custom-response-header": "-"
    }