使用 AWS App Mesh 构建服务网格 - 微服务间通信控制与可观测性

介绍通过 Envoy Sidecar 以声明式方式配置金丝雀部署、重试策略、mTLS 加密,并通过 X-Ray 集成可视化服务间依赖关系的方法。

App Mesh 概述与服务终止

App Mesh 是一个控制和监控微服务间通信的服务网格。在每个服务旁部署 Envoy 代理作为 Sidecar,通过代理路由服务间流量。无需修改应用代码,即可配置流量权重、重试、超时和熔断器。但 AWS 自 2024 年 9 月 24 日起停止接受新客户,并已于 2026 年 9 月 30 日终止对 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 代理间的通信。将 AWS Private CA 签发的证书配置到虚拟节点后,代理间握手时进行双向认证,防止身份伪造。通过 SDS (Secret Discovery Service) 实现证书轮换自动化。在访问控制方面,明确定义虚拟节点后端允许的服务,阻断非预期的服务间通信。将 Envoy 访问日志发送到 CloudWatch Logs,可审计哪个服务访问了哪个端点。

App Mesh 定价与优化

App Mesh 本身不产生额外费用。成本取决于 Envoy 代理消耗的计算资源 (CPU 和内存)。由于作为 ECS 任务或 EKS Pod 的 Sidecar 运行,合理调整任务定义中分配给代理的资源非常重要。AWS 建议为 Envoy 容器分配 512 个 CPU 单位和至少 64 MiB 内存,负载较高导致资源不足时可增加分配。启用 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 不直接支持服务间的加权路由,需使用蓝绿部署等方式替代。VPC Lattice 支持加权目标组进行流量分割,可实现与 App Mesh 虚拟路由器类似的控制。关于 mTLS,ECS Service Connect 支持使用 AWS Private CA 的 TLS 加密,但 AWS 于 2024 年 9 月发布的迁移博客指出 Service Connect 尚不支持双向认证 (mTLS)。VPC Lattice 通过 IAM 认证策略原生提供服务间授权,以不同于 mTLS 的方式实现零信任通信控制。迁移到 Service Connect 时,AWS 的迁移博客介绍了蓝绿方式:为每个 ECS 服务创建副本,并逐步转移流量。

总结

App Mesh 是通过 Envoy 代理控制和监控微服务间通信的服务网格。以声明式方式配置基于流量权重的金丝雀部署、重试策略和熔断器,并通过 mTLS 加密通信。但由于 AWS 已于 2026 年 9 月 30 日终止对 App Mesh 的支持,迁移目标为 ECS Service Connect (ECS 内通信) 或 Amazon VPC Lattice (跨 VPC/跨账户通信)。

参考资料(AWS 官方)

本页的第一手信息来源是 AWS 官方网站及官方文档。最新的规格与价格请以下列官方页面为准。

如本页内容与官方文档不一致,请以官方文档为准。

分享