4. 控制平面核心组件 Mixer:架构、策略检查、遥测报告与 v1→v2 演进
Mixer 是 Istio 1.5 之前控制平面的核心组件,负责从 Sidecar Proxy 接收请求属性,执行策略检查(是否允许请求)并收集遥测数据(日志、指标、追踪)。本章深入分析 Mixer 的架构设计、关键流程以及从 v1 到 v2 的演进逻辑。
4.1 Mixer 整体架构
Mixer 采用插件式架构,通过 Adapter 对接后端基础设施(如 Prometheus、Stackdriver、Redis、Deny Checker)。其核心流程为:Envoy 在请求处理的关键阶段调用 Mixer,Mixer 根据配置调用相应 Adapter 完成策略或遥测操作。
4.2 策略检查(Check)
策略检查在请求处理的前置阶段执行,决定是否允许请求继续。Mixer 接收 Envoy 发送的请求属性(如来源、目标、路径、Header),根据 Istio 策略规则 调用对应 Adapter 进行判断。
| 检查维度 | 典型 Adapter | 检查逻辑 |
|---|---|---|
| 白名单/黑名单 | Deny Checker | 匹配来源 IP 或 Header,直接拒绝或放行 |
| 速率限制 | Redis Quota | 基于令牌桶或滑动窗口,检查是否超出配额 |
| RBAC 鉴权 | Kubernetes RBAC | 检查请求主体是否具有目标资源的访问权限 |
| 自定义规则 | OPA / 自定义 Adapter | 执行用户定义的策略语言(如 Rego) |
4.3 遥测报告(Report)
遥测报告在请求处理完成后执行,用于收集日志、指标和追踪信息。Mixer 将 Envoy 上报的属性转换为 Adapter 所需的格式,并批量发送到后端系统。
- 指标(Metrics): 请求计数、延迟分布、错误率、流量大小。典型 Adapter:Prometheus、Stackdriver。
- 日志(Logs): 访问日志、审计日志。典型 Adapter:Fluentd、Stackdriver Logging。
- 分布式追踪(Tracing): 生成调用链 Span 并发送到 Jaeger 或 Zipkin。注意:Istio 1.5+ 已将追踪直接集成到 Envoy,不再依赖 Mixer。
# 示例:Mixer 遥测配置片段(YAML)
apiVersion: config.istio.io/v1alpha2
kind: metric
metadata:
name: requestcount
spec:
value: "1"
dimensions:
source: source.workload.name | "unknown"
destination: destination.workload.name | "unknown"
response_code: response.code | 0
monitored_resource_type: '"UNSPECIFIED"'
4.4 Mixer v1 与 v2 的演进
Mixer 在 Istio 1.5 版本经历了重大重构,从独立的 Mixer 组件演进为 Mixer v2(Telemetry v2),核心变化是将策略和遥测逻辑直接内嵌到 Envoy 中,不再需要独立的 Mixer 进程。
| 对比维度 | Mixer v1(独立组件) | Mixer v2(内嵌 Envoy) |
|---|---|---|
| 部署形态 | 独立的 Deployment,需要额外资源 | 作为 Envoy 的 Wasm 插件或原生扩展运行 |
| 调用方式 | Envoy 通过 gRPC 远程调用 Mixer | Envoy 本地直接调用,无网络开销 |
| 延迟影响 | 增加 2-5ms 网络往返延迟 | 微秒级本地调用,延迟几乎可忽略 |
| 可扩展性 | 通过 Adapter 插件扩展,但需要维护独立进程 | 通过 Wasm 插件或 Envoy Filter 扩展,更轻量 |
| 运维复杂度 | 需要管理 Mixer 的 HA、缓存、连接池 | 随 Envoy 自动扩展,无需额外运维 |
| 社区状态 | Istio 1.5 后废弃,不再推荐使用 | 当前默认方案,持续演进 |
4.5 演进背后的设计考量
Mixer v1 的设计在早期提供了灵活的插件机制,但在大规模生产环境中暴露出明显的性能瓶颈。社区最终决定将策略和遥测能力下沉到数据平面,核心原因包括:
- 延迟敏感: 微服务架构中,每次请求增加 2-5ms 的额外延迟是不可接受的,尤其是高频调用场景。
- 资源消耗: Mixer 独立进程需要额外的 CPU 和内存,且在高并发下容易成为瓶颈。
- 运维复杂度: Mixer 需要独立配置缓存、连接池、高可用,增加了运维负担。
- Wasm 生态成熟: WebAssembly 技术使得在 Envoy 中安全运行用户自定义插件成为可能,替代了 Mixer 的 Adapter 模型。
istioctl migrate 工具辅助迁移。
4.6 小结
Mixer 作为 Istio 早期控制平面的核心组件,通过 Check 和 Report 接口实现了策略执行与遥测收集。其 v1 版本采用独立进程 + Adapter 插件架构,提供了良好的可扩展性,但引入了额外的网络延迟和运维复杂度。v2 版本将能力内嵌到 Envoy 中,利用 Wasm 插件实现了更低的延迟和更简单的运维。理解 Mixer 的演进过程,有助于深入理解 Istio 控制平面与数据平面的职责划分,以及云原生架构中“下沉到数据平面”的设计趋势。