Amazon ECS
AWS Fargate 用户指南 (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 用户指南

负载均衡概念

  • 对于使用 应用程序负载均衡器 或 网络负载均衡器 的服务,最多可将 5 个目标组附加到一个服务。

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

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

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

    重要

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

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

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

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

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

本页内容: