Service Connect
Amazon ECS Service Connect 以 Amazon ECS 配置的形式提供服务间通信的管理。它通过在 Amazon ECS 中同时构建服务发现和服务网格来实现此目的。这为您通过服务部署管理的每个 Amazon ECS 服务提供了完整配置、在不依赖于 Amazon VPC DNS 配置的命名空间内引用您的服务的统一方法,以及用于监控 Amazon ECS 上的所有应用程序的标准化指标和日志。Amazon ECS Service Connect 仅互连 Amazon ECS 服务。
配置 Service Connect 的步骤概述
按照以下步骤为一组相关服务配置 Service Connect。
-
在您的任务定义中配置端口名称。此外,您可以识别应用程序的第 7 层协议,以获得更多指标。
-
创建 Amazon Cloud Map 命名空间。对于简单的组织,创建一个 Amazon ECS 集群并为命名空间指定相同的名称。在这种情况下,Amazon ECS 使用必要的配置创建了一个新的 HTTP 命名空间。Amazon ECS Service Connect 不在 Amazon Route 53 中使用或创建 DNS 托管区。
-
配置服务以在命名空间内创建 Service Connect 端点。
-
部署服务以创建端点。Amazon ECS 向每个任务添加一个 Service Connect 代理容器,并在 Amazon Cloud Map 中创建 Service Connect 端点。此容器未在任务定义中配置,任务定义无需修改即可重复使用,以便在同一个命名空间或多个命名空间中创建多个服务。
-
将客户端应用程序部署为服务以连接到端点。Amazon ECS 通过每项任务中的 Service Connect 代理将它们连接到 Service Connect 端点。
-
通过 Amazon CloudWatch 中的 Service Connect 代理监控流量。
支持 Service Connect 的区域
Amazon ECS Service Connect 在以下 Amazon 区域可用:
区域名称 | 区域 |
---|---|
美国东部(弗吉尼亚州北部) |
us-east-1 |
US East (Ohio) |
us-east-2 |
美国西部(北加利福尼亚) |
us-west-1 |
US West (Oregon) |
us-west-2 |
非洲(开普敦) |
af-south-1 |
亚太地区(香港) |
ap-east-1 |
亚太地区(孟买) |
ap-south-1 |
亚太地区(东京) |
ap-northeast-1 |
亚太地区(首尔) |
ap-northeast-2 |
亚太地区(大阪) |
ap-northeast-3 |
亚太地区(新加坡) |
ap-southeast-1 |
Asia Pacific (Sydney) |
ap-southeast-2 |
亚太地区(雅加达) |
ap-southeast-3 |
Canada (Central) |
ca-central-1 |
中国(北京) |
cn-north-1 |
中国(宁夏) |
cn-northwest-1 |
欧洲(法兰克福) |
eu-central-1 |
Europe (Ireland) |
eu-west-1 |
欧洲(伦敦) |
eu-west-2 |
Europe (Paris) |
eu-west-3 |
欧洲(米兰) |
eu-south-1 |
欧洲(斯德哥尔摩) |
eu-north-1 |
中东(巴林) |
me-south-1 |
South America (São Paulo) |
sa-east-1 |
Service Connect 概念
Service Connect 功能可创建相关服务的虚拟网络。可以在多个不同的命名空间中使用相同的服务配置,以运行独立但相同的应用程序集。Service Connect 定义了 Amazon ECS 服务中的代理容器。通过这种方式,就可以使用相同的任务定义在具有不同 Service Connect 配置的不同命名空间中运行相同的应用程序。Amazon ECS 服务启动的每项任务都会在任务中运行一个代理容器。
Service Connect 适用于同一命名空间内的 Amazon ECS 服务之间的连接。对于以下应用程序,您需要使用其他互连方法连接到配置了 Service Connect 的 Amazon ECS 服务:
-
在其他命名空间中配置的 Amazon ECS 任务
-
未针对 Service Connect 配置的 Amazon ECS 任务
-
Amazon ECS 之外的其他应用程序
这些应用程序可以通过 Service Connect 代理进行连接,但无法解析 Service Connect 端点名称。
若要让这些应用程序解析 ECS 任务的 IP 地址,则需使用另一种互连方法。有关互连方法的列表,请参阅 选择互连方法。
Service Connect 术语
以下服务可与 Service Connect 一起使用:
- 端口名称
-
为特定端口映射分配名称的 Service Connect 任务定义配置。此配置仅供 Amazon ECS Service Connect 使用。
- 客户端别名
-
分配端点中使用的端口号的 Amazon ECS 服务配置。此外,客户端别名可以分配端点的 DNS 名称,覆盖发现名称。如果 Amazon ECS 服务中未提供发现名称,则客户端别名将覆盖端口名称作为端点名称。有关端点示例,请参阅端点的定义。可以为一项 Amazon ECS 服务分配多个客户端别名。此配置仅供 Amazon ECS Service Connect 使用。
- 发现名称
-
可以为任务定义中的指定端口创建的可选中间名称。此名称用于创建 Amazon Cloud Map 服务。如果此名称未提供,则使用任务定义中的端口名称。可以为 Amazon ECS 服务的特定端口分配多个发现名称。此配置仅供 Amazon ECS Service Connect 使用。
Amazon Cloud Map 服务名称在命名空间中必须是唯一的。由于此限制,对于每个命名空间中的特定任务定义,您只能有一个 Service Connect 配置,而没有发现名称。
- endpoint
-
连接到 API 或网站的 URL。URL 包含协议、DNS 名称和端口。有关一般端点的更多信息,请参阅 Amazon Web Services 一般参考中Amazon 词汇表中的端点。
Service Connect 创建连接到 Amazon ECS 服务的端点,并在 Amazon ECS 服务中配置任务以连接到端点。URL 包含协议、DNS 名称和端口。您可以在任务定义中选择协议和端口名称,因为该端口必须与容器映像内的应用程序匹配。在服务中,您可以按名称选择每个端口,可以分配 DNS 名称。如果您未在 Amazon ECS 服务配置中指定 DNS 名称,则默认使用任务定义中的端口名称。例如,Service Connect 端点可以是
http://blog:80
、grpc://checkout:8080
或http://_db.production.internal:99
。 - Service Connect 服务
-
Amazon ECS 服务中单一端点的配置。这是 Service Connect 配置的一部分,由控制台中的 Service Connect 和发现名称配置中的单行组成,或由 Amazon ECS 服务的 JSON 配置中的
services
列表中的一个对象组成。此配置仅供 Amazon ECS Service Connect 使用。有关更多信息,请参阅《Amazon Elastic Container Service API 参考》中的 ServiceConnectService
。 - 命名空间
-
与 Service Connect 结合使用的 Amazon Cloud Map 命名空间的 Amazon 资源名称(ARN)短名称或全称。命名空间必须与 Amazon ECS 服务和集群在同一个 Amazon Web Services 区域 内。Amazon Cloud Map 中的命名空间类型不影响 Service Connect。
Service Connect 将 Amazon Cloud Map 命名空间用作相互对话的 Amazon ECS 任务的逻辑分组。每个 Amazon ECS 服务所属的命名空间只能是唯一的。命名空间中的服务可以分布在同一个 Amazon Web Services 账户 中的同一个 Amazon Web Services 区域 内的不同 Amazon ECS 集群中。由于每个集群都可以运行每种操作系统、CPU 架构、VPC 和 EC2、Fargate 和 External 类型的任务,因此您可以根据自己选择的任何标准随意组织服务。
- 客户端服务
-
一种运行网络客户端应用程序的 Amazon ECS 服务。此服务必须配置命名空间。服务中的每项任务都可以通过 Service Connect 代理容器发现并连接到命名空间中的所有端点。
如果任务中的任何容器需要从命名空间中的服务连接到端点,请选择客户端服务。如果前端、反向代理或负载均衡器应用程序通过其他方法(例如从 Elastic Load Balancing 中)接收外部流量,则它可以使用这种类型的 Service Connect 配置。
- 客户端-服务器服务
-
一种运行网络或 Web 服务应用程序的 Amazon ECS 服务。此服务必须配置命名空间和至少一个端点。使用端点即可访问服务中的每项任务。Service Connect 代理容器侦听端点名称和端口,将流量引导到任务中的应用程序容器。
如果有任何容器公开并侦听端口上的网络流量,请选择客户端-服务器服务。这些应用程序无需连接到同一命名空间中的其他客户端-服务器服务,但已配置客户端配置。后端、中间件、业务层或大多数微服务都会使用这种类型的 Service Connect 配置。如果您希望前端、反向代理或负载均衡器应用程序接收来自在相同命名空间中的使用 Service Connect 进行配置的其他服务的流量,则这些服务应使用此类 Service Connect 配置。
集群配置
您可以在创建集群时或通过更新集群来设置 Service Connect 的默认命名空间。如果您指定的命名空间名称不存在于同一个 Amazon Web Services 区域 和账户中,则会创建一个新的 HTTP 命名空间。
如果您创建集群并指定默认 Service Connect 命名空间,则在 Amazon ECS 创建命名空间期间,该集群将处于 PROVISIONING
状态等待。您可以在集群的状态中看到一个 attachment
,它显示了命名空间的状态。默认情况下,附件不显示在 Amazon CLI 中,您必须添加 --include ATTACHMENTS
才能查看。
Service Connect 服务配置
Service Connect 旨在要求最低配置。您需要为要在任务定义中与 Service Connect 结合使用的每个端口映射设置一个名称。在服务中,您需要开启 Service Connect 并选择一个命名空间来创建客户端服务。要创建客户端-服务器服务,您需要添加与其中一个端口映射的名称相匹配的单个 Service Connect 服务配置。Amazon ECS 重复使用任务定义中的端口号和端口名来定义 Service Connect 服务和端点。要覆盖这些值,可以在控制台中使用其他参数 Discovery、DNS 和 Port,或者在 Amazon ECS API 中分别使用 discoveryName
和 clientAliases
。
以下示例显示了在同一 Amazon ECS 服务中一起使用的每种 Service Connect 配置。提供了 Shell 注释,但请注意,用于 Amazon ECS 服务的 JSON 配置不支持注释。
{ ... serviceConnectConfiguration: { enabled: true, namespace: "internal", #config for client services can end here, only these two parameters are required. services: [{ portName: "http" }, #minimal client - server service config can end here.portName must match the "name" parameter of a port mapping in the task definition. { discoveryName: "http-second" #name the discoveryName to avoid a Task def port name collision with the minimal config in the same Cloud Map namespace portName: "http" }, { clientAliases: [{ dnsName: "db", port: 81 }] #use when the port in Task def is not the port that client apps use.Client apps can use http: //db:81 to connect discoveryName: "http-three" portName: "http" }, { clientAliases: [{ dnsName: "db.app", port: 81 }] #use when the port in Task def is not the port that client apps use.duplicates are fine as long as the discoveryName is different. discoveryName: "http-four" portName: "http", ingressPortOverride: 99 #If App should also accept traffic directly on Task def port. } ] } }
部署顺序
使用 Amazon ECS Service Connect 时,可以将每项 Amazon ECS 服务配置为运行接收网络请求的服务器应用程序(客户端-服务器服务),或者配置为运行发出请求的客户端应用程序(客户端服务)。
准备开始使用 Service Connect 时,从客户端-服务器服务开始。您可以向新服务或现有服务添加 Service Connect 配置。编辑和更新 Amazon ECS 服务以添加 Service Connect 配置后,Amazon ECS 将在命名空间中创建 Service Connect 端点。此外,Amazon ECS 在服务中创建新部署以替换当前正在运行的任务。
现有任务和其他应用程序可以继续连接到现有端点和外部应用程序。如果客户端-服务器服务通过横向扩展来添加任务,则来自客户端的新连接将立即在所有任务之间保持平衡。如果客户端-服务器服务已更新,则来自客户端的新连接将立即在新版本的任务之间保持平衡。
现有任务无法解析并连接到新端点。只有在同一命名空间中具有 Service Connect 配置且在此部署之后开始运行的新 Amazon ECS 任务才能解析并连接到此端点。例如,运行客户端应用程序的 Amazon ECS 服务必须在其连接的服务器部署完成后启动新任务。
这意味着客户端应用程序的操作员可以决定其应用程序的配置何时更改,即使服务器应用程序的操作员可以随时更改其配置。每次部署命名空间中的任何 Amazon ECS 服务时,命名空间中的端点列表都可能更改。
考虑以下示例。
首先,假设您正在创建可在单个 Amazon CloudFormation 模板和单个 Amazon CloudFormation 堆栈中供公有互联网使用的应用程序。公共发现和可访问性应最后由 Amazon CloudFormation 创建,包括前端客户端服务。服务需按此顺序创建,以防止前端客户端服务运行并向公众开放,但后端不会。这样可以避免在此期间向公众发送错误消息。在 Amazon CloudFormation 中,您必须使用 dependsOn
,用于向 Amazon CloudFormation 指示多个 Amazon ECS 服务不能并行或同时进行。对于客户端任务连接到的每个后端客户端-服务器服务,您都应将 dependsOn
添加到前端客户端服务中。
其次,假设存在没有 Service Connect 配置的前端服务。任务正在连接到现有的后端服务。首先使用 DNS 中的相同名称或前端所用的 clientAlias
,将客户端-服务器服务连接配置添加到后端服务。这会创建一个新部署,因此所有部署回滚检测或 Amazon Web Services Management Console、Amazon CLI、Amazon 开发工具包和其他方法将后端服务回滚并恢复到先前的部署和配置。如果您对后端服务的性能和行为感到满意,请向前端服务添加客户端或客户端-服务器 Service Connect 配置。只有新部署中的任务使用添加到这些新任务中的 Service Connect 代理。如果此配置有问题,通过使用部署回滚检测或 Amazon Web Services Management Console、Amazon CLI、Amazon 开发工具包和其他方法将后端服务回滚并恢复到先前的部署和配置,您可以回滚和恢复到以前的配置。如果您使用其他基于 DNS(而非 Service Connect)的服务发现系统,则在本地 DNS 缓存到期后,任何前端或客户端应用程序都会开始使用新端点并更改端点配置,这通常需要数小时。
联网
在默认配置中,您无需更改您的 Amazon VPC 安全组即可使用 Service Connect。Service Connect 代理侦听任务定义中的端口映射上的 containerPort
。
即使您在 Service Connect 服务配置中设置了端口号,这也不会更改 Service Connect 代理侦听的客户端-服务器服务的端口。当您设置此端口号时,Amazon ECS 会在这些任务内的 Service Connect 代理上更改客户端服务所连接的端点的端口。客户端服务中的代理使用 containerPort
连接到客户端-服务器服务中的代理。
如果要更改 Service Connect 代理侦听的端口,请更改客户端服务器服务的 Service Connect 配置中的 ingressPortOverride
。如果您更改此端口号,则必须允许 Amazon VPC 安全组中此端口上的入站流量,该端口由通往此服务的流量使用。
您的应用程序发送到为 Service Connect 配置的 Amazon ECS 服务的流量要求 Amazon VPC 和子网具有允许您使用的 containerPort
和 ingressOverridePort
端口号的路由表规则和网络 ACL 规则。
您可以使用 Service Connect 在 VPC 之间发送流量。您必须注意对路由表规则、网络 ACL 和安全组的相同要求,因为它们适用于两种 VPC。
例如,两个集群在不同的 VPC 中创建任务。每个集群中的服务都配置为使用相同的命名空间。这两个服务中的应用程序无需任何 VPC DNS 配置即可解析命名空间中的每个端点。但是,除非 VPC 对等、VPC 或子网路由表以及 VPC 网络 ACL 允许您正在使用的 containerPort
和 ingressOverridePort
端口号上的流量,否则代理无法进行连接
Service Connect 代理
如果使用 Service Connect 配置创建或更新 Amazon ECS 服务,Amazon ECS 则会在每个新任务启动时为其添加一个新容器。此容器不存在于任务定义中,您无法对其进行配置。Amazon ECS 在 Amazon ECS 服务中管理此容器的配置。因此,您可以在多个 Amazon ECS 服务、命名空间之间重复使用相同的任务定义,也可以在没有 Service Connect 的情况下运行任务。
在任务定义中,此容器的唯一配置是任务 CPU 和内存限制。在 ECS 服务中,此容器的唯一容器配置是 Service Connect 配置中的日志配置。
任务定义必须设置任务内存限制才能使用 Service Connect。未在其他容器的容器限制中分配的任务限制中的额外 CPU 和内存将由 Service Connect 代理容器和其他未设置容器限制的容器使用。
我们建议为 Service Connect 代理容器的任务 CPU 和内存添加 256 个 CPU 单元和至少 64 MiB 的内存。在 Amazon Fargate 上,可以设置的最低内存量为 1024 MiB 内存。在 Amazon EC2 上,任务内存是可选的,但对于 Service Connect 来说是必需的。
如果您希望此服务中的任务在峰值负载时每秒收到超过 500 个请求,我们建议在此 Service Connect 代理容器的任务定义中向您的任务 CPU 添加 512 个 CPU 单元。
如果您希望在命名空间中创建 100 个以上的 Service Connect 服务,或者在命名空间内的所有 Amazon ECS 服务中总共创建 2000 个任务,我们建议在 Service Connect 代理容器的任务内存中添加 128 MiB 的内存。在命名空间中的所有 Amazon ECS 服务使用的每个任务定义中,您都应该执行此操作。
Service Connect 参数
使用 Service Connect 时,以下参数具有额外字段。
参数位置 | 应用程序类型 | 描述 | 必填? |
---|---|---|---|
任务定义 | 客户端 | 在客户端任务定义中,Service Connect 没有可用的更改。 | 不适用 |
任务定义 | 客户端-服务器 | 服务器必须向容器的 portMappings 中的端口添加 name 字段。有关更多信息,请参阅portMappings。 |
是 |
任务定义 | 客户端-服务器 | 服务器可以选择提供应用程序协议(例如,HTTP)来接收其服务器应用程序的协议特定的指标(例如,HTTP
5xx )。 |
否 |
服务定义 | 客户端 | 客户端服务必须添加 serviceConnectConfiguration 才能配置要加入的命名空间。此命名空间必须包含该服务需要发现的所有服务器服务。有关更多信息,请参阅 serviceConnectConfiguration。 |
是 |
服务定义 | 客户端-服务器 | 服务器服务必须添加 serviceConnectConfiguration 才能配置提供该服务的 DNS 名称、端口号和命名空间。有关更多信息,请参阅 serviceConnectConfiguration。 |
是 |
集群 | 客户端 | 集群可以添加默认的 Service Connect 命名空间。在服务中配置 Service Connect 后,集群中的新服务会继承命名空间。有关更多信息,请参阅 Amazon ECS 集群。 | 否 |
集群 | 客户端-服务器 | 在适用于服务器服务的集群中,Service Connect 没有可用的更改。服务器任务定义和服务必须设置相应的配置。 | 不适用 |
Service Connect 注意事项
-
Service Connect 不支持 Windows 容器。
-
在 Fargate 中运行的任务必须使用 Fargate Linux 平台版本 1.4.0 或更高版本才能使用 Service Connect。
-
容器实例必须运行经 Amazon ECS 优化的 Amazon Linx 2 AMI 版本
2.0.20221115
或更高版本才能使用 Service Connect。您不能在其他 AMI 或操作系统上使用 Service Connect。需要额外的软件,这仅在此 AMI 中。 -
容器实例必须具有对资源
arn:aws:ecs:
的region
:0123456789012
:task-set/cluster
/*ecs:Poll
权限。如果您使用的是ecsInstanceRole
,则无需添加其他权限。AmazonEC2ContainerServiceforEC2Role
托管策略具有必要权限。有关更多信息,请参阅 Amazon ECS 容器实例 IAM 角色。 -
您不能使用容量提供商策略在 Amazon EC2 实例上通过 Service Connect 运行服务。将 EC2 启动类型用于具有 Service Connect 的服务。
-
Service Connect 不支持 Amazon ECS Anywhere 的
External
容器实例。 -
Service Connect 只支持使用滚动部署的服务。不支持使用蓝/绿和外部部署类型的服务。
-
您不能将 ECS 部署断路器与 Service Connect 一起使用。在删除带有断路器的服务之前,必须更新服务以移除断路器。如果您删除同时具有 Service Connect 和断路器的服务,则在创建具有相同配置的服务时可能会遇到问题。
-
任务定义必须设置任务内存限制才能使用 Service Connect。有关更多信息,请参阅 Service Connect 代理。
-
不支持为所有容器设置容器内存限制而不是设置任务内存限制的任务定义。
您可以在容器上设置容器内存限制,但必须将任务内存限制设置为大于容器内存限制总和的数字。未在容器限制中分配的任务限制中的额外 CPU 和内存将由 Service Connect 代理容器和其他未设置容器限制的容器使用。有关更多信息,请参阅 Service Connect 代理。
-
您可以将服务中的 Service Connect 配置为使用同一个 Amazon Web Services 账户 中的相同 Amazon Web Services 区域 中的任何 Amazon Cloud Map 命名空间。
-
每个 Amazon ECS 服务所属的命名空间只能是唯一的。
-
仅支持 Amazon ECS 服务创建的任务。无法为 Service Connect 配置独立任务。
-
所有端点在命名空间内必须是唯一的。
-
所有发现名称在命名空间内必须是唯一的。
-
在命名空间中运行的任务只能解析任务开始之前就已经存在的端点。在任务启动后添加到命名空间的新端点不会添加到任务配置中。有关更多信息,请参阅 部署顺序。
-
您可以在创建新集群时创建命名空间。删除集群时,Amazon ECS Service Connect 不会删除命名空间。如果使用完命名空间,则必须在 Amazon Cloud Map 中直接将其删除。
Service Connect 控制台体验
Service Connect 管理仅在新的 Amazon ECS 控制台中可用。
要创建新的命名空间,请使用 Amazon ECS 控制台创建新 Amazon ECS 集群并指定要创建的命名空间名称,或者使用 Amazon Cloud Map 控制台。Amazon ECS Service Connect 可以使用任何实例发现类型的 Amazon Cloud Map 命名空间。我们建议使用 API 调用类型,以使额外资源量最小化。要在 Amazon ECS 控制台中创建新的 Amazon ECS 集群和命名空间,请参阅 使用新控制台为 Fargate 启动类型创建集群。
所选 Amazon Web Services 区域 中的该 Amazon Web Services 账户 的每个 Amazon Cloud Map 命名空间都显示在 Amazon ECS 控制台的命名空间中。
要删除命名空间,请使用 Amazon Cloud Map 控制台。命名空间必须为空才能进行删除。
要创建新的 Amazon ECS 任务定义或注册现有任务定义的新修订版并使用 Service Connect,请参阅 使用新控制台创建任务定义。
要创建使用 Service Connect 的新 Amazon ECS 服务,请参阅 使用新控制台创建服务。
Service Connect 定价
Amazon ECS Service Connect 的定价取决于您是使用 Amazon Fargate 还是 Amazon EC2 基础设施来托管您的容器化工作负载。在 Amazon Outposts 上使用 Amazon ECS 时,则定价采用与您直接使用 Amazon EC2 时相同的模式。有关更多信息,请参阅 Amazon ECS 定价