2. 网络配置在蓝绿发布中的角色:流量入口、负载均衡、DNS解析、防火墙规则、网络ACL
蓝绿发布的核心目标是在两套完全独立的环境(蓝环境与绿环境)之间实现瞬时、可控的流量切换。网络配置在此过程中扮演着“交通指挥系统”的角色,任何一层的配置错误都可能导致流量丢失、服务中断或安全漏洞。本章将逐一剖析流量入口、负载均衡、DNS解析、防火墙规则与网络ACL在蓝绿发布中的具体职责与回滚要点。
2.1 流量入口:全局流量的第一道闸门
流量入口通常由云负载均衡器(如AWS ALB/NLB、阿里云SLB)、反向代理(Nginx、HAProxy)或API网关(Kong、APISIX)承担。在蓝绿发布中,流量入口负责将用户请求导向当前活跃环境(蓝或绿)。
关键回滚指标: 流量入口的监听器(Listener)与目标组(Target Group)绑定关系。回滚时需将监听器从指向绿环境的目标组切换回蓝环境的目标组。
| 组件 | 蓝环境状态 | 绿环境状态 | 回滚操作 |
|---|---|---|---|
| 监听器(80/443) | 已绑定蓝目标组 | 未绑定或备用 | 重新绑定蓝目标组 |
| 目标组 | 包含蓝环境实例 | 包含绿环境实例 | 恢复蓝目标组权重为100% |
| 健康检查 | 正常 | 可能异常(回滚时) | 确保蓝环境健康检查通过 |
2.2 负载均衡:流量分发与权重控制
负载均衡器在蓝绿发布中承担流量分发决策。通过调整后端服务器组的权重,可以实现灰度发布(例如10%流量到绿环境)或全量切换。回滚时,权重调整是最快速、最安全的操作之一。
- 权重切换: 将绿环境权重从100%逐步或立即降为0%,同时恢复蓝环境权重至100%。
- 会话保持: 回滚时需注意会话保持(Sticky Session)可能将已迁移到绿环境的用户请求继续导向绿环境,导致回滚不彻底。建议在回滚前清空会话表或缩短会话超时时间。
- 连接耗尽: 启用连接耗尽(Connection Draining),确保正在处理的请求完成后才断开连接,避免用户请求中断。
自动化建议: 在自动化脚本中,将负载均衡权重调整与健康检查状态绑定。只有当蓝环境健康检查全部通过后,才执行权重切换,避免回滚后蓝环境仍不可用。
2.3 DNS解析:全局流量调度与回滚延迟
DNS解析在蓝绿发布中通常用于多区域部署或需要用户侧缓存更新的场景。通过修改DNS记录(A记录、CNAME记录)将域名指向蓝环境或绿环境的负载均衡器。DNS回滚面临的最大挑战是缓存生效延迟。
| DNS记录类型 | 切换方式 | 回滚延迟 | 自动化策略 |
|---|---|---|---|
| A记录 | 修改IP地址指向 | TTL时间(通常60-300秒) | 降低TTL至60秒,加速回滚生效 |
| CNAME记录 | 修改别名指向 | TTL + 上游DNS缓存 | 使用加权DNS(如Route53)实现即时切换 |
| 加权DNS | 调整权重比例 | 几乎无延迟(服务端生效) | 推荐用于蓝绿发布,回滚只需将权重归零 |
回滚陷阱: 如果DNS TTL设置过长(如10分钟),回滚操作后用户仍可能访问到已下线的绿环境。务必在发布前将TTL临时降低至60秒或更低,并在回滚完成后恢复。
2.4 防火墙规则:环境隔离与访问控制
防火墙规则(Security Group、云防火墙策略)在蓝绿发布中用于隔离环境之间的非必要通信,并控制外部访问。回滚时,防火墙规则的回滚往往被忽视,但可能导致安全漏洞或服务不可达。
- 入站规则: 确保蓝环境的负载均衡器/反向代理IP仍在允许列表中。如果绿环境使用了新的源IP范围,回滚后需移除这些规则。
- 出站规则: 蓝环境可能需要访问数据库、缓存等后端服务。回滚后需确认出站规则未因绿环境配置而被误删。
- 环境间规则: 蓝绿环境之间通常应禁止直接通信。回滚时需检查是否有临时开放的互访规则未清理。
自动化回滚脚本示例(AWS Security Group):
# 回滚:移除绿环境安全组中的临时规则
aws ec2 revoke-security-group-ingress \
--group-id sg-green-env \
--protocol tcp \
--port 443 \
--cidr 0.0.0.0/0
# 恢复蓝环境安全组的原始规则
aws ec2 authorize-security-group-ingress \
--group-id sg-blue-env \
--protocol tcp \
--port 443 \
--cidr 10.0.0.0/16
2.5 网络ACL:子网级别的无状态过滤
网络ACL(Network Access Control List)在VPC子网层面提供无状态的流量过滤。与安全组不同,ACL规则需要同时配置入站和出站方向,且按规则编号顺序执行。在蓝绿发布中,ACL通常用于隔离蓝绿环境所在的子网。
| 对比维度 | 安全组(SG) | 网络ACL(NACL) |
|---|---|---|
| 状态性 | 有状态(自动允许回程流量) | 无状态(需显式配置回程规则) |
| 作用范围 | 实例级别 | 子网级别 |
| 规则评估 | 所有规则合并评估 | 按编号顺序评估(编号越小优先级越高) |
| 回滚风险 | 较低(规则变更影响范围小) | 较高(错误规则可能阻断整个子网流量) |
ACL回滚注意事项: 由于ACL是无状态的,回滚时必须同时恢复入站和出站规则。例如,如果绿环境子网ACL允许了新的出站端口,回滚后需删除该规则,否则蓝环境实例可能意外获得额外的出站权限。建议在自动化脚本中保存ACL规则的完整快照(JSON格式),回滚时直接覆盖。
2.6 网络配置回滚的自动化编排
将上述五层网络配置的回滚操作编排为一个原子化流程,是自动化蓝绿发布的关键。以下是一个推荐的回滚步骤清单:
- 暂停流量入口: 将负载均衡器监听器置为“停止接收新连接”状态(如有此功能)。
- 恢复DNS记录: 将域名指向蓝环境的负载均衡器,或调整加权DNS权重为蓝环境100%。
- 调整负载均衡权重: 将绿环境目标组权重降为0%,蓝环境权重恢复为100%。
- 恢复防火墙规则: 移除绿环境相关的临时安全组规则,恢复蓝环境的原始规则。
- 恢复网络ACL: 用保存的快照覆盖绿环境子网的ACL规则,确保蓝环境子网ACL未受影响。
- 验证连通性: 执行自动化健康检查与端到端测试,确认蓝环境服务正常。
- 清理绿环境资源: 确认回滚成功后,释放绿环境的临时网络资源(如弹性IP、负载均衡器目标组)。
幂等性设计: 所有网络配置回滚操作应设计为幂等。例如,移除一个不存在的安全组规则不应导致脚本报错。使用
--no-error-on-empty-rule 或类似参数,确保回滚脚本可重复执行而不产生副作用。