Airbnb 的 Istio 之旅
一、背景与动机
Airbnb 从 2013 年开始使用 SmartStack 进行服务间通信,通过写入 IP 和配置、订阅依赖、检索 IP 和配置等方式实现。2018 年,随着业务规模扩大,SmartStack 出现可扩展性问题。2019 年,Airbnb 开始探索 Istio,主要看重其安全、Envoy 数据平面、流量管理、弹性和可观察性、活跃社区、性能和可扩展性、多集群支持和虚拟机支持等优势。
二、Istio 选型与评估
Airbnb 在选择 Istio 时,关注了其安全、性能和可扩展性等方面。他们评估了控制平面性能,发现管理的 Kubernetes 集群数量不是 Istio 1.3 控制平面扩展因素,并选择了外部 Istiod 部署模型。此外,他们也关注了多集群支持、EC2 支持等问题,并评估了多种解决方案。
三、Airbnb 的 Istio 设置
Airbnb 的 Istio 设置分为单个区域和多区域两种架构,并采用了每个信任域一个根证书的 CA 层次结构。他们还实现了服务间通信的即时更改和安全的逐边迁移,并使用 Smartstack 和 Istio 并行运行,通过 URL 控制的流量转移实现平滑迁移。
四、Istio 构建、测试与部署
Airbnb 的 Istio 构建过程包括构建 Istio 代理、生成清单、控制平面展开、集成测试和数据平面部署。他们进行了多种测试,包括数据平面资源消耗、认证策略、弹性功能、负载均衡、流量管理功能等,并发现了几个问题,如 Istio 错误地跳过 XDS 推送等。
五、网格扩展与 VM 支持
Airbnb 通过网格扩展功能,在虚拟机上支持 Istio。他们从 Istio 1.5 的 Alpha 版本开始使用,到 Istio 1.8 的 Beta 版本,不断完善 VM 上的 Istio 安装、代理侧车注射、PKI 引导、健康检查等功能。Airbnb 还自定义了网格扩展设置,包括抽象 WorkloadGroup 详细信息、安全的逐个边缘迁移等。
六、未来使用与建议
Airbnb 未来将使用 Istio 的先进弹性功能、gRPC 支持、跨网格交通的网关 TCP 支持等功能。他们建议使用管理 Istio 集群处理多集群网格,升级控制平面前检查 manifest 变化,使用金丝雀控制平面部署并逐步升级数据平面,测试服务依赖的功能,通过渐进式流量转移逐个迁移边缘,考虑使用自动注册和健康探测进行网格扩展,并与社区进行互动。