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必讀技術書籍