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配置示例
参考文档
https://istio.io/latest/zh/docs/reference/config/networking/envoy-filter/