序言
Istio 在自己的定制版本 Envoy 中,加入了 stats-filter 插件,用于计算 Istio 指标。可参见stats-plugin.cc。Istio 安装时默认会在 istio-system 命名空间下部署 stats-filter-1.xx、tcp-stats-filter-1.xx
等 envoyfilter 文件,如下图所示:
介绍
Envoyfilter 是 Istio 自定义的 CRD,用于配置 Envoy 的过滤器,EnvoyFilter 配置文件如下所示:
- EnvoyFilter 重要组成部分
- 使用 workloadSelector 指定要配置的 Envoy 实例
- 省略该字段,意味着将配置到同一个名称空间下的所有 Envoy 实例
- 若 EnvoyFilter 定义在了根命名空间,且省略了该字段,则意味着配置到网格中所有名称空间中的 Envoy 实例
- 由 configPatches 给出配置补丁
- 补丁排序
- 多个补丁间存在依赖关系时,其应用次序举足轻重
- EnvoyFilter API 内置了两种应用顺序
- 根命名空间下的 EnvoyFilter 将先于命名空间下的 EnvoyFilter 资源
- 补丁集中的多个补丁以它们定义的顺序完成打补丁操作
- 也可以为 EnvoyFilter 使用 priority 字段定义其优先级,可用的取值范围是 0 至 2^32-1
- 负数优先级,表示将于 default EnvoyFilter 之前应用
- 使用 workloadSelector 指定要配置的 Envoy 实例
- 补丁及其位置
- applyTo 指定补丁在 Envoy 配置文件中要应用到的位置(配置段)
- match 指定补丁在 Envoy 配置文件中相应的位置上要应用到的具体配置对象(Listener、RouteConfiguration 或 Cluster)
- 补丁的内容及相应的操作则由 patch 字段定义
验证
按照 istio 官网安装 istio 集群,安装 Prometheus 监控,部署应用,进行流量测试访问。查看 Prometheus 监控 Metrics 指标,istio_requests_total 有值,如下所示:
删除 istio-system 命名空间下的 stats-filter-1.x、tcp-stats-filter-1.x
envoyfilter,重新测试,如下所示:
结论
istio-system 下默认的 envoyfilter 跟指标息息相关,如果删除,所有跟指标相关的事项会有功能缺失。在 Istio 中,istio-system 命名空间下的 EnvoyFilter 主要用于配置 Envoy 代理的行为。EnvoyFilter 允许你对进出网格的流量进行细粒度的控制和修改,从而实现各种功能,如流量路由、安全策略、故障注入、监控指标收集等。