EnvoyFilter CR
-
EnvoyFilter
- EnvoyFilter CR提供了自定义Sidecar Envoy配置的接口,其支持的配置功能包括修改指定字段的值、添加特定的过滤器甚至是新增Listener和Cluster等
-
常在Istio原生的各CR未能提供足够的配置机制,或者无法支持到的配置场景中使用
- 简单来说,EnvoyFilter提供的是直接向Envoy配置文件打补丁的接口,从而为网格中的各Envoy实例提供了以Envoy原生方式进行配置的机制
- 同Sidecar等其它几个位于同一API群组(networking.istio.io/v1beta1)内的CR不同的是,EnvoyFilter CR资源对象通过自适应的方式应用于workload之上
-
一个名称空间当中可同时存在多个应用于同一workload实例的EnvoyFilter CR资源对象
- 多个EnvoyFilter资源对象在应用时会有着特定的次序:首先是root namespace中的所有EnvoyFilter,而后才是workload实例当前名称空间中所有匹配到的各EnvoyFilter资源对象
-
-
注意事项
-
对于不同的Istio发行版来说,EnvoyFilter提供的配置可能不具有向后兼容性;
-
Istio Proxy版本升级时,需要仔细识别配置字段的废弃和添加等所产生的影响;
- 多个EnvoyFilters资源对象应用于同一个workload时,它们会根据创建的时间顺次生效,而配置冲突时其结果将无从预料;
-
切记要谨慎使用该功能,不当的配置定义,可能会破坏网格的稳定性;
-
EnvoyFilter CR 的资源规范
使用EnvoyFilter配置Envoy
-
EnvoyFilter的关键组成部分
-
使用workloadSelector指定要配置的Envoy实例
-
省略该字段,意味着将配置到同一个名称空间下的所有Envoy实例;
-
若EnvoyFilter定义在了根名称空间,且省略了该字段,则意味着配置到网格中所有名称空间中的Envoy实例
-
-
由configPatches给出配置补丁
-
补丁排序
-
多个补丁间存在依赖关系时,其应用次序举足轻重
-
EnvoyFilter API内置了两种应用次序
-
根名称空间下的EnvoyFilter将先于名称空间下的EnvoyFilter资源;
-
补丁集中的多个补丁以它们定义的顺序完成打补丁操作;
-
-
也可以为EnvoyFilter使用priority字段定义其优先级,可用的取值范围是0至2^32-1;
-
负数优先级,表示将于default EnvoyFilter之前应用
-
-
-
-
补丁及其位置
-
applyTo指定补丁在Envoy配置文件中要应用到的位置(配置段)
- match指定补丁在Envoy配置文件中相应的位置上要应用到的具体配置对象(Listener、RouteConfiguration或Cluster)
-
补丁的内容及相应的操作则由patch字段定义
-
EnvoyFilter配置示例
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: custom-protocol
namespace: istio-config # as defined in meshConfig resource.
spec:
configPatches:
- applyTo: NETWORK_FILTER
match:
context: SIDECAR_OUTBOUND # will match outbound listeners in all sidecars
listener:
portNumber: 9307
filterChain:
filter:
name: "envoy.filters.network.tcp_proxy"
patch:
operation: INSERT_BEFORE
value:
# This is the full filter config including the name and typed_config section.
name: "envoy.extensions.filters.network.mongo_proxy"
typed_config:
"@type": "type.googleapis.com/envoy.extensions.filters.network.mongo_proxy.v3.MongoProxy"
...
- applyTo: NETWORK_FILTER # http connection manager is a filter in Envoy
match:
# context omitted so that this applies to both sidecars and gateways
listener:
filterChain:
filter:
name: "envoy.filters.network.http_connection_manager"
patch:
operation: MERGE
value:
name: "envoy.filters.network.http_connection_manager"
typed_config:
"@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager"
common_http_protocol_options:
idle_timeout: 30s
参考文档
https://istio.io/latest/zh/docs/reference/config/networking/envoy-filter/
标签:补丁,Envoy,配置,EnvoyFilter,Istio,filter,envoy From: https://www.cnblogs.com/wangguishe/p/16832579.html