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 的一致性。
DNS 缓存导致流量“幽灵”映射 客户端 DNS 缓存 (旧 IP: 10.0.1.5) 蓝环境(旧) 已下线 绿环境(新) IP: 10.0.2.10 故障路径 客户端 → 缓存(旧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 入站端口),从而判断劫持是否生效。
Service Mesh 流量劫持:正常 vs 故障 ✅ 正常劫持 客户端 Sidecar 应用容器 流量路径:客户端 → Sidecar → 应用 ❌ 劫持丢失 客户端 Sidecar (未生效) 应用容器 流量路径:客户端 → 应用(绕过 Sidecar) mTLS 认证失败 / 策略不生效

故障场景对比总结

故障类型 根因 影响范围 Flowmon 关键检测指标
DNS 缓存 客户端/代理缓存未过期 部分客户端 DNS 响应 IP 与期望 IP 不一致
连接耗尽 连接池/ conntrack 表满 全局或特定后端 TCP SYN 超时率、重传率突增
路由黑洞 iptables/BGP 规则未同步 特定目标 IP 段 入站流量正常,出站流量为零
Service Mesh 劫持异常 Sidecar 配置/启动时序问题 特定 Pod 流量未经过 Sidecar 端口(如 15001)
专家建议:在蓝绿切换前,使用 Flowmon 的“流量基线”功能记录正常状态下的 DNS 解析时延、TCP 握手成功率、Sidecar 劫持比例等指标。切换后一旦偏离基线超过阈值,立即触发自动化回滚或降级策略。