增加 Amazon ECS Linux 容器实例网络接口 - Amazon Elastic Container Service

增加 Amazon ECS Linux 容器实例网络接口

注意

此功能在 Fargate 上不可用。

每个使用 awsvpc 网络模式的 Amazon ECS 任务都会接收到自己的弹性网络接口(ENI),该网络接口附加到托管它的容器实例。可以附加到 Amazon EC2 实例的网络接口的数量有原定设置限制,并且主网络接口计为一个。例如,默认情况下,最多可将三个 ENI 附加到一个 c5.large 实例。实例的主网络接口计为一个,因此您可以向该实例再附加 2 个 ENI。由于每个使用 awsvpc 网络模式的任务都需一个 ENI,因此,您通常只能在该实例类型上运行两个此类任务。

Amazon ECS 支持使用受支持的 Amazon EC2 实例类型启动已增加 ENI 密度的容器实例。当您使用这些实例类型并开启 awsvpcTrunking 账户设置时,其他 ENI 将在新启动的容器实例上可用。此配置允许您在每个容器实例上放置更多任务。要使用控制台开启该功能,请参阅修改 Amazon ECS 账户设置。要使用 AWS CLI 开启该功能,请参阅使用 AWS CLI 管理 Amazon ECS 账户设置

例如,具有 awsvpcTrunkingc5.large 实例增加了十二个的 ENI 限制。容器实例将具有主网络接口,而 Amazon ECS 将创建一个“中继”网络接口并将此接口附加到容器实例。因此,此配置允许您在容器实例上启动 10 个任务,而不是当前的两个任务。

中继网络接口完全由 Amazon ECS 管理,并且会在您从集群中终止或注销容器实例时被删除。有关更多信息,请参阅 EC2 启动类型的 Amazon ECS 任务联网选项

注意事项

在使用 ENI 中继功能时,注意以下事项。

  • 只有经 Amazon ECS 优化的 AMI 的 Linux 版本,或其他具有容器代理 1.28.1 版本或更高版本以及 ecs-init 软件包版本 1.28.1-2 或更高版本的 Amazon Linux 版本才能支持增加的 ENI 限制。只有您使用经 Amazon ECS 优化的 AMI 的 Linux 版本,则将满足这些要求。目前不支持 Windows 容器。

  • 仅在启用 awsvpcTrunking 后启动的新 Amazon EC2 实例将收到增加的 ENI 限制和中继网络接口。无论采取何种措施,以前启动的实例都不会收到这些功能。

  • Amazon EC2 实例必须关闭基于资源的 IPv4 DNS 请求。要禁用此选项,请确保在使用 Amazon EC2 控制台中创建新实例时取消选中 Enable resource-based IPV4 (A record) DNS requests(启用基于资源的 IPV4(A 记录)DNS 请求)选项。要使用 AWS CLI 禁用此选项,使用以下命令:

    aws ec2 modify-private-dns-name-options --instance-id i-xxxxxxx --no-enable-resource-name-dns-a-record --no-dry-run
  • 不支持共享子网中的 Amazon EC2 实例。如果使用这些实例,则它们将无法注册到集群。

  • 您的 Amazon ECS 任务必须使用 awsvpc 网络模式和 EC2 启动类型。不管启动的实例数量如何,使用 Fargate 启动类型的任务都始终会收到专用的 ENI,因此不需要此功能。

  • 您的 Amazon ECS 任务必须在您的容器实例所在的 Amazon VPC 中启动。如果您的任务与容器实例不在同一 VPC 中,则任务将无法启动并显示属性错误。

  • 在启动新的容器实例时,实例将转换为 REGISTERING 状态,同时为实例预配置中继弹性网络接口。如果注册失败,则实例将转换为 REGISTRATION_FAILED 状态。您可以通过描述容器实例以查看 statusReason 字段,该字段描述失败的原因。然后可以手动注销或终止容器实例。一旦容器实例成功注销或终止,Amazon ECS 将删除中继 ENI。

    注意

    Amazon ECS 会发出容器实例状态更改事件,您可以监控这些事件,以查看过渡到 REGISTRATION_FAILED 状态。有关更多信息,请参阅 Amazon ECS 容器实例状态更改事件

  • 一旦终止容器实例,该实例就会转换为 DEREGISTERING 状态,同时取消预配置中继弹性网络接口。随后,实例将转换为 INACTIVE 状态。

  • 如果停止然后重新启动具有增加的 ENI 限制的公有子网中的容器实例,则实例将丢失其公有 IP 地址,并且容器代理将丢失其连接。

  • 启用 awsvpcTrunking 后,容器实例会收到一个额外的 ENI,其使用 VPC 的默认安全组,并由 Amazon ECS 管理。

先决条件

在启动具有增加的 ENI 限制的容器实例之前,必须完成以下先决条件。

  • 必须创建 Amazon ECS 的服务相关角色。Amazon ECS 服务链接角色为 Amazon ECS 提供代表您调用其他 AWS 服务的权限。此角色是在创建集群时 (或者在 AWS Management Console 中创建或更新服务时) 自动为您创建的。有关更多信息,请参阅 对 Amazon ECS 使用服务相关角色。您也可以使用以下 AWS CLI 命令创建服务相关角色。

    aws iam create-service-linked-role --aws-service-name ecs.amazonaws.com
  • 您的账户或容器实例 IAM 角色必须启用 awsvpcTrunking 账户设置。我们建议您创建两个容器实例角色(ecsInstanceRole)。然后,您可以为一个角色启用 awsvpcTrunking 账户设置,并将该角色用于需要 ENI 中继的任务。有关容器实例的更多信息,请参阅Amazon ECS 容器实例 IAM 角色

在满足先决条件后,您可以使用受支持的 Amazon EC2 实例类型之一来启动新容器实例,并且实例将具有增加的 ENI 限制。有关受支持实例类型的列表,请参阅 增加的 Amazon ECS 容器网络接口支持的实例。容器实例必须具有 1.28.1 版本或更高版本的容器代理以及 1.28.1-2 版本或更高版本的 ecs-init 程序包。只有您使用经 Amazon ECS 优化的 AMI 的 Linux 版本,则将满足这些要求。有关更多信息,请参阅 启动 Amazon ECS Linux 容器实例

重要

Amazon EC2 实例必须关闭基于资源的 IPv4 DNS 请求。要禁用此选项,请确保在使用 Amazon EC2 控制台中创建新实例时取消选中 Enable resource-based IPV4 (A record) DNS requests(启用基于资源的 IPV4(A 记录)DNS 请求)选项。要使用 AWS CLI 禁用此选项,使用以下命令:

aws ec2 modify-private-dns-name-options --instance-id i-xxxxxxx --no-enable-resource-name-dns-a-record --no-dry-run
使用 AWS CLI 查看具有增加的 ENI 限制的容器实例

每个容器实例都有一个默认网络接口,该接口称为中继网络接口。使用以下命令通过查询 ecs.awsvpc-trunk-id 属性来列出具有增加的 ENI 限制的容器实例,这表明其具有中继网络接口。

  • list-attributes (AWS CLI)

    aws ecs list-attributes \ --target-type container-instance \ --attribute-name ecs.awsvpc-trunk-id \ --cluster cluster_name \ --region us-east-1
  • Get-ECSAttributeList (AWS Tools for Windows PowerShell)

    Get-ECSAttributeList -TargetType container-instance -AttributeName ecs.awsvpc-trunk-id -Region us-east-1