网络配置在蓝绿发布中的角色:负载均衡器、DNS切换、Ingress规则、防火墙策略
蓝绿发布的核心在于通过流量瞬时切换实现零停机部署,而这一切换动作的物理载体正是网络配置层。负载均衡器、DNS、Ingress规则与防火墙策略共同构成了流量调度的“四层控制面”,任何一层的配置错误都可能导致全量回滚。本章逐一拆解这四类网络组件在蓝绿发布中的具体职责与回滚触发条件。
2.1 负载均衡器:流量分发的核心锚点
负载均衡器(LB)是蓝绿发布中最直接的流量控制点。在传统架构中,LB通过后端服务器组(Target Group / Backend Set)的成员切换实现蓝绿环境间的流量迁移。
| 阶段 | LB配置状态 | 流量分布 | 回滚动作 |
|---|---|---|---|
| 稳定期 | 仅指向绿组(Green) | 100% → 绿环境 | — |
| 发布期 | 蓝组(Blue)加入,权重逐步调整 | 0%→100% 蓝组 | 将蓝组权重归零,恢复绿组100% |
| 回滚期 | 蓝组摘除,绿组恢复 | 100% → 绿环境 | LB配置回滚至发布前快照 |
关键指标:LB健康检查超时时间应小于应用启动时间,否则蓝组未就绪即被标记为“健康”,导致流量提前进入未就绪实例,触发回滚。
2.2 DNS切换:全局流量入口的原子操作
DNS切换适用于多数据中心或跨地域的蓝绿发布场景。通过修改DNS记录(A记录 / CNAME)将域名指向蓝环境或绿环境的入口IP,实现全局流量迁移。
- TTL(生存时间):低TTL(30-60秒)是快速回滚的前提,但会增加DNS查询压力。
- 权重轮询:支持按比例分配流量(如蓝:绿 = 10:90),逐步验证新环境。
- 回滚方式:将DNS记录恢复至发布前值,等待TTL过期后流量自然切回。
回滚陷阱:DNS缓存(浏览器、递归解析器、CDN)可能导致部分用户长时间指向已回滚的环境。建议在发布前强制降低TTL至60秒,并在回滚后配合HTTP响应头
Cache-Control: no-cache 加速收敛。
2.3 Ingress规则:Kubernetes环境下的流量网关
在Kubernetes蓝绿发布中,Ingress控制器(如Nginx Ingress、Traefik)通过路由规则将流量导向不同Service。常见的实现方式有两种:
| 方式 | 配置对象 | 切换动作 | 回滚速度 |
|---|---|---|---|
| Service切换 | Ingress → Service(蓝/绿) | 修改Ingress的 backend.serviceName |
秒级(配置热更新) |
| Canary Ingress | Ingress + Canary注解 | 调整 nginx.ingress.kubernetes.io/canary-weight |
秒级(权重归零) |
# 示例:Ingress规则切换至蓝环境
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress
spec:
rules:
- host: app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app-blue # 切换为 app-green 即回滚
port:
number: 80
最佳实践:将Ingress配置纳入GitOps管理(如ArgoCD),回滚时只需将Git仓库中的Ingress YAML恢复至上一版本,ArgoCD自动同步至集群。
2.4 防火墙策略:安全边界的动态适配
防火墙策略(安全组、网络ACL、云防火墙)在蓝绿发布中常被忽视,但却是回滚失败的高发区。新环境(蓝组)可能使用不同的IP段或安全组标签,若防火墙规则未同步更新,会导致:
- 健康检查失败:LB无法探测蓝组后端端口(如80/443被防火墙拦截)。
- 数据库访问阻断:蓝组实例IP不在数据库白名单中。
- 回滚后残留规则:蓝组防火墙规则未清理,造成安全漏洞。
2.5 四层配置的回滚优先级与依赖关系
当蓝绿发布触发回滚时,网络配置的恢复顺序直接影响服务恢复速度。错误的恢复顺序(如先恢复DNS再恢复LB)可能导致流量黑洞。
| 优先级 | 配置层 | 回滚动作 | 依赖条件 |
|---|---|---|---|
| P0 | 负载均衡器 | 立即摘除蓝组,恢复绿组100%权重 | 无依赖,可独立执行 |
| P1 | 防火墙策略 | 移除蓝环境安全组规则,恢复绿环境白名单 | 需确认绿环境IP未变更 |
| P2 | Ingress规则 | 恢复Service指向绿环境 | LB已恢复,Ingress控制器同步 |
| P3 | DNS切换 | 恢复DNS记录至绿环境入口 | 等待TTL过期,配合CDN缓存刷新 |
流水线集成要点:在CI/CD流水线的回滚阶段,应按照P0→P1→P2→P3的顺序依次执行网络配置恢复,并在每一步后执行连通性验证(如curl健康检查端点),确认无误后再执行下一步。任何一步失败都应中止回滚并告警。