使用 AWS App Mesh 构建服务网格 - 微服务间通信控制与可观测性
介绍通过 Envoy Sidecar 以声明式方式配置金丝雀部署、重试策略、mTLS 加密,并通过 X-Ray 集成可视化服务间依赖关系的方法。
App Mesh 概述与服务终止
App Mesh 是一个控制和监控微服务间通信的服务网格。在每个服务旁部署 Envoy 代理作为 Sidecar,通过代理路由服务间流量。无需修改应用代码,即可配置流量权重、重试、超时和熔断器。但 AWS 于 2024 年 9 月宣布 App Mesh 停止接受新客户,并建议现有用户在服务终止前规划迁移。新项目请勿采用 App Mesh,应选择 ECS Service Connect 或 Amazon VPC Lattice。现有用户需要在服务终止日期前制定迁移计划。
流量控制与可观测性
通过虚拟路由器设置流量权重,可实现金丝雀部署中将 10% 流量导向新版本等控制。逐步调整权重 (10% → 25% → 50% → 100%) 可安全地迁移流量。重试策略以声明式方式定义 HTTP 503 错误时最多重试 3 次并以指数退避等待。熔断器通过异常值检测实现,将错误率超过阈值的端点临时从路由目标中移除。与 X-Ray 集成后,Envoy 代理自动发送追踪数据,可视化服务间调用链、延迟和错误率。通过 CloudWatch 指标可按服务监控请求数、延迟和错误率。
mTLS 与访问控制
App Mesh 可通过 mTLS 加密 Envoy 代理间的通信。将 ACM Private CA 签发的证书配置到虚拟节点后,代理间握手时进行双向认证,防止身份伪造。通过 SDS (Secret Discovery Service) 实现证书轮换自动化。在访问控制方面,明确定义虚拟节点后端允许的服务,阻断非预期的服务间通信。将 Envoy 访问日志发送到 CloudWatch Logs,可审计哪个服务访问了哪个端点。 如需深入理解 App Mesh 的网络设计,可参考专业书籍 (Amazon)。
App Mesh 定价与优化
App Mesh 本身不产生额外费用。成本取决于 Envoy 代理消耗的计算资源 (CPU 和内存)。由于作为 ECS 任务或 EKS Pod 的 Sidecar 运行,合理调整任务定义中分配给代理的资源非常重要。每个代理的参考配置为 256 MB 内存和 0.25 vCPU,但流量较大的服务需要增加配额。启用 X-Ray 追踪时会产生追踪数据存储费用,需调整采样率以平衡成本与可观测性。
迁移目标 - ECS Service Connect 与 VPC Lattice
AWS 推荐的 App Mesh 迁移目标有两个:ECS Service Connect 和 Amazon VPC Lattice。ECS Service Connect 专注于 ECS 内的服务间通信,与 App Mesh 一样基于 Envoy,但控制平面配置大幅简化。无需定义虚拟节点和虚拟路由器,只需在 ECS 服务定义中添加 serviceConnectConfiguration 即可启用服务发现、负载均衡和重试。VPC Lattice 则提供跨 VPC 边界的服务间通信,可在 ECS、EKS、Lambda、EC2 等不同计算类型之间路由。它不需要 Envoy 这样的 Sidecar 代理,只需加入 VPC Lattice 服务网络即可建立互联,大幅降低运维负担。选择标准:如果通信限于 ECS 内部则选 Service Connect,如果需要跨 VPC、跨账户连接异构计算则选 VPC Lattice。
迁移时的设计决策与注意事项
从 App Mesh 迁移时的主要设计决策是如何实现现有的金丝雀部署 (流量权重)。ECS Service Connect 不直接支持服务间的加权路由,需使用 CodeDeploy 的蓝绿部署 (ECS 原生) 替代。VPC Lattice 支持加权目标组进行流量分割,可实现与 App Mesh 虚拟路由器类似的控制。关于 mTLS,ECS Service Connect 自动启用 TLS,但在指定自定义 CA 进行双向认证 (mTLS) 方面有限制。VPC Lattice 通过 IAM 认证策略原生提供服务间授权,以不同于 mTLS 的方式实现零信任通信控制。建议分阶段迁移:先在迁移目标上构建新服务,保持现有服务与 App Mesh 服务之间的通信兼容性,然后依次切换。避免同时迁移所有服务,因为风险较高。
总结
App Mesh 是通过 Envoy 代理控制和监控微服务间通信的服务网格。以声明式方式配置基于流量权重的金丝雀部署、重试策略和熔断器,并通过 mTLS 加密通信。但由于 AWS 已停止接受新客户并计划终止服务,新项目应选择 ECS Service Connect (ECS 内通信) 或 Amazon VPC Lattice (跨 VPC/跨账户通信),现有用户应尽早制定迁移计划。