Istio 服务网格中任意七层流量管理
现状与挑战
当前 Istio 服务网格在管理 HTTP/gRPC 七层流量方面表现良好,但在处理非 HTTP/gRPC 流量(如 RPC、消息队列、缓存、数据库等)时,仅支持三层至六层流量管理。这导致无法实现基于七层头部的路由、应用层错误代码的故障注入、应用层指标的可观测性以及应用层安全等能力。
解决方案
扩展 Istio 能力的方式
- Pilot 端代码修改:在 Pilot 端添加对特定协议的支持,并生成相应的 Envoy Filter。优点是相对容易实现,但需要维护 Istio 的分支版本,升级困难。
- EnvoyFilter:通过 EnvoyFilter 替换 Envoy 配置中的 TCP 代理。虽然强大,但手动创建和维护 EnvoyFilter 非常困难,尤其是在大型服务网格中。
Aeraki 解决方案
Aeraki 是一个独立的组件,用于自动化生成 Envoy 配置,支持管理任意七层流量。其优势包括:
- 无需修改 Istio 代码。
- 易于与 Istio 集成。
- 提供 Aeraki CRD 抽象层,隐藏低级 Envoy 配置细节。
- 通过 Aeraki CRD 简化流量控制。
- 支持多种协议(如 Thrift、Dubbo、tRPC、Redis、Kafka、Zookeeper 等)。
Aeraki 配置示例
- Thrift 服务配置:定义服务端口和流量规则。
- Redis 配置:通过 RedisService 和 RedisDestination 定义服务地址和认证信息。
Aeraki 应用案例
Dev/Prod Parity
通过 Aeraki 实现开发、测试和生产环境的一致性,使用相同的 DSN、URL 和认证信息访问数据库、缓存等系统。
更多安全
- 管理其他系统的授权。
- 将流量升级到 mTLS。
- 避免在代码中进行认证。
支持异构数据库
- 性能兼容性:支持多种兼容 MySQL 和 Redis 的协议(如 MariaDB、TiDB、Oceanbase、Amazon Aurora、Codis、Tendis、Pika、Twemproxy 等)。
- 轻松迁移:提供高性能兼容和易于迁移的特性。
故障注入
支持对其他流量进行故障注入。
总结
Aeraki 通过自动化生成 Envoy 配置,解决了 Istio 在管理任意七层流量方面的不足,提供了更强大的流量管理、安全性和可观测性能力,并支持异构数据库和 Dev/Prod Parity,简化了服务网格的管理。