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

awsvpc 网络模式的任务联网

awsvpc 网络模式提供的任务联网功能使 Amazon ECS 任务具有与 Amazon EC2 实例相同的联网属性。使用 awsvpc 网络模式简化了容器网络,您可以更好地控制容器化应用程序之间以及 VPC 内其他服务之间的通信方式。awsvpc 网络模式还为您的容器提供了更高的安全性,使您能够在任务中更精细地使用安全组和网络监视工具。由于每个任务都有自己的弹性网络接口(ENI),因此您也可以利用其他 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。您可以在 Amazon ECS 控制台中或使用 DescribeTasks API 操作查看任务的 ENI 连接信息。当任务停止或服务缩减时,将分离并删除任务 ENI。

如果您的账户、IAM 用户或角色已选择使用 awsvpcTrunking 账户设置,并且您已启动具有增加的 ENI 密度的容器实例,则 Amazon ECS 还会为您的容器实例创建和附加“中继”网络接口。中继网络接口完全由 Amazon ECS 托管。在您从 Amazon ECS 集群中终止或注销容器实例时,将删除中继 ENI。有关选择使用 awsvpcTrunking 账户设置的更多信息,请参阅 使用具有增加的 ENI 限制的容器实例

注意事项

使用 awsvpc 联网模式时,需要考虑多个因素。

在使用 Linux 操作系统时考虑以下事项。

  • 使用 awsvpc 网络模式的任务和服务需要与 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
  • 您的 Amazon EC2 Linux 实例需要版本 1.15.0 或更高版本的容器代理运行使用 awsvpc 网络模式。如果您正在使用经 Amazon ECS 优化的 AMI,您的实例将需要不低于 1.15.0-4 版本的 ecs-init 程序包。

  • 在 VPC 上启用 enableDnsHostnamesenableDnsSupport 选项时, 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 限制的更多信息,请参阅《Linux 实例的 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-2ecs-init 软件包。有关选择使用 awsvpcTrunking 账户设置的更多信息,请参阅 账户设置。有关 ENI 中继的更多信息,请参阅弹性网络接口中继

  • 当在 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-plugins CNI 插件来配置 pause 容器的网络命名空间。然后,该代理会启动任务中的其余容器,以使其共享 pause 容器的网络堆栈。这意味着,一个任务中的所有容器均可通过 ENI 的 IP 地址来寻址,并且这些容器可以通过 localhost 接口相互通信。

  • 任务使用 awsvpc 网络模式的服务只支持应用程序负载均衡器和网络负载均衡器。不支持经典负载均衡器。当您为这些服务创建任何目标组时,必须选择 ip 作为目标类型。请勿使用 instance。这是因为使用 awsvpc 网络模式的任务与 ENI 而不是 Amazon EC2 Linux 实例关联。有关更多信息,请参阅服务负载均衡

  • 如果您的 VPC 进行了更新以更改其使用的 DHCP 选项集,则无法将这些更改应用于现有任务。在应用这些更改的情况下启动新任务,验证它们是否正常工作,然后停止现有任务以安全地更改这些网络配置。

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

    aws iam create-service-linked-role --aws-service-name ecs.amazonaws.com
  • 您的 Amazon EC2 Windows 实例需要版本 1.54.0 或更高版本的容器代理运行使用 awsvpc 网络模式。在引导实例时,必须配置 awsvpc 网络模式所需的选项。有关更多信息,请参阅使用 Amazon EC2 用户数据引导 Windows 容器实例

  • 在 VPC 上同时启用 enableDnsHostnamesenableDnsSupport 选项时,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 限制的更多信息,请参阅《Windows 实例的 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-plugins CNI 插件来配置 pause 容器的网络命名空间。然后,该代理会启动任务中的其余容器,以使其共享 pause 容器的网络堆栈。这意味着,一个任务中的所有容器均可通过 ENI 的 IP 地址来寻址,并且这些容器可以通过 localhost 接口相互通信。

  • 任务使用 awsvpc 网络模式的服务只支持应用程序负载均衡器和网络负载均衡器。不支持经典负载均衡器。当您为这些服务创建任何目标组时,必须选择 ip 而不是 instance 作为目标类型。这是因为使用 awsvpc 网络模式的任务与 ENI 而不是 Amazon EC2 Linux Windows 关联。有关更多信息,请参阅服务负载均衡

  • 如果您的 VPC 进行了更新以更改其使用的 DHCP 选项集,则无法将这些更改应用于现有任务。在应用这些更改的情况下启动新任务,验证它们是否正常工作,然后停止现有任务以安全地更改这些网络配置。

  • 在 EC2 Windows 配置中使用 awsvpc 网络模式时,不支持以下内容:

    • 双堆栈配置

    • IPv6

    • ENI 中继

启用任务联网

为了使任务使用 awsvpc 网络模式,必须在任务定义中指定网络模式。有关更多信息,请参阅网络模式。然后,当您运行任务或创建服务时,请指定网络配置,其中包含要放置任务的一个或多个子网。另外,请指定要附加到 ENI 的一个或多个安全组。这些任务放置在与这些子网相同的可用性区域中的兼容 Amazon EC2 实例上,并且指定的安全组与为该任务预置的 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 帐户设置为已启用。有关更多信息,请参阅账户设置

  • 您的任务是使用 awsvpc 网络模式。

  • 您的 VPC 和子网已为 IPv6 配置。配置包括在指定子网中创建的网络接口。有关如何将 VPC 配置为双堆栈模式的更多信息,请参阅《Amazon VPC 用户指南》中的迁移到 IPv6为您的子网修改 IPv6 寻址属性