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過濾器模板。
apiVersion: istio.alibabacloud.com/v1
kind: EnvoyFilterTemplate
metadata:
name: seth2windows
namespace: istio-system
spec:
templates:
- istioVersion: "1.19-MAX_VERSION"
value: |
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
spec:
configPatches:
- applyTo: NETWORK_FILTER
match:
context: ANY
listener:
filterChain:
filter:
name: envoy.filters.network.http_connection_manager
portNumber: 80
patch:
operation: MERGE
value:
typed_config:
'@type': type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
http2_protocol_options:
initial_connection_window_size: 65536
initial_stream_window_size: 65536
priority: 0
---
apiVersion: istio.alibabacloud.com/v1
kind: EnvoyFilterTemplateBinding
metadata:
name: seth2windows-binding-1.20
namespace: istio-system
spec:
templateRef:
istioVersion: "1.20"
name: seth2windows
workloads:
- kind: Namespace
namespace: istio-system
以上配置最終會指定創建出如下的Envoy過濾器:
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
labels:
asm-system: "true"
binding-name: seth2windows-binding-1.20
binding-namespace: istio-system
provider: asm
workload-name: ""
workload-namespace: istio-system
name: seth2windows-binding-1.20-for-istio-system
namespace: istio-system
spec:
configPatches:
- applyTo: NETWORK_FILTER
match:
context: ANY
listener:
filterChain:
filter:
name: envoy.filters.network.http_connection_manager
portNumber: 80
proxy:
proxyVersion: ^1\.20.*
patch:
operation: MERGE
value:
typed_config:
'@type': type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
http2_protocol_options:
initial_connection_window_size: 65536
initial_stream_window_size: 65536
priority: 0
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過濾器字段定義。關于Envoy過濾器的字段定義,請參見Envoy過濾器(Envoy Filter)CRD說明。 在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過濾器。
關于EnvoyFilter的字段說明,請參見Envoy過濾器(Envoy Filter)CRD說明。
ASM通過插件市場預置了一系列開箱即用的功能擴展。您可以根據具體業務需求靈活挑選并自定義配置各種插件,滿足業務發展的多樣化需求。具體操作,請參見使用插件市場擴展網格能力。