ASM支援通過Envoy過濾器模板(EnvoyFilterTemplate)和Envoy過濾器模板綁定(EnvoyFilterTemplateBinding)建立Envoy過濾器。同一個Envoy過濾器模板可以被用來建立多個Envoy過濾器,應用於不同的工作負載和命名空間,從而提高配置的複用性和管理效率。
配置樣本
以下配置指定了一個Envoy過濾器模板(EnvoyFilterTemplate),該模板指定了一個適用於1.19及以上Istio版本的Envoy過濾器模板內容。同時指定了一個Envoy過濾器模板綁定(EnvoyFilterTemplateBinding),該模板綁定將建立一個生效在istio-system命名空間(即全域生效)的Envoy過濾器(EnvoyFilter),該Envoy過濾器生效在所有1.20版本的資料面代理中,過濾器內容取自上述Envoy過濾器模板中定義的適用於1.19以及以上版本的Envoy過濾器模板。
以上配置最終會指定建立出如下的Envoy過濾器:
EnvoyFilterTemplate欄位說明
EnvoyFilterTemplate定義了一系列的Envoy過濾器(EnvoyFilter)內容。這些Envoy過濾器分別適用於不同的Istio版本。由於Envoy過濾器存在版本相容性風險,自行建立Envoy過濾器對網格的升級與維護都造成了較大挑戰。通過EnvoyFilterTemplate,可以針對不同的Istio版本針對性地定製不同的Envoy過濾器內容。當對資料面代理進行版本升級後,可以讓適用於新版本的Envoy過濾器生效在新版本代理中,降低相容性風險。
EnvoyFilterTemplateSpec
EnvoyFilterTemplateSpec是EnvoyFilterTemplate的核心配置,即spec部分。
欄位 | 類型 | 是否必選 | 說明 |
templates | 是 | 指定一系列Envoy過濾器模板值。每個模板值都有適配的Istio版本或版本範圍。模板值之間適配的Istio版本範圍不能有重合的部分。 |
TemplateValue
每個TemplateValue指定一個Envoy過濾器的YAML內容以及該Envoy過濾器對應的適配Istio版本或版本範圍。
欄位 | 類型 | 是否必選 | 說明 |
istioVersion | string | 是 | Envoy過濾器適配的Istio版本或版本範圍。版本必須為Istio的Minor版本(例如1.19、1.20),可以使用短劃線(-)串連兩個版本,表示在指定的版本範圍內Envoy過濾器均可生效。 當表達版本範圍時,允許使用 樣本:
|
value | string | 是 | Envoy過濾器的YAML內容,必須為YAML字串,同時YAML需要符合Envoy過濾器欄位定義。 在TemplateValue中定義的Envoy過濾器內容,不需要包含metadata、workloadSelector欄位,這些欄位會在實際建立Envoy過濾器時,根據Envoy過濾器模板綁定的定義進行填充。 |
EnvoyFilterTemplateBinding欄位說明
EnvoyFilterTemplateBinding關聯到一個EnvoyFilterTemplate,並指明EnvoyFilterTemplate中定義的Envoy過濾器內容需要生效到哪些工作負載內、哪些版本的資料面代理中。
EnvoyFilterTemplateBindingSpec
EnvoyFilterTemplateBindingSpec是EnvoyFilterTemplateBinding的核心配置,即spec部分。
欄位 | 類型 | 是否必選 | 說明 |
templateRef | 是 | 模板引用,指定EnvoyFilterTemplateBinding所引用的EnvoyFilterTemplate以及綁定的版本資訊。 | |
workloads | 否 | 指定需要為哪些工作負載建立Envoy過濾器。 |
EnvoyFilterTemplateRef
欄位 | 類型 | 是否必選 | 說明 |
name | string | 是 | 引用的EnvoyFilterTemplate的名稱。 |
istioVersion | string | 是 | 指定要為哪些版本的資料面代理生效Envoy過濾器。 版本必須為Istio的Minor版本(例如1.19、1.20),可以使用短劃線(-)串連兩個版本,表示在指定的版本範圍內Envoy過濾器均可生效。 當表達版本範圍時,允許使用 樣本:
|
WorkloadRef
WorkloadRef定義了一個Envoy過濾器的生效範圍,能夠指定Envoy過濾器生效在哪些工作負載上。
欄位 | 類型 | 是否必選 | 說明 |
namespace | string | 是 | 命名空間名稱,指定在哪個命名空間建立Envoy過濾器。 |
name | string | 否 | 工作負載名稱,此名稱將決定最終建立的Envoy過濾器的名稱,建議填寫為Service或Deployment的名稱。 當Envoy過濾器生效在整個命名空間時,無需填寫。 |
kind | string | 否 | 用於區分Envoy過濾器綁定的工作負載的類型,僅做展示區分用途。 |
selector | map<string, string> | 否 | 指定一系列的標籤,用作選擇Pod的條件,將轉化成Envoy過濾器的workloadSelector欄位。當不填寫時,建立的Envoy過濾器將在整個命名空間生效。 |
相關文檔
關於Envoy過濾器模板與Envoy過濾器的關係及操作樣本,請參見使用Envoy過濾器模板建立Envoy過濾器。
ASM通過外掛程式市場預置了一系列開箱即用的功能擴充。您可以根據具體業務需求靈活挑選並自訂配置各種外掛程式,滿足業務發展的多樣化需求。具體操作,請參見使用外掛程式市場擴充網格能力。