一般性问题

问:什么是 AWS App Mesh?

答:AWS App Mesh 可用于方便地监控、控制和调试服务之间的通信。App Mesh 使用 Envoy,这是一种与微服务容器一起部署的开源服务网格代理。App Mesh 与 AWS 服务集成以进行监控和跟踪,还可以与很多常用的第三方工具结合使用。App Mesh 可以与在 AWS 上运行的 Amazon ECS、Amazon EKS、AWS Fargate、Kubernetes 托管的微服务容器以及在 Amazon EC2 上运行的服务结合使用。

问:为什么应该使用 App Mesh?

答:借助 App Mesh,您可以更加轻松地获得服务之间的通信的可见性、安全性和控制力,而无需编写新代码或运行额外的 AWS 基础设施。使用 App Mesh,您可以标准化服务的通信方式,实现服务之间的通信规则并将指标、日志和跟踪直接捕获到 AWS 服务和您选择的第三方工具中。

问:App Mesh 的工作原理是什么?

答:App Mesh 为您的服务设置和管理服务网格。要实现此操作,您将与每个服务一起运行开源 Envoy 代理,而 App Mesh 配置此代理以处理进出每个容器的通信。App Mesh 收集指标(例如错误率和每秒连接数),这些指标可使用 statsd 收集器导出到 Amazon CloudWatch。使用 App Mesh API,可以基于路径或权重将流量路由到特定服务版本。

问:什么是服务网格?

答:服务网格是处理服务之间所有通信的新软件层。其提供新功能以连接和管理服务之间的连接,且独立于每个服务的代码,这样其可以跨网络边界工作,并用于多个服务管理系统。

集成

问:App Mesh 如何与 Amazon Elastic Container Services (ECS) 和 AWS Fargate 结合使用?

答:App Mesh 为 Amazon ECS 和 AWS Fargate 托管的应用程序提供新通信、观测和管理功能。将 Envoy 代理映像添加到 ECS 任务定义。App Mesh 管理 Envoy 配置以提供服务网格功能。App Mesh 将指标、日志和跟踪导出到所提供的 Envoy 引导程序配置中指定的终端节点。App Mesh 提供一个 API,用于配置已启用网格功能的微服务之间的流量路由及其他控制。

问:App Mesh 如何与 Amazon Elastic Container Service for Kubernetes (EKS) 结合使用?

答:使用开源 AWS App Mesh 控制器和变更 Webhook 准入控制器。这些控制器将 Kubernetes 服务连接到 App Mesh,并确保 Envoy 代理注入到池中。App Mesh 将指标、日志和跟踪导出到所提供的 Envoy 引导程序配置中指定的终端节点。App Mesh 提供一个 API,用于配置已启用网格功能的微服务之间的流量路由及其他控制。

问:App Mesh 如何与在 Amazon EC2 上运行的服务结合使用?

答:将 Envoy 代理作为容器或进程在 EC2 实例上运行。使用 AWS 提供的容器代理 init 容器,或运行您自己的脚本,以通过代理重定向实例上的网络流量。App Mesh 管理 Envoy 配置以提供服务网格功能。App Mesh 将指标、日志和跟踪导出到所提供的 Envoy 引导程序配置中指定的终端节点。App Mesh 提供一个 API,用于配置已启用网格功能的微服务之间的流量路由及其他控制。

问:为何我应使用 App Mesh 而不是 AWS Elastic Load Balancers?

答:我们建议使用 AWS Elastic Load Balancing 处理所有 Internet 流量以及来自信任边界外部的客户端的流量。对于连接到 AWS 区域内的其他服务的内部服务,App Mesh 提供灵活性、一致性和更大的控制程度,并监控服务通信。

监控、日志记录和跟踪

问:App Mesh 提供哪种类型的监控功能?

答:通过 App Mesh,您可以为服务之间的每个跃点获得一致的指标和日志。这些日志和指标包括服务名称和请求标识符等元数据。通过这些元数据,您可以使用 Amazon CloudWatch 等工具聚合、筛选并查看服务到服务通信的图形控制面板。常见控制面板可能包括服务和依赖服务之间的错误率和错误代码。App Mesh 自动收集每个服务的跟踪,并使您可以更方便地查看包含所有服务 API 调用的服务映射。这些功能使您可以更方便地调试并确定微服务之间的通信问题的根本原因。

问:我是否可以使用非 AWS 工具通过 App Mesh 进行监控、日志记录或跟踪? 可以。

答:可以。App Mesh 支持可与 Envoy 结合使用的所有第三方工具。包括 Splunk、Prometheus、Jaeger、Flagger 和 Grafana,以及 Zipkin 和 LightStep 等开放式跟踪解决方案。

流量控制

问:App Mesh 提供哪种类型的流量控制?

答:App Mesh 提供一组客户端控制用于流量路由。App Mesh 提供 API 以基于服务名称和版本路由应用程序之间的流量。这些功能使您可以更方便地部署微服务的新版本。

服务到服务身份验证

问:App Mesh 如何支持应用程序身份?

双向 TLS (mTLS) 提供在传输层实施应用程序身份识别并根据客户端提供的证书来允许或拒绝客户端连接的方法。AWS App Mesh 支持使用 X.509 证书(称为双向传输层安全性或 mTLS)实施客户端应用程序身份识别。为了配置 mTLS,您需要将客户端设置为在请求启动期间向服务器服务提供证书,这是 TLS 会话协商的一部分。服务器使用此证书对客户端进行身份识别和身份验证,检查证书是否有效而且是否由受信任的证书颁发机构 (CA) 颁发的,并通过使用证书上的使用者可选名称 (SAN) 来识别客户端的身份。

问:为什么应将 mTLS 与 AWS App Mesh 配合使用?

微服务还具有特殊的安全需求,包括端到端流量加密和灵活的服务访问控制,这些需求可以通过服务网格来得到解决。AWS App Mesh mTLS 实施使您的客户端应用程序可以验证服务器并提供流量加密,而双向 TLS 提供用于服务到服务身份验证的对等身份验证。它在 TLS 上增加了一个安全层,使您的服务可以验证建立连接的客户端。通过将整体式应用程序分解为微服务并在服务网格中运行它们会带来各种好处,其中包括更好的可见性和智能流量路由。