1. 课程导论:NetPolicy 是什么、为什么需要观测蓝绿部署、延迟水位与异常事件的定义

1.1 NetPolicy 是什么

NetPolicy 是一个面向云原生容器网络的策略与可观测性引擎。它不只是一个网络策略控制器,更是一套将网络策略、流量观测、延迟水位和异常事件关联起来的统一平台。在 Kubernetes 环境中,NetPolicy 通过 CRD(Custom Resource Definition)定义网络访问规则,同时内置了数据面探针和事件管道,能够实时采集网络路径上的延迟、丢包、连接数等关键指标。

核心定位:NetPolicy = 网络策略控制器 + 容器网络可观测性探针 + 异常事件聚合器。它让 SRE 在蓝绿发布、灰度验证、故障注入等场景下,能够同时看到“策略是否生效”和“网络质量是否正常”。
能力维度 传统网络策略工具 NetPolicy
策略定义 仅支持 allow/deny 规则 支持 allow/deny + 流量染色 + 延迟注入 + 采样率控制
观测能力 无内置观测,依赖外部监控 内置延迟水位、连接状态、事件日志
蓝绿发布适配 需手动配置多套策略 原生支持蓝绿标签选择器与流量切换观测
异常事件输出 无结构化事件 输出标准化异常事件(延迟突增、连接拒绝、策略冲突)
NetPolicy 整体架构图 NetPolicy 整体架构 策略层(Policy Controller) CRD 定义 · 标签选择器 · 流量染色 · 延迟注入规则 观测层(Observability Probe) 延迟水位 · 连接状态 · 丢包率 · 吞吐量 · 事件日志 数据面(Data Plane) eBPF 探针 · Sidecar 代理 · 内核连接跟踪 异常事件 延迟突增 · 连接拒绝 延迟水位 P50/P95/P99 实时 策略与观测联动:策略变更自动触发水位基线对比 异常事件携带策略 ID 与流量染色标签

1.2 为什么需要观测蓝绿部署

蓝绿部署是云原生中最常用的零宕机发布策略之一。但在容器网络中,蓝绿切换不仅仅是 Service 的标签选择器更新,还涉及网络策略的生效顺序、连接 draining 超时、Sidecar 代理的热重启等复杂因素。如果没有专门的网络观测,蓝绿发布中常见的“流量黑洞”“半连接丢失”“延迟毛刺”等问题很难被快速定位。

  • 策略生效延迟:从更新 Deployment 标签到网络策略控制器完成规则下发,中间存在秒级到分钟级的不一致窗口。
  • 连接 draining 不彻底:旧版本 Pod 仍在处理长连接,新版本 Pod 已开始接收流量,导致请求路由混乱。
  • 延迟水位突变:蓝绿切换瞬间,新 Pod 冷启动、DNS 缓存未刷新、iptables 规则重建都可能引发延迟飙升。
  • 异常事件淹没:发布期间大量连接超时、重试、拒绝事件与正常业务告警混杂,缺乏网络维度的归因。
SRE 经验:在蓝绿发布期间,网络延迟的 P99 如果超过基线的 2 倍,通常不是应用代码问题,而是网络策略或代理配置未就绪。NetPolicy 的延迟水位观测可以自动标记这类“策略相关延迟异常”。
蓝绿部署网络观测关键点 蓝绿部署网络观测关键点 蓝环境(Blue) 版本 v1.0 · 标签 app=myapp,ver=v1 网络策略:allow from ingress,ver=v1 延迟水位基线:P50=12ms, P95=28ms 绿环境(Green) 版本 v2.0 · 标签 app=myapp,ver=v2 网络策略:allow from ingress,ver=v2 延迟水位基线:P50=15ms, P95=35ms 切换 观测点 1:策略下发延迟 从 Service 标签更新到 NetPolicy 确认新策略生效的时间差 观测点 2:连接 draining 水位 旧 Pod 活跃连接数归零时间 vs 新 Pod 连接建立成功率

1.3 延迟水位与异常事件的定义

在 NetPolicy 的观测体系中,延迟水位和异常事件是两个核心概念,它们共同构成了容器网络健康度的量化视图。

延迟水位(Latency Water Level)

延迟水位不是单一的延迟数值,而是一组基于时间窗口和百分位的动态基线。NetPolicy 在每个命名空间和策略维度上维护三个水位等级:

水位等级 定义 触发条件 SRE 响应建议
正常水位 P50 ≤ 基线 P50 × 1.2 常规流量波动 无需处理,自动记录
警戒水位 P95 ≥ 基线 P95 × 1.5 且持续 30s 蓝绿切换、小规模重试风暴 检查策略生效状态与连接 draining
危险水位 P99 ≥ 基线 P99 × 3 或连接失败率 > 5% 策略冲突、Sidecar 崩溃、网络分区 立即回滚或切断异常流量路径

异常事件(Anomaly Event)

异常事件是 NetPolicy 在检测到延迟水位越界或网络行为偏离预期时,自动生成的结构化记录。每个异常事件包含以下字段:

  • 事件类型:延迟突增、连接拒绝、策略冲突、流量丢失、证书过期。
  • 策略 ID:触发异常的网络策略唯一标识。
  • 流量染色标签:蓝/绿、版本号、泳道标识。
  • 时间窗口:异常开始时间、持续时长、恢复时间。
  • 上下文快照:异常时刻的延迟水位、连接数、CPU/内存使用率。
关键区别:传统监控的告警是“阈值触发”,NetPolicy 的异常事件是“基线偏离 + 策略关联”。例如,P99 从 20ms 升到 60ms 在传统监控中可能不告警(阈值设为 200ms),但 NetPolicy 会识别出这是基线 3 倍偏离,并自动关联到最近一次蓝绿策略变更,生成“延迟水位危险 + 策略变更关联”事件。

通过将延迟水位和异常事件绑定到具体的网络策略和蓝绿标签,NetPolicy 让 SRE 在发布期间能够回答三个关键问题:

  1. 当前流量是否按照策略正确路由到目标版本?
  2. 新版本的网络延迟水位是否在可接受范围内?
  3. 如果出现异常,是策略问题、应用问题还是基础设施问题?