eBay 应用程序部署与服务网格实践
应用程序架构与部署
eBay 应用由超过 5,000 个微服务构成,涵盖 API 服务、数据库、大数据系统、机器学习平台、日志与跟踪、消息系统等,运行在多种硬件上(通用 x86 服务器、GPU)。应用程序部署采用全球云布局,包括多个区域(如 R1、Rn)、数据中心(DC1)、可用区(AZ)和 PoP(存在点),每个区域包含多个 AZ,每个 AZ 内部署多个 Kubernetes (K8s) 集群。全球所有区域通过联合控制平面实现统一管理,每个 K8s 集群规模可达 200-5,000 个节点,支持高达 100,000 个 Pods 和 10,000+ K8s 服务(包括 prod、pre-prod、staging 等)。
服务网格实施步骤
eBay 通过 Istio 构建服务网格,实施分为四个步骤:
- 接入点规范:利用 Istio 对象模型(网关、VirtualService、DestinationRules)定义全局接入点规格,同步至各 AZ 控制平面,并在硬件 LB 上实现,提供标准化切换到软件的灵活性。
- 用软件替换硬件 LB:通过 Istio 的入口网关和 NLB 控制器实现流量隧穿,将硬件 LB 功能迁移至软件,实现更灵活的流量管理。
- 演变为 AZ 架构:将 Istio 重新部署到每个 AZ 的 K8s 集群,通过东西向网关实现集群间流量传输,支持跨 AZ 服务通信。
- 不断发展的安全性:利用 SPIFFE 信任域和相互 TLS 实现拨号音安全,支持多信任域(生产、预生产、PCI 等)和命名空间隔离,每个 K8s 集群可部署多个 Istio 部署,每个部署绑定唯一服务账户。
安全与信任域
通过 SPIFFE 信任域实现多环境隔离,每个环境(如生产、预生产)具有独立根 CA,工作负载基于 K8s 服务账户获得唯一标识符(spiffe://<信任域>/<命名空间>/<服务账户>),通过准入检查强制命名空间全局唯一和部署与服务账户绑定。安全策略包括 L7 认证(内部 OpenID 实现)和 L4 微分割,通过中央政策库捕获应用依赖关系,并在 K8s NetworkPolicies、硬件防火墙等执行。
规模测试与性能优化
主要目标测试 Istio 控制面性能以支持 eBay 规模,关键指标包括代理配置收敛时间(CDS、EDS、LDS、RDS 推送时间)和资源使用情况(CPU、内存)。测试设置包括数千个 sidecar Envoys 和网关 Pod,结果显示默认配置下 P99.9 收敛时间小于 1 秒,但高内存使用率需要调整参数(如 PILOT_DEBOUNCE_AFTER、PILOT_DEBOUNCE_MAX、PILOT_PUSH_THROTTLE)以优化性能。
未来方向
未来计划包括:跨 AZ 网关信任桥接、扩展授权策略、支持百万级政策、全球联合身份、增量 XDS 推送配置、本地支持多信任域和命名空间隔离。