EnvoyFilterTemplate和EnvoyFilterTemplateBinding CRD说明

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过滤器字段定义。关于Envoy过滤器的字段定义,请参见Envoy过滤器(Envoy Filter)CRD说明

在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过滤器将在整个命名空间生效。

相关文档