全部產品
Search
文件中心

Alibaba Cloud Service Mesh:通過VirtualService資源自訂要求標頭和回應標頭

更新時間:Jun 30, 2024

ASM支援通過Virtual Service的headers欄位來自訂要求標頭(request headers)和回應標頭(response headers)。Virtual Service允許您在路由層級添加、修改或刪除HTTP頭資訊,從而實現對頭資訊的定製化處理。

前提條件

部署httpbin應用

步驟一:定義VirtualService資源

VirtualService可以滿足大多數常見的頭部操作需求,如簡單地添加、修改或刪除要求標頭和回應標頭。例如,它不僅支援將頭部值設定為固定的靜態字串,還能夠通過內建運算式動態產生請求和回應標頭部的值。這些運算式通常使用%符號包裹,可以引用請求屬性等不同的動態內容。用於訪問日誌記錄的所有HTTP命令運算子都可以在自訂請求或響應標題中指定,例如%UPSTREAM_CLUSTER%表示服務提供者的名稱。更多資訊,請參見config-access-log-command-operators

您可以基於路由規則定製請求和響應的HTTP頭部資訊。這對於跟蹤、日誌記錄、添加安全頭部或實施特定的商務邏輯等情況非常有用。以下是一個Virtual Service的配置樣本,說明如何自訂要求標頭和回應標頭。配置說明如下:

類型

說明

要求標頭

  • 添加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 # 移除回應標頭。
說明

雖然Virtual Service可以設定和修改HTTP頭部資訊,但這些更改對於Envoy Access Logs的預設配置可能不可見。如果您想在Envoy的Access Logs中記錄這些自訂頭部資訊,需要修改Envoy的日誌格式。

步驟二:通過日誌查看自訂請求和響應內容

ASM提供自訂日誌格式的功能,支援從請求Header、響應Header、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)%

說明

在Virtual Service中,若回應標頭的配置修改在日誌記錄操作之後生效執行,則這些修改後的回應標頭資訊將不會出現在Access Logs中。

  • 查看網關Pod的日誌內容,可以看到類似如下內容:

    {
        "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 Pod的日誌內容,可以看到類似如下內容:

    {
        "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": "-"
    }