一張圖快速瞭解 Istio 的 EnvoyFilter

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 將補丁應用於初始化配置。

更多配置詳見如下思維導圖:

思維導圖

EnvoyFilter@萬貓學社

微信公衆號:萬貓學社

微信掃描二維碼

關注後回覆「電子書」

獲取12本Java必讀技術書籍

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章