

# 对 Amazon ECS 使用网关负载均衡器
<a name="glb"></a>

网关负载均衡器在 Open Systems Interconnection（OSI）模型的第四层运行，网络层。它侦听所有端口上的所有 IP 数据包，并将流量转发到侦听器规则中指定的目标组。使用 5 元组（对于 TCP/UDP 流）或 3 元组（对于非 TCP/UDP 流）来保持流向特定目标设备的粘性。例如，如果任务的容器定义指定端口 80 为 NGINX 容器端口，并指定端口 0 为主机端口，则从容器实例的临时端口范围（例如，在最新的经 Amazon ECS 优化的 AMI 上，为 32768 到 61000）中动态选择主机端口。在启动任务时，NGINX 容器将作为实例 ID 和端口组合注册到网关负载均衡器，并且流量将分配到与该容器对应的实例 ID 和端口。此动态映射可让您在同一容器实例上拥有来自单个服务的多个任务。有关更多信息，请参阅*网关负载均衡器*中的[什么是网关负载均衡器](https://docs.amazonaws.cn/elasticloadbalancing/latest/gateway/introduction.html)。

有关设置参数以加快部署速度的最佳实践的信息，请参阅：
+ [优化 Amazon ECS 的负载均衡器运行状况检查参数](load-balancer-healthcheck.md)
+ [优化 Amazon ECS 的负载均衡器连接耗尽参数](load-balancer-connection-draining.md)

将网关负载均衡器与 Amazon ECS 结合使用时，请考虑以下事项：
+ Amazon ECS 需要与服务相关的 IAM 角色，该角色提供在创建和停止任务时向负载均衡器注册和注销目标所需的权限。有关更多信息，请参阅 [对 Amazon ECS 使用服务相关角色](using-service-linked-roles.md)。
+ 对于仅 IPv6 配置中的服务，必须将网关负载均衡器的目标组 IP 地址类型设置为 `dualstack`。
+ 如果服务的任务使用非 `awsvpc` 网络模式，则不支持网关负载均衡器。
+ 您的负载均衡器子网配置必须包含容器实例所在的所有可用区。
+ 创建服务后，无法从 Amazon Web Services 管理控制台 更改负载均衡器配置。您只能使用 Amazon Copilot、Amazon CloudFormation、Amazon CLI 或 SDK 来修改 `ECS` 滚动部署控制器的负载均衡器配置，而不是 Amazon CodeDeploy 蓝/绿或外部控制器。当您添加、更新或删除负载均衡器配置时，Amazon ECS 会使用更新后的 Elastic Load Balancing 配置启动新部署。这将导致任务注册到负载均衡器或从负载均衡器取消注册。我们建议您在更新 Elastic Load Balancing 配置之前在测试环境中对此进行验证。有关如何修改配置的信息，请参阅 *Amazon Elastic Container Service API 参考*中的 [UpdateService](https://docs.amazonaws.cn/AmazonECS/latest/APIReference/API_UpdateService.html)。
+ 如果服务任务未达到负载均衡器运行状况检查标准，则系统会停止并重启该任务。此过程将持续到您的服务达到预期的运行任务的数量。
+ 当使用将 IP 地址配置为目标的网关负载均衡器时，请求将被视为来自网关负载均衡器的私有 IP 地址。这意味着，只要您允许目标安全组中的传入请求和运行状况检查，网关负载均衡器后面的服务就会有效地向世界开放。
+ 对于 Fargate 任务，您必须使用平台版本 `1.4.0`（Linux）或 `1.0.0`（Windows）。
+ 如果您的支持负载均衡器的服务出现问题，请参阅 [对 Amazon ECS 中的服务负载均衡器进行故障排除](troubleshoot-service-load-balancers.md)。
+ 使用 `instance` 目标类型时，任务和负载均衡器必须位于同一 VPC 中。使用 `ip` 目标类型时，支持跨 VPC 连接。
+ 为每项服务使用唯一的目标组。

  为多个服务使用同一个目标组可能会导致服务部署期间出现问题。
+ 您必须指定与网关负载均衡器关联的目标组。

有关如何创建网关负载均衡器的信息，请参阅《网关负载均衡器》**中的[网关负载均衡器入门](https://docs.amazonaws.cn/elasticloadbalancing/latest/gateway/getting-started.html)

**重要**  
如果服务的任务定义使用 `awsvpc` 网络模式（为 Fargate 所需），则必须选择 `ip` 而不是 `instance` 作为目标类型。这是因为使用 `awsvpc` 网络模式的任务与弹性网络接口而不是 Amazon EC2 实例关联。  
如果实例具有以下实例类型，则不能用实例 ID 注册实例：C1、CC1、CC2、CG1、CG2、CR1、G1、G2、HI1、HS1、M1、M2、M3 和 T1。可以用 IP 地址注册这些类型的实例。