一張圖快速了解 Istio 的 EnvoyFilter
EnvoyFilter簡(jiǎn)介
EnvoyFilter 提供了一種機(jī)制來(lái)定制 Istio Pilot 生成的 Envoy 配置。使用 EnvoyFilter 修改某些字段的值,添加特定的過(guò)濾器,甚至添加全新的偵聽(tīng)器、集群等等。
這個(gè)功能必須謹(jǐn)慎使用,因?yàn)椴徽_的配置可能會(huì)破壞整個(gè)網(wǎng)格的穩(wěn)定性。與其他 Istio 網(wǎng)絡(luò)對(duì)象不同,EnvoyFilter 是疊加應(yīng)用的。對(duì)于特定命名空間中的特定工作負(fù)載,可以存在任意數(shù)量的 EnvoyFilter。
這些 EnvoyFilter 被應(yīng)用的順序是:首先是配置在根命名空間中的所有 EnvoyFilter,其次是配置在工作負(fù)載命名空間中的所有匹配的 EnvoyFilter。
EnvoyFilter 的某些方面和 Istio 網(wǎng)絡(luò)子系統(tǒng)的內(nèi)部實(shí)現(xiàn)以及 Envoy 的 xDS API 有很深的聯(lián)系。雖然 EnvoyFilter 本身將保持向后兼容性,但是在 Istio 版本升級(jí)過(guò)程中,通過(guò)該機(jī)制提供的任何 Envoy 配置都應(yīng)該被仔細(xì)檢查,以確保廢棄的字段被適當(dāng)?shù)貏h除和替換。
當(dāng)多個(gè) EnvoyFilter 被綁定到給定命名空間中的相同工作負(fù)載時(shí),將按照創(chuàng)建時(shí)間的順序依次應(yīng)用。如果有多個(gè) EnvoyFilter 配置相互沖突,那么將無(wú)法確定哪個(gè)配置被應(yīng)用。
要將 EnvoyFilter 資源應(yīng)用于系統(tǒng)中的所有工作負(fù)載(sidecar 和 gateway)上,請(qǐng)?jiān)?config 根命名空間中定義該資源,不要使用 workloadSelector。
要將 EnvoyFilter 應(yīng)用到系統(tǒng)中的所有工作負(fù)載( sidecar 和網(wǎng)關(guān))的時(shí)候,建議在配置根命名空間中定義,而不要使用 workloadSelector 。
EnvoyFilter配置
其中,如果 workloadSelector 沒(méi)有被配置,此補(bǔ)丁將應(yīng)用于相同名稱空間中所有工作負(fù)載的實(shí)例;priority 的默認(rèn)值為0,取值范圍是[min-int32, max-int32], priority 為負(fù)的補(bǔ)丁將在默認(rèn)priority 之前處理,priority 為正的補(bǔ)丁將在默認(rèn)priority 之后處理。
EnvoyConfigObjectPatch配置
其中,ApplyTo可以配置的值有:
更多配置詳見(jiàn)如下思維導(dǎo)圖:
思維導(dǎo)圖
作者:萬(wàn)貓學(xué)社
歡迎關(guān)注微信公眾號(hào) :萬(wàn)貓學(xué)社