Amazon Elastic Container Service
开发人员指南 (API 版本 2014-11-13)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

服务负载均衡

您可以选择将 Amazon ECS 服务配置为使用 Elastic Load Balancing 跨服务中的任务平均分配流量。

Amazon ECS 服务支持 应用程序负载均衡器、网络负载均衡器 和 传统负载均衡器 负载均衡器类型。应用程序负载均衡器 用于路由 HTTP/HTTPS(或第 7 层)流量。网络负载均衡器 和 传统负载均衡器 用于路由 TCP(或第 4 层)流量。有关更多信息,请参阅 负载均衡器类型

应用程序负载均衡器提供了一些新功能,这使其非常适合用于 Amazon ECS 服务:

  • 每项服务可通过指定多个目标组来为来自多个负载均衡器的流量提供服务并公开多个负载均衡端口。

  • 它们受使用 Fargate 和 EC2 启动类型的任务的支持。

  • 应用程序负载均衡器 允许容器使用动态主机端口映射(以便每个容器实例允许来自同一服务的多个任务)。

  • 应用程序负载均衡器支持基于路径的路由和优先级规则(以便多个服务可使用一个应用程序负载均衡器上的相同侦听器端口)。

我们建议对 Amazon ECS 服务使用应用程序负载均衡器,以便利用这些最新功能,除非服务需要只有网络负载均衡器或 传统负载均衡器才提供的功能。有关 Elastic Load Balancing 以及负载均衡器类型之间的差异的更多信息,请参阅 Elastic Load Balancing 用户指南

服务负载均衡注意事项

使用服务负载平衡时请考虑以下事项。

应用程序负载均衡器和网络负载均衡器注意事项

以下注意事项特定于使用Application Load Balancer或网络负载均衡器的 Amazon ECS 服务:

  • 对于使用应用程序负载均衡器或网络负载均衡器的服务,附加到一个服务的目标组不能超过五个。

  • 如果服务具有使用 awsvpc 网络模式的任务,在为服务创建目标组时,必须选择 ip 作为目标类型,而不是instance。这是因为使用 awsvpc 网络模式的任务与弹性网络接口而不是 Amazon EC2 实例关联。

  • 如果使用应用程序负载均衡器的服务需要访问多个负载均衡端口(如某项 HTTP/HTTPS 服务需要端口 80 和端口 443),可以配置两个侦听器。一个侦听器负责将请求转发给服务的 HTTPS,另一个侦听器负责将 HTTP 请求重定向到适当的 HTTPS 端口。有关更多信息,请参阅 Application Load Balancer 用户指南 中的创建您的 应用程序负载均衡器 的侦听器

  • 您的负载均衡器子网配置必须包含容器实例所在的所有可用区。

  • 在创建服务后,在服务定义中指定的目标组 ARN 或负载均衡器名称、容器名称和容器端口是不可变的。您无法添加、删除或更改现有服务的负载均衡器配置。如果您更新服务的任务定义,则创建服务时指定的容器名称和容器端口必须保留在任务定义中。

  • 如果服务的任务未达到负载均衡器运行状况检查标准,则系统会停止并重启该任务。此过程将持续到您的服务达到预期的运行任务的数量。

  • 支持应用程序负载均衡器慢启动模式。有关更多信息,请参阅应用程序负载均衡器慢启动模式注意事项。有关慢启动模式,请参阅应用程序负载均衡器的目标组

  • 如果您的支持负载均衡器的服务出现问题,请参阅服务负载均衡器问题排查

应用程序负载均衡器慢启动模式注意事项

Amazon ECS 服务支持启用慢启动模式的 应用程序负载均衡器。有关慢启动模式的更多信息,请参阅应用程序负载均衡器的目标组

要确保服务计划程序在任务完成预热并准备好接收流量之前忽略不健康的容器运行状况检查,则需要以下配置:

  • 您必须配置容器运行状况检查以返回 UNHEALTHY 状态,直到慢启动期结束。

  • 您必须为 Amazon ECS 服务配置运行状况检查宽限期值,持续时间与慢启动模式持续时间相同。

在应用程序负载均衡器慢启动模式下使用不同的任务网络模式时,请考虑以下事项:

  • 使用 awsvpc 网络模式时,系统会向每个任务分配自己的弹性网络接口 (ENI) 和 IP 地址,允许应用程序负载均衡器将每个任务注册为目标组中的目标。这样,每个新注册的目标都启用了慢启动模式。

  • 使用 host 网络模式时,任务会绕过 Docker 联网构造,并将容器端口直接映射到 Amazon EC2 实例的网络接口或接口。您将容器实例注册为应用程序负载均衡器目标,而不是任务的 IP 地址。这意味着如果您希望慢启动模式有效工作,则每个实例只能运行一个任务。如果要更新现有任务或服务,或重新启动容器实例,则不会将容器实例重新注册为应用程序负载均衡器目标,这不会导致慢启动持续时间开始计时。

  • 使用 bridge 模式与使用 host 网络模式类似,您将容器实例注册为应用程序负载均衡器目标而不是 Amazon ECS 任务,因此适用上述相同的注意事项。

此外,以下注意事项特定于使用应用程序负载均衡器慢启动模式并将 Amazon ECS 任务添加为目标的情况:

  • 为目标组启用慢启动之后,已注册到目标组的目标不会进入慢启动模式。

  • 当您为空的目标组启用慢启动,然后使用单一注册操作注册一个或多个目标时,这些目标不会进入慢启动模式。仅当至少有一个已注册的目标未处于慢启动模式时,新注册的目标才会进入慢启动模式。

  • 如果您在慢启动模式下取消注册目标,目标将退出慢启动模式。如果您再次注册同一个目标,它会再次进入慢启动模式。

  • 如果处于慢启动模式下的目标在持续时间期限过去之前变得运行状况不佳,然后再次变为运行状况良好状态,则目标将保持为慢启动模式,直到持续时间期限过去后退出慢启动模式。如果未处于慢启动模式的目标从运行状况不佳变为运行状况良好,则它不会进入慢启动模式。

传统负载均衡器注意事项

以下注意事项特定于使用Classic Load Balancer的 Amazon ECS 服务:

  • 如果服务具有使用 awsvpc 网络模式的任务(如具有 Fargate 启动类型的任务),则不支持传统负载均衡器。

  • 如果任务属于配置为使用 传统负载均衡器 的服务的一部分,则此类任务不支持容器运行状况检查。

  • 在一个任务定义中启动的所有容器始终放置在相同的容器实例上。对于 传统负载均衡器,您可以选择通过在服务定义中定义多个主机端口并将这些侦听器端口添加到负载均衡器,来将多个容器(位于相同的任务定义中)放在同一负载均衡器后面。例如,如果任务定义包含在容器实例上使用端口 3030 的 Elasticsearch 以及在容器实例上使用端口 4040 的 Logstash 和 Kibana,则同一负载均衡器可通过两个侦听器将流量路由到 Elasticsearch 和 Kibana。有关更多信息,请参阅 Classic Load Balancer 用户指南 中的 传统负载均衡器的侦听器

    重要

    建议不要将多项服务连接到同一个 传统负载均衡器。由于整个容器实例已使用传统负载均衡器而不是主机和端口组合注册和取消注册,如果某个服务的任务停止,则此配置可能会导致问题。在此场景中,一个服务的任务停止可能导致整个容器实例从传统负载均衡器取消注册,而同一容器实例上其他服务的另一个任务仍在使用。如果您要将多个服务连接到一个负载均衡器,建议您使用应用程序负载均衡器。