2、网络故障场景分类:蓝绿切换中的常见网络问题
蓝绿发布的核心目标是在流量切换瞬间实现“零中断”或“亚秒级中断”。然而,实际生产环境中,网络层面的各种“暗坑”往往导致切换后出现大量连接失败、超时或流量异常。本章将系统梳理蓝绿切换中最常见的四类网络故障场景,并基于 Flowmon 的流量分析能力,为后续自动化排查奠定基础。
2.1 DNS 缓存:新旧 IP 的“幽灵”映射
蓝绿切换通常涉及 Service 或 Ingress 的 IP 地址变更。如果客户端或中间代理(如 Kube-Proxy、CoreDNS)缓存了旧 IP,切换后流量仍会发往已下线的“蓝”环境,导致连接被拒绝或超时。
典型表现:切换后部分客户端仍能正常访问,部分客户端报错“Connection Refused”或“No route to host”,且报错客户端分布与 DNS TTL 剩余时间强相关。
关键排查指标:
- DNS 解析延迟:切换后新 IP 的解析成功率是否达到 100%。
- TTL 剩余时间:客户端缓存中旧记录的存活时长。
- 上游 DNS 服务器日志:查询来源与响应 IP 的一致性。
2.2 连接耗尽:TCP 连接池的“雪崩”
蓝绿切换瞬间,大量旧连接被强制断开,客户端或负载均衡器会立即发起重连。如果连接池(如 Envoy、Nginx Ingress、Kernel conntrack)的容量未及时扩容,或 TIME_WAIT 状态连接堆积,新连接将无法建立,形成“连接耗尽”。
| 故障层 | 典型指标 | Flowmon 检测方法 |
|---|---|---|
| 客户端连接池 | 连接建立失败率 > 5% | 监控 TCP SYN 发送与 SYN-ACK 接收比例 |
| Sidecar Proxy | upstream_rq_pending_total 突增 | 抓取 Envoy /stats 并关联流量日志 |
| Kernel conntrack | conntrack 表使用率 > 90% | Flowmon 采集 netfilter 统计信息 |
| 负载均衡器 | 后端健康检查失败率上升 | 分析 LB 日志与后端 TCP 握手时延 |
避坑提示:连接耗尽往往不是瞬间发生的,而是切换后 5-30 秒内逐渐恶化。Flowmon 的实时流分析(NetFlow/IPFIX)可以捕捉到 TCP 重传率、SYN 超时比例等早期信号,比应用层告警提前 10-20 秒。
2.3 路由黑洞:流量“有去无回”
在 Kubernetes 环境中,蓝绿切换可能涉及 Service 的 selector 变更、EndpointSlice 更新或 NetworkPolicy 调整。如果路由规则未同步(例如 kube-proxy iptables 规则未刷新、Calico BGP 路由未收敛),流量可能被转发到不存在的 Pod IP,形成“路由黑洞”。
路由黑洞的典型特征:
- 客户端 TCP 连接一直处于
SYN_SENT状态,无任何响应。 - Flowmon 流量图中显示:目标 IP 的入站流量正常,但出站流量为零。
- Pod 日志中无任何连接记录(因为流量根本没到达 Pod)。
2.4 Service Mesh 流量劫持:Sidecar 的“隐形”干扰
在 Istio、Linkerd 等 Service Mesh 环境中,Sidecar 通过 iptables 规则劫持所有进出 Pod 的流量。蓝绿切换时,如果 Sidecar 的配置(如 VirtualService、DestinationRule)未同步,或 Sidecar 重启导致劫持规则丢失,会出现以下异常:
- 劫持丢失:流量绕过 Sidecar,直接到达应用容器,导致 mTLS 认证失败、流量策略失效。
- 劫持重复:流量被两次重定向,形成环路,TTL 耗尽后丢包。
- 劫持延迟:Sidecar 启动慢于应用容器,导致切换初期流量未被劫持。
Flowmon 排查要点:对比 Pod 的“实际流量路径”与“期望流量路径”。通过 Flowmon 的 L7 协议解析,可以识别出流量是否经过了 Sidecar 的 15001 端口(Istio 入站端口),从而判断劫持是否生效。
故障场景对比总结
| 故障类型 | 根因 | 影响范围 | Flowmon 关键检测指标 |
|---|---|---|---|
| DNS 缓存 | 客户端/代理缓存未过期 | 部分客户端 | DNS 响应 IP 与期望 IP 不一致 |
| 连接耗尽 | 连接池/ conntrack 表满 | 全局或特定后端 | TCP SYN 超时率、重传率突增 |
| 路由黑洞 | iptables/BGP 规则未同步 | 特定目标 IP 段 | 入站流量正常,出站流量为零 |
| Service Mesh 劫持异常 | Sidecar 配置/启动时序问题 | 特定 Pod | 流量未经过 Sidecar 端口(如 15001) |
专家建议:在蓝绿切换前,使用 Flowmon 的“流量基线”功能记录正常状态下的 DNS 解析时延、TCP 握手成功率、Sidecar 劫持比例等指标。切换后一旦偏离基线超过阈值,立即触发自动化回滚或降级策略。