一張圖快速了解 Istio 的 EnvoyFilter

EnvoyFilter簡介
EnvoyFilter 提供了一種機制來定制 Istio Pilot 生成的 Envoy 配置。使用 EnvoyFilter 修改某些字段的值,添加特定的過濾器,甚至添加全新的偵聽器、集群等等。

這個功能必須謹慎使用,因為不正確的配置可能會破壞整個網(wǎng)格的穩(wěn)定性。與其他 Istio 網(wǎng)絡對象不同,EnvoyFilter 是疊加應用的。對于特定命名空間中的特定工作負載,可以存在任意數(shù)量的 EnvoyFilter。

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

EnvoyFilter 的某些方面和 Istio 網(wǎng)絡子系統(tǒng)的內(nèi)部實現(xiàn)以及 Envoy 的 xDS API 有很深的聯(lián)系。雖然 EnvoyFilter 本身將保持向后兼容性,但是在 Istio 版本升級過程中,通過該機制提供的任何 Envoy 配置都應該被仔細檢查,以確保廢棄的字段被適當?shù)貏h除和替換。

當多個 EnvoyFilter 被綁定到給定命名空間中的相同工作負載時,將按照創(chuàng)建時間的順序依次應用。如果有多個 EnvoyFilter 配置相互沖突,那么將無法確定哪個配置被應用。

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

要將 EnvoyFilter 應用到系統(tǒng)中的所有工作負載( sidecar 和網(wǎng)關)的時候,建議在配置根命名空間中定義,而不要使用 workloadSelector 。

EnvoyFilter配置



其中,如果 workloadSelector 沒有被配置,此補丁將應用于相同名稱空間中所有工作負載的實例;priority 的默認值為0,取值范圍是[min-int32, max-int32], priority 為負的補丁將在默認priority 之前處理,priority 為正的補丁將在默認priority 之后處理。

EnvoyConfigObjectPatch配置



其中,ApplyTo可以配置的值有:



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

思維導圖



作者:萬貓學社


歡迎關注微信公眾號 :萬貓學社