全部產品
Search
文件中心

Alibaba Cloud Service Mesh:自訂要求標頭和回應標頭

更新時間:Jun 30, 2024

Service MeshASM中,VirtualService和EnvoyFilter都可以用來自訂要求標頭和回應標頭,但它們的使用情境和靈活性存在差異。本文介紹使用VirtualService和EnvoyFilter這兩種資源自訂要求標頭和回應標頭的差異。

資源對比

VirtualService更適合簡單、路由相關的請求和回應標頭部修改,而EnvoyFilter提供對Envoy代理進行深度定製的能力。您可以根據實際需求和下表進行權衡。

比較項

VirtualService

EnvoyFilter

抽象層級

提供一種較進階別的抽象,允許您在Istio的路由規則中直接定義要求標頭和回應標頭的添加或移除。這些路由規則更加易於理解和定義,是佈建要求頭和回應標頭的推薦方式。

提供一種較低層級的介面,允許您直接操作Envoy代理的配置。通過EnvoyFilter,您可以編寫自訂的Lua指令碼或者使用其他Envoy擴充來實現複雜的邏輯。這種方法更加強大和靈活,但也更加複雜,需要對Envoy配置有較深的瞭解。

易用性

遵循Istio的自訂資源定義(CRD),更易於配置和理解。

配置較為複雜,需要對Envoy的內部工作原理有一定的瞭解。正確編寫EnvoyFilter需要對Envoy配置API的熟悉度較高,因此它的錯誤率也較高。

功能範圍

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

EnvoyFilter可以實現VirtualService無法實現的進階自訂和複雜的操作,例如執行條件檢查、複雜的資料轉換或調用外部服務。支援自訂值為通過代碼實現的動態值。

適用情境

只需要在請求或響應中添加、移除或修改頭部,並且這些操作與特定的路由規則相關聯。

執行更深層次的請求或響應操作,或需要在不修改Istio的路由規則的情況下全域地改變頭部。

相關文檔