负载均衡器类型 - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

负载均衡器类型

Elastic Load Balancing 支持以下类型的负载均衡器:Application Load Balancer、Network Load Balancer 和经典负载均衡器。Amazon ECS 服务可以使用这些类型的负载均衡器。Application Load Balancers 用于路由 HTTP/HTTPS (或第 7 层) 流量。Network Load Balancers 和 Classic Load Balancers用于路由 TCP(或第 4 层)通信。

Application Load Balancer

Application Load Balancer 在应用程序层 (HTTP/HTTPS) 作出路由决策,支持基于路径的路由,并且可以将请求路由到您的群集中每个容器实例上的一个或多个端口。Application Load Balancer 支持动态主机端口映射。例如,如果任务的容器定义指定端口 80 为 NGINX 容器端口,并指定端口 0 为主机端口,则从容器实例的临时端口范围(例如,在最新的经 Amazon ECS 优化的 AMI 上,为 32768 到 61000)中动态选择主机端口。在启动任务时,NGINX 容器将作为实例 ID 和端口组合注册到 Application Load Balancer,并且流量将分配到与该容器对应的实例 ID 和端口。此动态映射可让您在同一容器实例上拥有来自单个服务的多个任务。有关更多信息,请参阅 Application Load Balancer 用户指南


                        Application Load Balancer

Application Load Balancer 和 Network Load Balancer 注意事项

以下注意事项特定于使用 Application Load Balancer 或 Network Load Balancers 的 Amazon ECS 服务:

  • Amazon ECS 需要与服务相关的 IAM 角色,该角色提供在创建和停止任务时向负载均衡器注册和注销目标所需的权限。有关更多信息,请参阅对 Amazon ECS 使用服务相关角色

  • 对于使用 Application Load Balancer 或 Network Load Balancer 的服务,附加到一个服务的目标组不能超过五个。

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

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

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

  • 创建服务后,无法从 Amazon Web Services Management Console 更改负载均衡器配置。您只能使用 Amazon Copilot、Amazon CloudFormation、Amazon CLI 或 SDK 来修改 ECS 滚动部署控制器的负载均衡器配置,而不是 Amazon CodeDeploy 蓝/绿或外部控制器。当您添加、更新或删除负载均衡器配置时,Amazon ECS 会使用更新后的 Elastic Load Balancing 配置启动新部署。这将导致任务注册到负载均衡器或从负载均衡器取消注册。我们建议您在更新 Elastic Load Balancing 配置之前在测试环境中对此进行验证。有关如何修改配置的信息,请参阅 Amazon Elastic Container Service API 参考中的 UpdateService

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

  • 当使用配置为 IP 地址的 Network Load Balancers 作为目标时,请求将被视为来自 Network Load Balancers 的私有 IP 地址。这意味着,只要您允许目标安全组中的传入请求和运行状况检查,Network Load Balancer 后面的服务就会有效地向世界开放。

  • 使用 Network Load Balancer 将 UDP 流量路由到 Fargate 上的 Amazon ECS 任务,需要使用平台版本 1.4.0(Linux)或 1.0.0(Windows)。

  • 通过将任务定义中的 StopTimeout 设置为比目标组取消注册延迟时间长(该延迟应比客户端连接超时长)来最大限度降低客户端应用程序的错误。有关推荐的客户端配置的更多信息,请在此处参阅生成器库。

    此外,连接终止的 Network Load Balancer 目标组属性在取消注册时间后关闭所有剩余的连接。如果客户端不处理,这可能会导致客户端显示不希望的错误消息。

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

Network Load Balancer

Network Load Balancer 在传输层 (TCP/SSL) 制定路由决策。它每秒可以处理数百万个请求。在负载均衡器收到连接后,它会使用流式哈希路由算法从目标组中选择一个目标作为默认规则。它尝试在侦听器配置中指定的端口上打开一个到该选定目标的 TCP 连接。它将不修改标头的情况下转发请求。Network Load Balancers 支持动态主机端口映射。例如,如果任务的容器定义指定端口 80 为 NGINX 容器端口,并指定端口 0 为主机端口,则从容器实例的临时端口范围(例如,在最新的经 Amazon ECS 优化的 AMI 上,为 32768 到 61000)中动态选择主机端口。在启动任务时,NGINX 容器将作为实例 ID 和端口组合注册到 Network Load Balancer,并且流量将分配到与该容器对应的实例 ID 和端口。此动态映射可让您在同一容器实例上拥有来自单个服务的多个任务。有关 Network Load Balancer 的更多信息,请参阅 Network Load Balancers 用户指南


                        Network Load Balancer

经典负载均衡器

EC2-Classic 已于 2022 年 8 月 15 日停用。为避免工作负载中断,我们建议您在 2022 年 8 月 15 日之前从 EC2-Classic 迁移到 VPC。有关更多信息,请参阅博客文章 EC2-Classic Networking is Retiring - Here's How to Prepare。有关如何将 EC2-Classic 迁移到 VPC 的信息,请参阅《适用于 Linux 实例的 Amazon EC2 用户指南》中的从 EC2-Classic 迁移到 VPC

经典负载均衡器的注意事项

以下注意事项特定于使用经典负载均衡器的 Amazon ECS 服务:

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

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

    重要

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

  • 在对服务使用 Classic Load Balancers 时,不支持使用集群容量提供程序。