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

适用于 Amazon ECS 蓝绿部署的网络负载均衡器资源

要将网络负载均衡器用于 Amazon ECS 蓝绿部署,需要配置特定的资源,以便在蓝色服务修订和绿色服务修订之间进行流量路由。本节将介绍所需组件及其配置。

如果配置中包含网络负载均衡器,Amazon ECS 会在以下生命周期阶段添加 10 分钟的延迟:

  • PRE_SCALE_UP

  • TEST_TRAFFIC_SHIFT

  • PRODUCTION_TRAFFIC_SHIFT

此延迟用于解决网络负载均衡器的时间问题,该问题可能导致配置的流量权重与数据面板的实际流量路由不一致。

目标组

对于使用网络负载均衡器的蓝绿部署,需要创建两个目标组:

  • 一个用于蓝色服务修订(当前生产流量)的主目标组

  • 一个用于绿色服务修订(新服务修订)的备用目标组

两个目标组都应配置以下设置:

  • 目标类型:ip(适用于 Fargate 或采用 awsvpc 网络模式的 EC2)

  • 协议:TCP(或应用程序使用的协议)

  • 端口:应用程序侦听端口(HTTP 通常为 80

  • VPC:与 Amazon ECS 任务相同的 VPC

  • 运行状况检查设置:配置为正确检查应用程序的运行状况

    对于 TCP 运行状况检查,网络负载均衡器会与目标建立 TCP 连接。如果连接成功,则视为目标运行正常。

    对于 HTTP/HTTPS 运行状况检查,网络负载均衡器会向目标发送 HTTP/HTTPS 请求并验证响应。

在蓝绿部署期间,Amazon ECS 会根据部署阶段自动将任务注册到相应的目标组。

例 为网络负载均衡器创建目标组

以下 Amazon CLI 命令将创建两个目标组,用于使用网络负载均衡器的蓝绿部署:

aws elbv2 create-target-group \ --name blue-target-group \ --protocol TCP \ --port 80 \ --vpc-id vpc-abcd1234 \ --target-type ip \ --health-check-protocol TCP aws elbv2 create-target-group \ --name green-target-group \ --protocol TCP \ --port 80 \ --vpc-id vpc-abcd1234 \ --target-type ip \ --health-check-protocol TCP

网络负载均衡器

需要创建具有以下配置的网络负载均衡器:

  • 方案:面向互联网或内部(视需求而定)

  • IP 地址类型:IPv4

  • VPC:与 Amazon ECS 任务相同的 VPC

  • 子网:至少两个位于不同可用区的子网

与应用程序负载均衡器不同,网络负载均衡器在传输层(第 4 层)运行,不使用安全组。相反,需要确保与 Amazon ECS 任务关联的安全组允许来自网络负载均衡器的流量通过侦听器端口。

例 创建 Network Load Balancer

以下 Amazon CLI 命令将创建用于蓝绿部署的网络负载均衡器:

aws elbv2 create-load-balancer \ --name my-network-load-balancer \ --type network \ --subnets subnet-12345678 subnet-87654321

使用 NLB 进行蓝绿部署的注意事项

使用网络负载均衡器进行蓝绿部署时,请考虑以下事项:

  • 第 4 层操作:网络负载均衡器在传输层(第 4 层)运行,不检查应用程序层(第 7 层)的内容。这意味着您无法使用 HTTP 标头或路径进行路由决策。

  • 运行状况检查:网络负载均衡器运行状况检查仅限于 TCP、HTTP 或 HTTPS 协议。对于 TCP 运行状况检查,网络负载均衡器仅验证是否可以建立连接。

  • 连接保存:网络负载均衡器会保留客户端的源 IP 地址,可用于安全和日志记录目的。

  • 静态 IP 地址:网络负载均衡器为每个子网提供静态 IP 地址,可用于列入白名单或将客户端连接到固定 IP 地址。

  • 测试流量:网络负载均衡器不支持基于内容的路由,因此必须将测试流量发送到与生产流量不同的端口。

侦听器和规则

对于使用网络负载均衡器的蓝绿部署,需要配置以下侦听器:

  • 生产侦听器:处理生产流量(通常在端口 80 或 443 上)

    • 一开始,先将流量转发到主目标组(蓝色服务修订)

    • 部署后,将流量转发到备用目标组(绿色服务修订)

  • 测试侦听器(可选):处理测试流量,以便在转移生产流量之前验证绿色服务修订

    • 可以在不同的端口(例如 8080 或 8443)上进行配置

    • 在测试期间将流量转发到备用目标组(绿色服务修订)

与应用程序负载均衡器不同,网络负载均衡器不支持基于内容的路由规则。相反,流量是根据侦听器端口和协议进行路由的。

以下 Amazon CLI 命令将为网络负载均衡器创建生产和测试侦听器:

user-input 替换为您的值。

aws elbv2 create-listener \ --load-balancer-arn arn:aws:elasticloadbalancing:region:123456789012:loadbalancer/net/my-network-lb/1234567890123456 \ --protocol TCP \ --port 80 \ --default-actions Type=forward, TargetGroupArn=arn:aws:elasticloadbalancing:region:123456789012:targetgroup/blue-target-group/1234567890123456 aws elbv2 create-listener \ --load-balancer-arn arn:aws:elasticloadbalancing:region:123456789012:loadbalancer/net/my-network-lb/1234567890123456 \ --protocol TCP \ --port 8080 \ --default-actions Type=forward, TargetGroupArn=arn:aws:elasticloadbalancing:region:123456789012:targetgroup/green-target-group/1234567890123456

服务配置

必须拥有允许 Amazon ECS 代表您管理集群中负载均衡器资源的权限。有关更多信息,请参阅 适用于负载均衡器的 Amazon ECS 基础设施 IAM 角色

在为使用网络负载均衡器的蓝绿部署创建或更新 Amazon ECS 服务时,需要指定以下配置:

user-input 替换为您的值。

此配置中的关键组件包括:

  • targetGroupArn:主目标组(蓝色服务修订)的 ARN

  • alternateTargetGroupArn:备用目标组(绿色服务修订)的 ARN

  • productionListenerArn:适用于生产流量的侦听器的 ARN

  • testListenerArn(可选):适用于测试流量的侦听器的 ARN

  • roleArn:允许 Amazon ECS 管理网络负载均衡器资源的角色的 ARN

  • strategy:设置为 BLUE_GREEN 以启用蓝绿部署

  • bakeTimeInMinutes:绿色服务修订部署后,在转移生产流量之前等待的持续时间

{ "loadBalancers": [ { "targetGroupArn": "arn:aws:elasticloadbalancing:region:123456789012:targetgroup/blue-target-group/1234567890123456", "containerName": "container-name", "containerPort": 80, "advancedConfiguration": { "alternateTargetGroupArn": "arn:aws:elasticloadbalancing:region:123456789012:targetgroup/green-target-group/1234567890123456", "productionListenerArn": "arn:aws:elasticloadbalancing:region:123456789012:listener/net/my-network-lb/1234567890123456/1234567890123456", "testListenerArn": "arn:aws:elasticloadbalancing:region:123456789012:listener/net/my-network-lb/1234567890123456/2345678901234567", "roleArn": "arn:aws:iam::123456789012:role/ecs-nlb-role" } } ], "deploymentConfiguration": { "strategy": "BLUE_GREEN", "maximumPercent": 200, "minimumHealthyPercent": 100, "bakeTimeInMinutes": 5 } }

部署期间的流量流

在使用网络负载均衡器进行蓝绿部署期间,流量按如下方式流经系统:

  1. 初始状态:所有生产流量均路由到主目标组(蓝色服务修订)。

  2. 绿色服务修订部署:Amazon ECS 部署新任务并将其注册到备用目标组。

  3. 测试流量:如果配置了测试侦听器,则会将测试流量路由到备用目标组以验证绿色服务修订。

  4. 生产流量转移:Amazon ECS 更新生产侦听器,将流量路由到备用目标组(绿色服务修订)。

  5. 烘焙时间:生产流量转移后,蓝色服务修订和绿色服务修订同时运行的持续时间。

  6. 完成:成功部署后,蓝色服务修订将终止。

如果在部署期间检测到问题,Amazon ECS 可以通过将流量路由回主目标组(蓝色服务修订)实现自动回滚。