Amazon Elastic Container Service
开发人员指南 (API Version 2014-11-13)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

awsvpc 网络模式的任务联网

awsvpc 网络模式提供的任务联网功能使 Amazon ECS 任务具有与 Amazon EC2 实例相同的联网属性。当您在任务定义中使用 awsvpc 网络模式时,每个从该任务定义启动的任务都会获取其自己的弹性网络接口、主要私有 IP 地址和内部 DNS 主机名。任务联网功能简化了容器联网,使您可以更好地控制容器化应用程序如何与您的 VPC 内的其他服务进行通信。

通过允许您在 ECS 任务中更精细地使用安全组和网络监视工具,任务联网还为您的容器提供了更高的安全性。由于每个任务都有自己的弹性网络接口,因此您也可以利用其他 Amazon EC2 联网功能 (例如 VPC 流日志),以便您可以监控您任务的流量。此外,属于同一任务的容器可以通过 localhost 接口进行通信。一个任务在给定的时间只能有一个与之相关的弹性网络接口。

要使用任务联网,请在您的任务定义中指定 awsvpc 网络模式。然后,当您运行任务或创建服务时,请指定网络配置,其中包含要放置任务的子网和要附加到关联弹性网络接口的安全组。这些任务放置在这些子网中的有效容器实例上,并且指定的安全组与该任务预置的弹性网络接口相关联。

为您的任务创建的弹性网络接口完全由 Amazon ECS 管理。Amazon ECS 创建弹性网络接口并将其附加到具有指定安全组的容器实例。任务在弹性网络接口上发送和接收网络流量的方式与 Amazon EC2 实例使用其主要网络接口的方式相同。这些弹性网络接口在您账户的 Amazon EC2 控制台中可见,但它们不能由您的账户手动分离或修改。这是为了防止意外删除与正在运行的任务相关的弹性网络接口。您可以在 Amazon ECS 控制台中查看任务的弹性网络接口连接信息,或 DescribeTasks API 操作。当任务停止或服务缩减时,弹性网络接口将被释放。

启用任务联网

您的 ECS 容器实例需要至少 1.15.0 版的容器代理才能启用任务联网。但是,我们建议使用最新的容器代理版本。有关检查您的代理版本并更新到最新版本的信息,请参阅更新 Amazon ECS 容器代理。如果您正在使用经 Amazon ECS 优化的 AMI,您的实例至少需要 1.15.0-4 版的 ecs-init 程序包。如果您的容器实例是从版本 2017.09.a 或更高版本启动的,那么这些实例将包含所需版本的容器代理和 ecs-init。有关更多信息,请参阅 经 Amazon ECS 优化的 AMI

重要

当前,只有 ecs-init 程序包中经 Amazon ECS 优化的 AMI 或其他 Amazon Linux 变体才支持任务联网。

要使用任务联网,您的任务定义必须指定 awsvpc 网络模式。有关更多信息,请参阅 网络模式。当您使用指定 awsvpc 网络模式的任务定义运行任务或创建服务时,您可以指定一个网络配置,其中包含要考虑放置的 VPC 子网以及要附加到任务弹性网络接口的安全组。

使用 awsvpc 网络模式的任务和服务需要与 Amazon ECS 服务相关的角色,来向 Amazon ECS 提供代表您调用其他 AWS 服务的权限。此角色是在创建群集时 (或者在 AWS 管理控制台 中创建或更新服务时) 自动为您创建的。有关更多信息,请参阅 为 Amazon ECS 使用服务相关角色。您也可以使用以下 AWS CLI 命令创建服务相关的角色:

aws iam create-service-linked-role --aws-service-name ecs.amazonaws.com

任务联网方面的考量

使用任务联网时,需要考虑多个因素。

  • awsvpc 网络模式不提供具有公有 IP 地址的任务弹性网络接口。要访问 Internet,必须在配置为使用 NAT 网关的私有子网中启动任务。有关更多信息,请参阅 Amazon VPC 用户指南 中的 NAT 网关。入站网络访问必须使用私有 IP 地址或 DNS 主机名从 VPC 内进行,或者通过 VPC 内的负载均衡器进行路由。公有子网内启动的任务不具有出站网络访问权限。

  • 当前,只有 ecs-init 程序包中经 Amazon ECS 优化的 AMI 或其他 Amazon Linux 变体才支持任务联网。您的 Amazon ECS 容器实例需要至少 1.15.0 版的容器代理才能启用任务联网。我们建议使用最新的容器代理版本。

  • 使用 awsvpc 网络模式的每个任务都会接收到自己的弹性网络接口,该网络接口附加到托管该接口的容器实例。EC2 实例对可以附加到它们的弹性网络接口数量有限制,并且主网络接口计为一个。例如,c4.large 实例可能最多可以附加 3 个弹性网络接口。实例的主要网络适配器计为一个,因此您可以向该实例再附加 2 个弹性网络接口。由于每个 awsvpc 任务都需要一个弹性网络接口,因此您只能在该实例类型上运行 2 个此类任务。有关每个实例类型支持的弹性网络接口数量的更多信息,请参阅 Amazon EC2 用户指南(适用于 Linux 实例) 中的每个实例类型的每个网络接口的 IP 地址

  • Amazon ECS 仅计算附加到您的容器实例的弹性网络接口。如果手动将弹性网络接口附加到容器实例,则 Amazon ECS 可能会尝试在没有足够的可用网络适配器附件的情况下将任务放置在实例上。在这种情况下,任务会超时,将从 PROVISIONING 变为 DEPROVISIONING,然后变为 STOPPED。我们建议您不要手动将弹性网络接口附加到您的容器实例。

  • 容器实例必须使用 ecs.capability.task-eni 注册,才能考虑使用 awsvpc 网络模式放置任务。运行版本 1.15.0-4 或更高版本的 ecs-init 的容器实例注册有此属性。

  • 创建并附加到容器实例的弹性网络接口不能由您的账户手动分离或修改。这是为了防止意外删除与正在运行的任务相关的弹性网络接口。要释放任务的弹性网络接口,请停止任务。