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

服务负载均衡

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

Elastic Load Balancing 支持以下类型的负载均衡器:应用程序负载均衡器、网络负载均衡器 和 传统负载均衡器,而且 Amazon ECS 服务可以使用任一类型的负载均衡器。应用程序负载均衡器 用于路由 HTTP/HTTPS (或第 7 层) 流量。网络负载均衡器 和 传统负载均衡器 用于路由 TCP (或第 4 层) 流量。有关更多信息,请参阅 负载均衡器类型

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

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

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

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

注意

目前,Amazon ECS 服务只能指定一个负载均衡器或目标组。如果您的服务需要访问多个负载均衡端口 (例如某项 HTTP/HTTPS 服务需要端口 80 和端口 443),必须使用具有多个侦听器的 传统负载均衡器。使用 应用程序负载均衡器 可以将单一的 HTTP/HTTPS 服务分成两项服务,每项服务处理不同端口的请求。然后,每项服务可以使用单一 应用程序负载均衡器 之后的不同目标组。

负载均衡概念

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

    重要

    建议不要将多项服务连接到同一个 传统负载均衡器。由于整个容器实例是通过 传统负载均衡器(而不是主机和端口组合)注册和取消注册的,因此,此配置会在一个服务中的任务停止时导致出现问题,从而导致整个容器实例从 传统负载均衡器 取消注册,而相同容器实例上的来自不同服务的另一个任务仍将使用它。如果您要将多个服务连接到一个负载均衡器(例如,为了节省成本),建议您使用 应用程序负载均衡器。

  • 每项服务只能有一个负载均衡器或目标组。

  • 具有使用 awsvpc 网络模式的任务 (例如,那些 Fargate 启动类型的任务) 的服务仅支持 应用程序负载均衡器 和 网络负载均衡器。不支持 传统负载均衡器。此外,当您为这些服务创建任何目标组时,必须选择 ip 而不是 instance 作为目标类型。这是因为使用 awsvpc 网络模式的任务与弹性网络接口而不是 Amazon EC2 实例关联。

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

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

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

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

本页内容: