弹性网络接口中继 - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

弹性网络接口中继

注意

此功能在 Fargate 上不可用。

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

Amazon ECS 支持使用受支持的 Amazon EC2 实例类型启动已增加 ENI 密度的容器实例。当您使用这些实例类型并选择使用 awsvpcTrunking 账户设置时,其他 ENI 将在新启动的容器实例上可用。此配置允许您使用 awsvpc 网络模式在每个容器实例上放置更多任务。通过使用此功能,启用了 awsvpcTrunkingc5.large 实例的 ENI 限制提高了 12。容器实例将具有主网络接口,而 Amazon ECS 将创建一个“中继”网络接口并将此接口附加到容器实例。因此,此配置允许您在容器实例上启动 10 个任务,而不是当前的两个任务。

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

ENI 中继注意事项

在使用 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 请求)选项。要使用 Amazon 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 状态。有关更多信息,请参阅容器实例状态更改事件

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

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

使用具有增加的 ENI 限制的容器实例

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

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

    aws iam create-service-linked-role --aws-service-name ecs.amazonaws.com
  • 您的账户或容器实例 IAM 角色必须选择使用 awsvpcTrunking 账户设置。可通过以下方式执行此任务:

    • 任何用户都可以使用 PutAccountSettingDefault API 来选择账户上的所有 IAM 用户和角色

    • 根用户可以使用 PutAccountSetting API 来选择将在集群上注册实例的 IAM 用户或容器实例角色

    • 在某个实例注册到集群之前,当 PutAccountSetting API 运行在该实例上时,容器实例角色可以选择使用自身

    有关更多信息,请参阅账户设置

在满足先决条件后,您可以使用受支持的 Amazon EC2 实例类型之一来启动新容器实例,并且实例将具有增加的 ENI 限制。有关受支持实例类型的列表,请参阅支持 Amazon EC2 实例类型。容器实例必须具有 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 请求)选项。要使用 Amazon CLI 禁用此选项,使用以下命令:

aws ec2 modify-private-dns-name-options --instance-id i-xxxxxxx --no-enable-resource-name-dns-a-record --no-dry-run

为您账户上的所有 IAM 用户和角色选择增加的 ENI 限制(Amazon Web Services Management Console)

  1. 作为账户的根用户,在 https://console.aws.amazon.com/ecs/ 上打开 Amazon ECS 经典控制台。

  2. 在屏幕顶部的导航栏中,选择要增加 ENI 限制的区域。

  3. 从控制面板中选择账户设置

  4. 对于 IAM 用户或角色,确保选择了您的根用户或容器实例 IAM 角色。

  5. 对于 AWSVPC 中继,请选中复选框。完成后,选择保存

    重要

    IAM 用户和 IAM 角色需要 ecs:PutAccountSetting 权限来执行此操作。

  6. 在确认屏幕上,选择 Confirm (确认) 以保存选择。

使用命令为您账户上的所有 IAM 用户和角色选择增加的 ENI 限制。

账户上的任意用户可以使用下列命令之一修改账户中所有 IAM 用户或角色的原定设置账户设置。这些更改将应用于整个 Amazon 账户,除非一个 IAM 用户或角色显式覆盖自己的这些设置。

  • put-account-setting-default (Amazon CLI)

    aws ecs put-account-setting-default \ --name awsvpcTrunking \ --value enabled \ --region us-east-1
  • Write-ECSAccountSettingDefault (Amazon Tools for Windows PowerShell)

    Write-ECSAccountSettingDefault -Name awsvpcTrunking -Value enabled -Region us-east-1 -Force

使用命令行,以根用户身份为 IAM 用户或容器实例 IAM 角色选择增加的 ENI 限制

账户的根用户可以使用以下命令之一,并在请求中指定委托人 IAM 用户或容器实例 角色的 ARN 来修改账户设置。

  • put-account-setting (Amazon CLI)

    以下示例用于修改特定 IAM 用户的账户设置:

    aws ecs put-account-setting \ --name awsvpcTrunking \ --value enabled \ --principal-arn arn:aws:iam::aws_account_id:user/userName \ --region us-east-1

    以下示例用于修改特定容器实例 IAM 角色的账户设置:

    aws ecs put-account-setting \ --name awsvpcTrunking \ --value enabled \ --principal-arn arn:aws:iam::aws_account_id:role/ecsInstanceRole \ --region us-east-1
  • Write-ECSAccountSetting (Amazon Tools for Windows PowerShell)

    以下示例用于修改特定 IAM 用户的账户设置:

    Write-ECSAccountSetting -Name awsvpcTrunking -Value enabled -PrincipalArn arn:aws:iam::aws_account_id:user/userName -Region us-east-1 -Force

    以下示例用于修改特定容器实例 IAM 角色的账户设置:

    Write-ECSAccountSetting -Name awsvpcTrunking -Value enabled -PrincipalArn arn:aws:iam::aws_account_id:role/ecsInstanceRole -Region us-east-1 -Force

使用 Amazon CLI 查看具有增加的 ENI 限制的容器实例

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

  • list-attributes (Amazon CLI)

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

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

支持 Amazon EC2 实例类型

下面显示了受支持的 Amazon EC2 实例类型,以及在选择使用 awsvpcTrunking 账户设置之前和之后,可以在每个实例类型上启动使用 awsvpc 网络模式的任务的数目。对于每个实例类型上的弹性网络接口 (ENI) 限制,将一个添加到当前任务限制中,因为主网络接口将计入限制,并将两个添加到新任务限制中,因为主网络接口和中继网络实例将再次计入限制。

重要

虽然同一实例系列中支持其他实例类型,但是,不支持 c5n, m5nm5dnr5nr5dn 实例类型。

a1 实例系列

实例类型

没有启用 ENI 中继的任务限制

启用 ENI 中继的任务限制

a1.medium

1

10

a1.large

2

10

a1.xlarge

3

20

a1.2xlarge

3

40

a1.4xlarge

7

60

c5 实例系列

实例类型

没有启用 ENI 中继的任务限制

启用 ENI 中继的任务限制

c5.large

2

10

c5.xlarge

3

20

c5.2xlarge

3

40

c5.4xlarge

7

60

c5.9xlarge

7

60

c5.12xlarge

7

60

c5.18xlarge

14

120

c5.24xlarge

14

120

c5a.large

2

10

c5a.xlarge

3

20

c5a.2xlarge

3

40

c5a.4xlarge

7 60

c5a.12xlarge

7

60

c5a.16xlarge

14

120

c5a.18xlarge

14

120

c5a.24xlarge

14

120

c5ad.large

2 10

c5ad.xlarge

3 20

c5ad.2xlarge

3 40

c5ad.4xlarge

7 60

c5ad.12xlarge

7 60

c5ad.16xlarge

14 120

c5ad.18xlarge

14 120

c5ad.24xlarge

14 120

c5d.large

2

10

c5d.xlarge

3

20

c5d.2xlarge

3

40

c5d.4xlarge

7

60

c5d.9xlarge

7

60

c5d.12xlarge

7

60

c5d.18xlarge

14

120

c5d.24xlarge

14

120

c6 实例系列

实例类型

没有启用 ENI 中继的任务限制

启用 ENI 中继的任务限制

c6g.medium

1

4

c6g.large

2

10

c6g.xlarge

3

20

c6g.2xlarge

3

40

c6g.4xlarge

7

60

c6g.8xlarge

7

60

c6g.12xlarge

7

60

c6g.16xlarge

14

120

c6g.metal

14

120

c6gd.medium

1

4

c6gd.large

2

10

c6gd.xlarge

3

20

c6gd.2xlarge

3

40

c6gd.4xlarge

7

60

c6gd.8xlarge

7

60

c6gd.12xlarge

7

60

c6gd.16xlarge

14

120

c6gd.metal

14

120

c7g 实例系列

实例类型

没有启用 ENI 中继的任务限制

启用 ENI 中继的任务限制

c7g.medium

1

4

c7g.large

2

10

c7g.xlarge

3

20

c7g.2xlarge

3

40

c7g.4xlarge

7

60

c7g.8xlarge

7

60

c7g.12xlarge

7

60

c7g.16xlarge

14

120

c7g.metal

14

120

g3 instance family

实例类型

没有启用 ENI 中继的任务限制

启用 ENI 中继的任务限制

g3.4xlarge

7

12

g3.8xlarge

7

12

g3.16xlarge

14

12

m5 实例系列

实例类型

没有启用 ENI 中继的任务限制

启用 ENI 中继的任务限制

m5.large

2

10

m5.xlarge

3

20

m5.2xlarge

3

40

m5.4xlarge

7

60

m5.8xlarge

7

60

m5.12xlarge

7

60

m5.16xlarge

14

120

m5.24xlarge

14

120

m5a.large

2

10

m5a.xlarge

3

20

m5a.2xlarge

3

40

m5a.4xlarge

7

60

m5a.8xlarge

7

60

m5a.12xlarge

7

60

m5a.16xlarge

14

120

m5a.24xlarge

14

120

m5ad.large

2

10

m5ad.xlarge

3

20

m5ad.2xlarge

3

40

m5ad.4xlarge

7

60

m5ad.8xlarge

7

60

m5ad.12xlarge

7

60

m5ad.16xlarge

14

120

m5ad.24xlarge

14

120

m5d.large

2

10

m5d.xlarge

3

20

m5d.2xlarge

3

40

m5d.4xlarge

7

60

m5d.8xlarge

7

60

m5d.12xlarge

7

60

m5d.16xlarge

14

120

m5d.24xlarge

14

120

m5d.metal

14

120

m6 实例系列

实例类型

没有启用 ENI 中继的任务限制

启用 ENI 中继的任务限制

m6i.large

2

10

m6i.xlarge

3

20

m6i.2xlarge

3

40

m6i.4xlarge

7

60

m6i.8xlarge

7

90

m6i.12xlarge

7

120

m6i.16xlarge

14

120

m6i.24xlarge

14

120

m6i.32xlarge

14

120

m6g.medium

1

4

m6g.large

2

10

m6g.xlarge

3

20

m6g.2xlarge

3

40

m6g.4xlarge

7

60

m6g.8xlarge

7

60

m6g.12xlarge

7

60

m6g.16xlarge

14

120

m6g.metal

14

120

m6gd.medium

1

4

m6gd.large

2

10

m6gd.xlarge

3

20

m6gd.2xlarge

3

40

m6gd.4xlarge

7

60

m6gd.8xlarge

7

60

m6gd.12xlarge

7

60

m6gd.16xlarge

14

120

m6gd.metal

14

120

p3 实例系列

实例类型

没有启用 ENI 中继的任务限制

启用 ENI 中继的任务限制

p3.2xlarge

3

40

p3.8xlarge

7

60

p3.16xlarge

7

120

r5 实例系列

实例类型

没有启用 ENI 中继的任务限制

启用 ENI 中继的任务限制

r5.large

2

10

r5.xlarge

3

20

r5.2xlarge

3

40

r5.4xlarge

7

60

r5.12xlarge

7

60

r5.16xlarge

14

120

r5.24xlarge

14

120

r5a.large

2

10

r5a.xlarge

3

20

r5a.2xlarge

3

40

r5a.4xlarge

7

60

r5a.8xlarge

7

60

r5a.12xlarge

7

60

r5a.16xlarge

14

120

r5a.24xlarge

14

120

r5ad.large

2

10

r5ad.xlarge

3

20

r5ad.2xlarge

3

40

r5ad.4xlarge

7

60

r5ad.8xlarge

7

60

r5ad.12xlarge

7

60

r5ad.16xlarge

14

120

r5ad.24xlarge

14

120

r5d.large

2

10

r5d.xlarge

3

20

r5d.2xlarge

3

40

r5d.4xlarge

7

60

r5d.8xlarge

7

60

r5d.12xlarge

7

60

r5d.16xlarge

14

120

r5d.24xlarge

14

120

r6 实例系列

实例类型

没有启用 ENI 中继的任务限制

启用 ENI 中继的任务限制

r6g.medium

1

4

r6g.large

2

10

r6g.xlarge

3

20

r6g.2xlarge

3

40

r6g.4xlarge

7

60

r6g.8xlarge

7

60

r6g.12xlarge

7

60

r6g.16xlarge

14

120

r6g.metal

14

120

r6gd.medium

1

4

r6gd.large

2

10

r6gd.xlarge

3

20

r6gd.2xlarge

3

40

r6gd.4xlarge

7

60

r6gd.8xlarge

7

60

r6gd.12xlarge

7

60

r6gd.16xlarge

14

120

r6gd.metal

14

120