适用于 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-idvpc-abcd1234
\ --target-type ip \ --health-check-protocol TCP aws elbv2 create-target-group \ --namegreen-target-group
\ --protocol TCP \ --port 80 \ --vpc-idvpc-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 \ --subnetssubnet-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-arnarn: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 } }
部署期间的流量流
在使用网络负载均衡器进行蓝绿部署期间,流量按如下方式流经系统:
-
初始状态:所有生产流量均路由到主目标组(蓝色服务修订)。
-
绿色服务修订部署:Amazon ECS 部署新任务并将其注册到备用目标组。
-
测试流量:如果配置了测试侦听器,则会将测试流量路由到备用目标组以验证绿色服务修订。
-
生产流量转移:Amazon ECS 更新生产侦听器,将流量路由到备用目标组(绿色服务修订)。
-
烘焙时间:生产流量转移后,蓝色服务修订和绿色服务修订同时运行的持续时间。
-
完成:成功部署后,蓝色服务修订将终止。
如果在部署期间检测到问题,Amazon ECS 可以通过将流量路由回主目标组(蓝色服务修订)实现自动回滚。