AWS App Mesh

基于 Envoy 代理的服务网格,可视化和控制微服务间通信,统一应用流量管理和重试策略

概述

AWS App Mesh 是一项以 Envoy 代理为数据平面的全托管服务网格。它透明地拦截运行在 ECS、EKS、EC2 上的微服务间通信,无需修改应用代码即可应用流量路由、重试和超时策略、熔断器、mTLS 加密。通过与 X-Ray 和 CloudWatch 的集成,可实时可视化服务间通信的延迟、错误率和请求量。

网格组成要素与流量路由

App Mesh 的架构由网格(逻辑边界)、虚拟服务(服务的抽象表示)、虚拟节点(实际工作负载)、虚拟路由器(路由规则)四个要素组成。通过在虚拟路由器中定义路由,可实现基于 HTTP 头部、路径前缀、方法的条件路由。在金丝雀部署中,可设置加权路由将 5% 的流量导向新版本的虚拟节点,监控错误率后逐步提高比例。重试策略可在虚拟节点级别定义针对 HTTP 503 或连接错误的最大重试次数和退避间隔,实现从临时故障的自动恢复。原生支持 gRPC 协议,可配置基于 gRPC 状态码的路由和健康检查。

通过 mTLS 实现零信任通信与可观测性

App Mesh 通过 mTLS(双向 TLS)加密 Envoy 代理间的通信,实现服务间的零信任通信。证书管理可使用 ACM Private CA 或 Envoy 的 SDS(Secret Discovery Service),证书轮换也实现了自动化。在可观测性方面,Envoy 生成的指标(请求数、延迟分布、错误率)发送到 CloudWatch,通过向 X-Ray 发送追踪数据可视化服务间的调用链。还可将 Envoy 的访问日志输出到 CloudWatch Logs 或 S3,用于单个请求级别的调试。与 Grafana 和 Prometheus 集成时,也可采用从 Envoy 的 stats 端点直接抓取指标的架构。

ECS・EKS 环境的引入模式与运维设计

ECS 环境中,通过在任务定义中添加 Envoy Sidecar 容器和 proxyConfiguration 来加入 App Mesh。使用 App Mesh Controller for ECS 可自动化与服务发现(Cloud Map)的联动,新任务启动时自动注册到虚拟节点。在 EKS 环境中,App Mesh Controller for Kubernetes 提供 CRD(Custom Resource Definition),可通过 Kubernetes 清单声明式管理虚拟服务和虚拟节点。通过自动注入 Envoy Sidecar 的 Mutating Webhook,可轻松将现有工作负载接入。运维注意事项方面,由于每个服务都会额外消耗 Envoy 代理的资源(CPU・内存),需要预先估算任务或 Pod 的资源分配。在大规模环境中,Envoy 配置传播会有数秒延迟,因此部署后需要针对路由不一致设计重试机制。

共有するXB!