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 配置传播会有数秒延迟,因此部署后需要针对路由不一致设计重试机制。