亚马逊AWS官方博客

AWS App Mesh – 云应用的应用级联网

 

AWS App Mesh 帮助您大规模运行和监控 HTTP 和 TCP 服务。您可以一致的方式进行路由和监控流量,深入了解问题,并能够在故障或代码更改后重新路由流量。App Mesh 使用开源 Envoy 代理,为您提供源自 AWS 合作伙伴和开源社区的各种工具的使用权限。

服务可以在 AWS FargateAmazon EC2Amazon ECS, Amazon Elastic Container Service for KubernetesKubernetes 上运行。进出每个服务的所有流量均通过 Envoy 代理,以便进行路由、塑造、测量和记录。这种额外的间接级别使您可以使用任何所需语言构建服务,而无需使用通用的通信库集。

App Mesh 概念

在深入研究之前,让我们回顾几个重要的 App Mesh 概念和组件:

Service Mesh – 位于其中的服务之间的网络流量的逻辑边界。网格可以包含虚拟服务、虚拟节点、虚拟路由器和路由。

Virtual Service – 直接(通过虚拟节点)或间接(通过虚拟路由器)提供的服务的抽象(逻辑名称)。网格中的服务使用逻辑名称来引用和使用其他服务。

虚拟节点 – 指向任务组(ECS 服务或 Kubernetes 部署)或在一个或多个 EC2 实例上运行的服务的指针。每个虚拟节点都可以通过侦听器接受入站流量,并可以通过后端连接到其他虚拟节点。此外,每个节点都有一个服务发现配置(目前是一个 DNS 名称),允许其他节点发现任务、Pod 或实例的 IP 地址。

虚拟路由器 – 网格中一个或多个虚拟服务的处理程序。每个虚拟路由器都会侦听特定端口上的 HTTP 流量。

路由 – 路由使用基于前缀的 URL 匹配来将流量路由到虚拟节点,并具有可选的每节点权重。权重可用于测试生产中的新服务版本,同时逐渐增加它们处理的流量。

把以上内容结合在一起,每个服务网格都包含一组可通过路由指定的 URL 路径访问的服务。在网格中,服务按名称相互引用。

我可以通过 App Mesh 控制台、App Mesh CLI 或 App Mesh API 访问 App Mesh。我将向您展示如何使用控制台并简要介绍 CLI。

使用 App Mesh 控制台

可以使用控制台创建服务网格及其中的组件。打开 App Mesh 控制台并单击 Get started(开始):

输入网格名称和第一个虚拟服务(我可以稍后添加),然后单击 Next(下一步):

定义第一个虚拟节点:

可以单击 Additional configuration(其他配置)来指定服务后端(此节点可以调用的其他服务)和日志记录:

我通过协议(HTTP 或 TCP)和端口定义节点的侦听器,设置可选的运行状况检查,然后单击 Next(下一步):

接下来,定义第一个虚拟路由器及其路由:

可以在百分比基础上跨多个虚拟节点(目标)分配流量,并且可以对传入流量使用基于前缀的路由:

查看我的选择并单击 Create mesh service(创建网格服务):

组件在几秒钟内创建,马上及准备就绪了:

App Mesh 入门指南中所述,最后一步是更新我的任务定义(Amazon ECS 或 AWS Fargate)或 Pod 规范(Amazon EKS 或 Kubernetes),以引用 Envoy 容器映像和代理容器映像。如果我的服务在 EC2 实例上运行,我将需要在那里部署 Envoy。

使用 AWS App Mesh 命令行
App Mesh 允许您以简单的 JSON 格式指定每种类型的组件,并为您提供创建每个组件的命令行工具创建网格创建虚拟服务创建虚拟节点创建虚拟路由器)。例如,我可以在文件中定义虚拟路由器:

{
  "meshName": "mymesh",
  "spec": {
        "listeners": [
            {
                "portMapping": {
                    "port": 80,
                    "protocol": "http"
                }
            }
        ]
    },
  "virtualRouterName": "serviceA"
}

并使用一个命令创建它:

$ aws appmesh create-virtual-router --cli-input-json file://serviceA-router.json

现已推出

AWS App Mesh 现已面向以下区域推出,您可以立即开始使用:美国东部(弗吉尼亚北部)美国东部(俄亥俄)美国西部(俄勒冈)美国西部(加利福尼亚北部)加拿大(中部)欧洲(爱尔兰)欧洲(法兰克福)欧洲(伦敦)亚太地区(孟买)亚太地区(东京)亚太地区(悉尼)亚太地区(新加坡)以及亚太地区(首尔)

本篇作者

Jeff Barr

AWS 首席布道师; 2004年开始发布博客,此后便笔耕不辍。