增加 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 账户设置。
例如,具有 awsvpcTrunking
的 c5.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
\ --regionus-east-1
-
Get-ECSAttributeList (AWS Tools for Windows PowerShell)
Get-ECSAttributeList -TargetType container-instance -AttributeName ecs.awsvpc-trunk-id -Region
us-east-1