全部產品
Search
文件中心

Alibaba Cloud Service Mesh:EnvoyFilterTemplate和EnvoyFilterTemplateBinding CRD說明

更新時間:Jun 30, 2024

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過濾器模板。

展開查看EnvoyFilterTemplate YAML

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過濾器:

展開查看EnvoyFilter YAML

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

TemplateValue[]

指定一系列Envoy過濾器模板值。每個模板值都有適配的Istio版本或版本範圍。模板值之間適配的Istio版本範圍不能有重合的部分。

TemplateValue

每個TemplateValue指定一個Envoy過濾器的YAML內容以及該Envoy過濾器對應的適配Istio版本或版本範圍。

欄位

類型

是否必選

說明

istioVersion

string

Envoy過濾器適配的Istio版本或版本範圍。版本必須為Istio的Minor版本(例如1.19、1.20),可以使用短劃線(-)串連兩個版本,表示在指定的版本範圍內Envoy過濾器均可生效。

當表達版本範圍時,允許使用MIN_VERSION代表已知最小版本,使用MAX_VERSION代表已知最大版本。

樣本:

  • "1.19":適用於1.19版本。

  • "1.18-1.20":適用於1.18、1.19和1.20三個版本。

  • "1.19-MAX_VERSION":適用於1.19及以上版本。

  • "MIN_VERSION-1.19":適用於1.19及以下版本。

value

string

Envoy過濾器的YAML內容,必須為YAML字串,同時YAML需要符合Envoy過濾器欄位定義。

在TemplateValue中定義的Envoy過濾器內容,不需要包含metadata、workloadSelector欄位,這些欄位會在實際建立Envoy過濾器時,根據Envoy過濾器模板綁定的定義進行填充。

EnvoyFilterTemplateBinding欄位說明

EnvoyFilterTemplateBinding關聯到一個EnvoyFilterTemplate,並指明EnvoyFilterTemplate中定義的Envoy過濾器內容需要生效到哪些工作負載內、哪些版本的資料面代理中。

EnvoyFilterTemplateBindingSpec

EnvoyFilterTemplateBindingSpec是EnvoyFilterTemplateBinding的核心配置,即spec部分。

欄位

類型

是否必選

說明

templateRef

EnvoyFilterTemplateRef

模板引用,指定EnvoyFilterTemplateBinding所引用的EnvoyFilterTemplate以及綁定的版本資訊。

workloads

WorkloadRef[]

指定需要為哪些工作負載建立Envoy過濾器。

EnvoyFilterTemplateRef

欄位

類型

是否必選

說明

name

string

引用的EnvoyFilterTemplate的名稱。

istioVersion

string

指定要為哪些版本的資料面代理生效Envoy過濾器。

版本必須為Istio的Minor版本(例如1.19、1.20),可以使用短劃線(-)串連兩個版本,表示在指定的版本範圍內Envoy過濾器均可生效。

當表達版本範圍時,允許使用MIN_VERSION代表已知最小版本,使用MAX_VERSION代表已知最大版本。

樣本:

  • "1.19":適用於1.19版本。

  • "1.18-1.20":適用於1.18、1.19和1.20三個版本。

  • "1.19-MAX_VERSION":適用於1.19及以上版本。

  • "MIN_VERSION-1.19":適用於1.19及以下版本。

WorkloadRef

WorkloadRef定義了一個Envoy過濾器的生效範圍,能夠指定Envoy過濾器生效在哪些工作負載上。

欄位

類型

是否必選

說明

namespace

string

命名空間名稱,指定在哪個命名空間建立Envoy過濾器。

name

string

工作負載名稱,此名稱將決定最終建立的Envoy過濾器的名稱,建議填寫為Service或Deployment的名稱。

當Envoy過濾器生效在整個命名空間時,無需填寫。

kind

string

用於區分Envoy過濾器綁定的工作負載的類型,僅做展示區分用途。

selector

map<string, string>

指定一系列的標籤,用作選擇Pod的條件,將轉化成Envoy過濾器的workloadSelector欄位。當不填寫時,建立的Envoy過濾器將在整個命名空間生效。

相關文檔