对 Amazon ECS 使用网络负载均衡器 - Amazon Elastic Container Service

对 Amazon ECS 使用网络负载均衡器

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

有关设置参数以加快部署速度的最佳实践的信息,请参阅:

将网络负载均衡器与 Amazon ECS 结合使用时,请考虑以下事项:

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

  • 附加到一项服务的目标组不能超过五个。

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

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

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

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

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

  • 对于 Fargate 任务,您必须使用平台版本 1.4.0(Linux)或 1.0.0(Windows)。

  • 如果您的支持负载均衡器的服务出现问题,请参阅 对 Amazon ECS 中的服务负载均衡器进行故障排除

  • 您的任务和负载均衡器必须都在相同 VPC 中。

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

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

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

有关如何创建网络负载均衡器的信息,请参阅网络负载均衡器中的创建网络负载均衡器

重要

如果服务的任务定义使用 awsvpc 网络模式(为 Fargate 启动类型所需),则必须选择 ip 而不是 instance 作为目标类型。这是因为使用 awsvpc 网络模式的任务与弹性网络接口而不是 Amazon EC2 实例关联。

如果实例具有以下实例类型,则不能用实例 ID 注册实例:C1、CC1、CC2、CG1、CG2、CR1、G1、G2、HI1、HS1、M1、M2、M3 和 T1。可以用 IP 地址注册这些类型的实例。