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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

负载均衡器类型

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

应用程序负载均衡器

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 用户指南


                        应用程序负载均衡器

网络负载均衡器

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 用户指南


                        网络负载均衡器

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 CLI 或 SDK 仅修改ECS滚动部署控制器的负载均衡器配置,而不能修改 Amazon CodeDeploy 蓝/绿或外部的负载均衡器配置。 Amazon CloudFormation当您添加、更新或删除负载均衡器配置时,Amazon ECS 会使用更新后的 Elastic Load Balancing 配置启动新部署。这将导致任务注册到负载均衡器或从负载均衡器取消注册。我们建议您在更新 Elastic Load Balancing 配置之前在测试环境中对此进行验证。有关如何修改配置的信息,请参阅UpdateService亚马逊弹性容器服务 API 参考》。

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

  • 当使用将 IP 地址配置为目标且禁用的客户端 IP 保留的网络负载均衡器时,请求将被视为来自网络负载均衡器的私有 IP 地址。这意味着,只要您允许目标安全组中的传入请求和运行状况检查,Network Load Balancer 后面的服务就会有效地向世界开放。

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

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

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

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

  • 您的负载均衡器(应用程序负载均衡器或网络负载均衡器)必须都在相同 VPC 中。

  • 网络负载均衡器客户端 IP 地址保留也与 Fargate 目标兼容。

  • 为每项服务使用唯一的目标组。

    将同一个目标组用于多个服务可能会导致服务部署期间出现问题。