一張圖快速瞭解 Istio 的 EnvoyFilter

2023-06-13 12:01:30

EnvoyFilter簡介

EnvoyFilter 提供了一種機制來客製化 Istio Pilot 生成的 Envoy 設定。使用 EnvoyFilter 修改某些欄位的值,新增特定的過濾器,甚至新增全新的偵聽器、叢集等等。

這個功能必須謹慎使用,因為不正確的設定可能會破壞整個網格的穩定性。與其他 Istio 網路物件不同,EnvoyFilter 是疊加應用的。對於特定名稱空間中的特定工作負載,可以存在任意數量的 EnvoyFilter。

這些 EnvoyFilter 被應用的順序是:首先是設定在根名稱空間中的所有 EnvoyFilter,其次是設定在工作負載名稱空間中的所有匹配的 EnvoyFilter。

EnvoyFilter 的某些方面和 Istio 網路子系統的內部實現以及 Envoy 的 xDS API 有很深的聯絡。雖然 EnvoyFilter 本身將保持向後相容性,但是在 Istio 版本升級過程中,通過該機制提供的任何 Envoy 設定都應該被仔細檢查,以確保廢棄的欄位被適當地刪除和替換。

當多個 EnvoyFilter 被繫結到給定名稱空間中的相同工作負載時,將按照建立時間的順序依次應用。如果有多個 EnvoyFilter 設定相互衝突,那麼將無法確定哪個設定被應用。

要將 EnvoyFilter 資源應用於系統中的所有工作負載(sidecar 和 gateway)上,請在 config 根名稱空間中定義該資源,不要使用 workloadSelector。

要將 EnvoyFilter 應用到系統中的所有工作負載( sidecar 和閘道器)的時候,建議在設定根名稱空間中定義,而不要使用 workloadSelector 。

文章持續更新,微信搜尋「萬貓學社」第一時間閱讀,關注後回覆「電子書」,免費獲取12本Java必讀技術書籍。

EnvoyFilter設定

屬性 資料型別 說明 是否必填
workloadSelector WorkloadSelector 用於選擇應用此修補程式的pod或虛擬機器器
configPatches EnvoyConfigObjectPatch[] 具有匹配條件的修補程式
priority int32 定義了修補程式集在上下文中應用順序的優先順序

其中,如果 workloadSelector 沒有被設定,此修補程式將應用於相同名稱空間中所有工作負載的範例; priority 的預設值為0,取值範圍是[min-int32, max-int32], priority 為負的修補程式將在預設priority 之前處理,priority 為正的修補程式將在預設priority 之後處理。

EnvoyConfigObjectPatch設定

屬性 資料型別 說明 是否必填
applyTo ApplyTo 指定在Envoy設定中應用修補程式的位置
match EnvoyConfigObjectMatch 用於匹配監聽器、路由或叢集
patch Patch 與操作一起應用的修補程式。

其中,ApplyTo可以設定的值有:

名稱 說明
LISTENER 將修補程式應用於監聽器。
FILTER_CHAIN 將修補程式應用於過濾器鏈。
NETWORK_FILTER 應用修補程式到網路過濾器鏈,修改現有的過濾器或新增一個新的過濾器。
HTTP_FILTER 將修補程式應用於HTTP連線管理器中的HTTP過濾器鏈,以修改現有的過濾器或新增新的過濾器。
ROUTE_CONFIGURATION 將修補程式應用於HTTP連線管理器內的Route設定。
VIRTUAL_HOST 將修補程式應用於路由設定內部的虛擬主機。
HTTP_ROUTE 在路由設定中將修補程式應用於匹配的虛擬主機內的路由物件。
CLUSTER 將修補程式應用到叢集。
EXTENSION_CONFIG 在ECDS輸出中應用修補程式或新增擴充套件設定。
BOOTSTRAP 將修補程式應用於初始化設定。

更多設定詳見如下思維導圖:

思維導圖

微信公眾號:萬貓學社

微信掃描二維條碼

關注後回覆「電子書」

獲取12本Java必讀技術書籍