Amazon ECS
AWS Fargate 用户指南 (API 版本 2014-11-13)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

awsvpc 网络模式的任务联网

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

注意

有关对任务可用的其他网络模式的信息,请参阅 网络模式

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

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

任务联网方面的考量

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

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

    aws iam create-service-linked-role --aws-service-name ecs.amazonaws.com
  • 目前,只有Amazon ECS-optimized AMI 的 Linux 变体,或具有 ecs-init 程序包的其他 Amazon Linux 变体支持任务联网。

  • Fargate 任务能够配置为接收公有 IP 地址。

  • 在运行任务或创建使用 awsvpc 网络模式的服务时,限制为可在 awsvpcConfiguration 中指定 16 个子网和 5 个安全组。有关更多信息,请参阅 Amazon Elastic Container Service API Reference 中的 AwsVpcConfiguration

  • Amazon ECS 创建并附加的 ENI 不能由您的账户手动分离或修改。这是为了防止意外删除与正在运行的任务关联的 ENI。要释放任务的 ENI,请停止该任务。

  • 在用 awsvpc 网络模式启动任务时,Amazon ECS 容器代理会为每个任务创建一个附加的 pause 容器,然后在任务定义中启动该容器。然后,它通过执行 amazon-ecs-cni-plugins CNI 插件来配置 pause 容器的网络命名空间。然后,该代理会启动任务中的其余容器,以使其共享 pause 容器的网络堆栈。这意味着,一个任务中的所有容器均可通过 ENI 的 IP 地址来寻址,并且这些容器可以通过 localhost 接口相互通信。

  • 具有使用 awsvpc 网络模式的任务(例如,具有 Fargate 启动类型的任务)的服务仅支持 应用程序负载均衡器 和 网络负载均衡器;不支持 传统负载均衡器。此外,当您为这些服务创建任何目标组时,必须选择 ip 而不是 instance 作为目标类型。这是因为使用 awsvpc 网络模式的任务与 ENI 而不是 Amazon EC2 实例关联。有关更多信息,请参阅服务负载均衡

  • 如果 VPC 已更新,例如更改所使用的 DHCP 选项集,并且您希望在使用该 VPC 的任务中使更改生效,则必须停止这些任务并启动新任务。

启用任务联网

Fargate 任务需要使用 awsvpc 网络模式,因此默认启用任务联网。您的任务定义必须指定 awsvpc 网络模式。有关更多信息,请参阅网络模式。然后,当您运行任务或创建服务时,请指定网络配置,其中包含要放置任务的一个或多个子网以及要附加到其关联的 ENI 的一个或多个安全组。然后在这些子网中启动 Fargate 任务,并且指定的安全组与为该任务预配置的 ENI 关联。