为 Amazon ECS 任务分配网络接口
awsvpc
网络模式提供的任务联网功能使 Amazon ECS 任务具有与 Amazon EC2 实例相同的联网属性。使用 awsvpc
网络模式可简化容器联网,因为您可以更好地控制您的应用程序相互之间以及与 VPC 内其他服务之间的通信方式。awsvpc
网络模式还为您的容器提供了更高的安全性,使您能够在任务中更精细地使用安全组和网络监视工具。您也可以利用其他 Amazon EC2 联网功能(例如 VPC 流日志),以便监控来往于您的任务的流量。此外,属于同一任务的容器可以通过 localhost
接口进行通信。
任务弹性网络接口(ENI)是 Amazon ECS 的完全托管功能。Amazon ECS 创建 ENI 并将它附加到具有指定安全组的 Amazon EC2 实例。任务在 ENI 上发送和接收网络流量的方式与 Amazon EC2 实例使用其主要网络接口的方式相同。预设情况下,每个任务 ENI 都会分配一个专用 IPv4 地址。如果您的 VPC 启用了双堆栈模式,并且您使用带有 IPv6 CIDR 块的子网,则任务 ENI 也将收到 IPv6 地址。每个任务只能有一个 ENI。
这些 ENI 在您账户的 Amazon EC2 控制台中可见。您的账户无法分离或修改 ENI。这是为了防止意外删除与正在运行的任务关联的 ENI。您可以在 Amazon ECS 控制台中或使用 DescribeTasks API 操作查看任务的 ENI 连接信息。当任务停止或服务缩减时,将分离并删除任务 ENI。
当您需要提高的 ENI 密度时,请使用 awsvpcTrunking
账户设置。Amazon ECS 还会为您的容器实例创建和附加“中继”网络接口。中继网络接口完全由 Amazon ECS 托管。在您从 Amazon ECS 集群中终止或注销容器实例时,将删除中继 ENI。有 awsvpcTrunking
账户设置的更多信息,请参阅 先决条件。
您可以在任务定义的 networkMode
参数中指定 awsvpc
。有关更多信息,请参阅 网络模式。
然后在运行任务或创建服务时使用 networkConfiguration
参数,其中包含用于放置任务的一个或多个子网,以及用于附加到 ENI 的一个或多个安全组。有关更多信息,请参阅 网络配置。这些任务放置在与这些子网相同的可用性区域中的兼容 Amazon EC2 实例上,并且指定的安全组与为该任务预置的 ENI 相关联。
Linux 注意事项
在使用 Linux 操作系统时考虑以下事项。
-
如果您在
awsvpc
模式下使用 a p5.48xlarge 实例,则在该实例上运行的任务不能超过 1 个。 -
使用
awsvpc
网络模式的任务和服务需要与 Amazon ECS 服务相关的角色,从而向 Amazon ECS 提供代表您调用其他 AWS 服务的权限。此角色是在创建集群时(或者在 AWS Management Console 中创建或更新服务时)自动为您创建的。有关更多信息,请参阅 对 Amazon ECS 使用服务相关角色。您也可以使用以下 AWS CLI 命令创建服务相关的角色:aws iam create-service-linked-role --aws-service-name ecs.amazonaws.com
-
您的 Amazon EC2 Linux 实例需要版本
1.15.0
或更高版本的容器代理运行使用awsvpc
网络模式。如果您正在使用经 Amazon ECS 优化的 AMI,您的实例将需要不低于1.15.0-4
版本的ecs-init
程序包。 -
在 VPC 上启用
enableDnsHostnames
和enableDnsSupport
选项时, Amazon ECS使用任务联网和 Amazon 提供的(内部)DNS 主机名来填充任务的主机名。如果未启用这些选项,则任务的 DNS 主机名将被设置为随机主机名。有关 VPC 的 DNS 设置的更多信息,请参阅《Amazon VPC 用户指南》中的在 VPC 中使用 DNS。 -
每个使用
awsvpc
网络模式的 Amazon ECS 任务都会接收到自己的 elastic network interface (ENI),该网络接口附加到托管它的 Amazon EC2 实例。可以附加到 Amazon EC2 Linux 实例的网络接口数量有默认配额。主网络接口算作该配额中的一个。例如,默认情况下,最多只能将三个 ENI 附加到一个c5.large
实例。实例的主网络接口计为一个。您可以向该实例再附加 2 个 ENI。由于每个使用awsvpc
网络模式的任务均需一个 ENI,因此,您通常只能在该实例类型上运行 2 个此类任务。要详细了解每种实例类型的默认 ENI 限制,请参阅《Amazon EC2 用户指南》中的每种实例类型的每个网络接口的 IP 地址数。 -
Amazon ECS 支持使用支持的实例类型启动 Amazon EC2 Linux 实例,并增加 ENI 密度。当您选择加入
awsvpcTrunking
账户设置并将使用这些实例类型的 Amazon EC2 Linux 实例注册到集群时,这些实例具有更高的 ENI 配额。将这些实例与此更高配额结合使用意味着您可以在每个 Amazon EC2 Linux 实例上放置更多的任务。为了将增加的 ENI 密度与中继功能结合使用,您的 Amazon EC2 实例必须使用版本1.28.1
或更高版本的容器代理。如果您正在使用经 Amazon ECS 优化的 AMI,您的实例将还需要不低于版本1.28.1-2
的ecs-init
软件包。有关选择使用awsvpcTrunking
账户设置的更多信息,请参阅 通过账户设置访问 Amazon ECS 功能。有关 ENI 中继的更多信息,请参阅增加 Amazon ECS Linux 容器实例网络接口。 -
当在 Amazon EC2 Linux 实例上托管使用
awsvpc
网络模式的任务时,不会为您的任务 ENI 提供公有 IP 地址。要访问互联网,必须在配置为使用 NAT 网关的私有子网中启动任务。有关更多信息,请参阅《Amazon VPC 用户指南》中的 NAT 网关。入站网络访问必须从使用私有 IP 地址的 VPC 内进行,或者通过 VPC 内的负载均衡器进行路由。在公有子网中启动的任务无法访问互联网。 -
Amazon ECS 仅为您识别连接到 Amazon EC2 Linux 实例的 ENI。如果您手动将 ENI 附加到您的实例,Amazon ECS 可能会尝试向没有足够网络适配器的实例添加任务。这可能会导致任务超时并转为取消预置状态,然后变为已停止状态。我们建议您不要手动将 ENI 附加到实例。
-
Amazon EC2 Linux 实例必须注册到可以考虑在
awsvpc
网络模式下放置任务的ecs.capability.task-eni
功能。运行版本1.15.0-4
或更高版本的ecs-init
的实例注册自动有此属性。 -
创建并连接到 Amazon EC2 Linux 实例的 ENI 不能手动分离或由您的账户修改。这是为了防止意外删除与正在运行的任务关联的 ENI。要释放任务的 ENI,请停止该任务。
-
在运行任务或创建使用
awsvpc
网络模式的服务时,限制为可在awsVpcConfiguration
中指定 16 个子网和 5 个安全组。有关更多信息,请参阅 Amazon Elastic Container Service API 参考中的 AwsVpcConfiguration。 -
在用
awsvpc
网络模式启动任务时,Amazon ECS 容器代理会为每个任务创建一个附加的pause
容器,然后在任务定义中启动该容器。然后,它通过运行 amazon-ecs-cni-pluginsCNI 插件来配置 pause
容器的网络命名空间。然后,该代理会启动任务中的其余容器,以使其共享pause
容器的网络堆栈。这意味着,一个任务中的所有容器均可通过 ENI 的 IP 地址来寻址,并且这些容器可以通过localhost
接口相互通信。 -
任务使用
awsvpc
网络模式的服务只支持应用程序负载均衡器和网络负载均衡器。当您为这些服务创建任何目标组时,必须选择ip
作为目标类型。切勿使用instance
。这是因为使用awsvpc
网络模式的任务与 ENI 而不是 Amazon EC2 Linux 实例关联。有关更多信息,请参阅 使用负载均衡分配 Amazon ECS 服务流量。 -
如果您的 VPC 进行了更新以更改其使用的 DHCP 选项集,则无法将这些更改应用于现有任务。在应用这些更改的情况下启动新任务,验证它们是否正常工作,然后停止现有任务以安全地更改这些网络配置。
Windows 注意事项
以下是使用 Windows 操作系统时的注意事项:
-
使用经 Amazon ECS 优化的 Windows Server 2016 AMI 的容器实例无法托管使用
awsvpc
网络模式的任务。如果您的集群包含经 Amazon ECS 优化的 Windows Server 2016 AMI 和支持awsvpc
网络模式的 Windows AMI,则使用awsvpc
网络模式的任务不会在 Windows 2016 Server 实例上启动。而是会在支持awsvpc
网络模式的实例上启动。 -
您的 Amazon EC2 Windows 实例需要版本
1.57.1
或更高版本的容器代理为使用awsvpc
网络模式的 Windows 容器使用 CloudWatch 指标。 -
使用
awsvpc
网络模式的任务和服务需要与 Amazon ECS 服务相关的角色,从而向 Amazon ECS 提供代表您调用其他 AWS 服务的权限。此角色是在创建集群时(或者在 AWS Management Console 中创建或更新服务时)自动为您创建的。有关更多信息,请参阅 对 Amazon ECS 使用服务相关角色。您也可以使用以下 AWS CLI 命令创建服务相关角色。aws iam create-service-linked-role --aws-service-name ecs.amazonaws.com
-
您的 Amazon EC2 Windows 实例需要版本
1.54.0
或更高版本的容器代理运行使用awsvpc
网络模式。在引导实例时,必须配置awsvpc
网络模式所需的选项。有关更多信息,请参阅 引导启动 Amazon ECS Windows 容器实例以传递数据。 -
在 VPC 上同时启用
enableDnsHostnames
和enableDnsSupport
选项时,Amazon ECS 会使用 Amazon 提供的(内部)DNS 主机名来填充任何主机名。如果未启用这些选项,则任务的 DNS 主机名为随机主机名。有关 VPC 的 DNS 设置的更多信息,请参阅《Amazon VPC 用户指南》中的在 VPC 中使用 DNS。 -
每个使用
awsvpc
网络模式的 Amazon ECS 任务都会接收到自己的 elastic network interface (ENI),该网络接口附加到托管它的 Amazon EC2 Windows 实例。可以附加到 Amazon EC2 Windows 实例的网络接口数量有默认配额。主网络接口算作该配额中的一个。例如,默认情况下,最多只可将三个 ENI 附加到一个c5.large
实例。实例的主网络接口计为其中一个。您可以向该实例再附加 2 个 ENI。由于每个使用awsvpc
网络模式的任务均需一个 ENI,因此,您通常只能在该实例类型上运行 2 个此类任务。要详细了解每种实例类型的默认 ENI 限制,请参阅《Amazon EC2 用户指南》中的每种实例类型的每个网络接口的 IP 地址数。 -
当在 Amazon EC2 Windows 上托管使用
awsvpc
网络模式时,不会为您的任务 ENI 提供公有 IP 地址。要访问互联网,请在配置为使用 NAT 网关的私有子网中启动任务。有关更多信息,请参阅《Amazon VPC 用户指南》中的 NAT 网关。入站网络访问必须使用私有 IP 地址从 VPC 内进行,或者通过 VPC 内的负载均衡器进行路由。在公有子网中启动的任务无法访问互联网。 -
Amazon ECS 仅为您识别已附加到 Amazon EC2 Windows 实例的 ENI。如果您手动将 ENI 附加到您的实例,Amazon ECS 可能会尝试向没有足够网络适配器的实例添加任务。这可能会导致任务超时并转为取消预置状态,然后变为已停止状态。我们建议您不要手动将 ENI 附加到实例。
-
Amazon EC2 Windows 实例必须注册到可以考虑在
awsvpc
网络模式下放置任务的ecs.capability.task-eni
功能。 -
您不能手动修改或分离创建并连接到 Amazon EC2 Windows 实例的 ENI。这是为了防止您意外删除与正在运行的任务关联的 ENI。要释放任务的 ENI,请停止该任务。
-
当运行任务或创建使用
awsvpc
网络模式的服务时,您最多只能在awsVpcConfiguration
中指定 16 个子网和 5 个安全组。有关更多信息,请参阅 Amazon Elastic Container Service API 参考中的 AwsVpcConfiguration。 -
在用
awsvpc
网络模式启动任务时,Amazon ECS 容器代理会为每个任务创建一个附加的pause
容器,然后在任务定义中启动该容器。然后,它通过运行 amazon-ecs-cni-pluginsCNI 插件来配置 pause
容器的网络命名空间。然后,该代理会启动任务中的其余容器,以使其共享pause
容器的网络堆栈。这意味着,一个任务中的所有容器均可通过 ENI 的 IP 地址来寻址,并且这些容器可以通过localhost
接口相互通信。 -
任务使用
awsvpc
网络模式的服务只支持应用程序负载均衡器和网络负载均衡器。当您为这些服务创建任何目标组时,必须选择ip
而不是instance
作为目标类型。这是因为使用awsvpc
网络模式的任务与 ENI 而不是 Amazon EC2 Linux Windows 关联。有关更多信息,请参阅 使用负载均衡分配 Amazon ECS 服务流量。 -
如果您的 VPC 进行了更新以更改其使用的 DHCP 选项集,则无法将这些更改应用于现有任务。在应用这些更改的情况下启动新任务,验证它们是否正常工作,然后停止现有任务以安全地更改这些网络配置。
-
在 EC2 Windows 配置中使用
awsvpc
网络模式时,不支持以下内容:-
双堆栈配置
-
IPv6
-
ENI 中继
-
在双堆栈模式下使用 VPC
在双堆栈模式下使用 VPC 时,您的任务可通过 IPv4 或 IPv6 或两者进行通信。IPv4 和 IPv6 地址彼此独立。因此,您必须在 VPC 中分别针对 IPv4 和 IPv6 配置路由和安全设置。有关如何将 VPC 配置为双堆栈模式的更多信息,请参阅《Amazon VPC 用户指南》 中的迁移到 IPv6。
如果您使用互联网网关或仅出站互联网网关配置 VPC,则可以在双堆栈模式下使用 VPC。通过这样做,分配了 IPv6 地址的任务可以通过互联网网关或仅限出口的互联网网关访问互联网。NAT 网关是可选项。有关更多信息,请参阅 Amazon VPC 用户用户指南中的互联网网关和 Egress-only 互联网网关。
如果满足以下条件,则向 Amazon ECS 任务分配 IPv6 地址:
-
托管该任务的 Amazon EC2 Linux 实例正在使用版本
1.45.0
或更高版本的容器代理。有关如何检查您的实例正在使用的代理版本以及根据需要进行更新的信息,请参阅更新 Amazon ECS 容器代理。 -
dualStackIPv6
账户设置为已启用。有关更多信息,请参阅 通过账户设置访问 Amazon ECS 功能。 -
您的任务是使用
awsvpc
网络模式。 -
您的 VPC 和子网已为 IPv6 配置。配置包括在指定子网中创建的网络接口。有关如何将 VPC 配置为双堆栈模式的更多信息,请参阅《Amazon VPC 用户指南》中的迁移到 IPv6 和为您的子网修改 IPv6 寻址属性。