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过滤器字段定义。关于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通过插件市场预置了一系列开箱即用的功能扩展。您可以根据具体业务需求灵活挑选并自定义配置各种插件,满足业务发展的多样化需求。具体操作,请参见使用插件市场扩展网格能力。