1. 课程导论:NetPolicy 是什么、为什么需要观测蓝绿部署、延迟水位与异常事件的定义
1.1 NetPolicy 是什么
NetPolicy 是一个面向云原生容器网络的策略与可观测性引擎。它不只是一个网络策略控制器,更是一套将网络策略、流量观测、延迟水位和异常事件关联起来的统一平台。在 Kubernetes 环境中,NetPolicy 通过 CRD(Custom Resource Definition)定义网络访问规则,同时内置了数据面探针和事件管道,能够实时采集网络路径上的延迟、丢包、连接数等关键指标。
核心定位:NetPolicy = 网络策略控制器 + 容器网络可观测性探针 + 异常事件聚合器。它让 SRE 在蓝绿发布、灰度验证、故障注入等场景下,能够同时看到“策略是否生效”和“网络质量是否正常”。
| 能力维度 | 传统网络策略工具 | NetPolicy |
|---|---|---|
| 策略定义 | 仅支持 allow/deny 规则 | 支持 allow/deny + 流量染色 + 延迟注入 + 采样率控制 |
| 观测能力 | 无内置观测,依赖外部监控 | 内置延迟水位、连接状态、事件日志 |
| 蓝绿发布适配 | 需手动配置多套策略 | 原生支持蓝绿标签选择器与流量切换观测 |
| 异常事件输出 | 无结构化事件 | 输出标准化异常事件(延迟突增、连接拒绝、策略冲突) |
1.2 为什么需要观测蓝绿部署
蓝绿部署是云原生中最常用的零宕机发布策略之一。但在容器网络中,蓝绿切换不仅仅是 Service 的标签选择器更新,还涉及网络策略的生效顺序、连接 draining 超时、Sidecar 代理的热重启等复杂因素。如果没有专门的网络观测,蓝绿发布中常见的“流量黑洞”“半连接丢失”“延迟毛刺”等问题很难被快速定位。
- 策略生效延迟:从更新 Deployment 标签到网络策略控制器完成规则下发,中间存在秒级到分钟级的不一致窗口。
- 连接 draining 不彻底:旧版本 Pod 仍在处理长连接,新版本 Pod 已开始接收流量,导致请求路由混乱。
- 延迟水位突变:蓝绿切换瞬间,新 Pod 冷启动、DNS 缓存未刷新、iptables 规则重建都可能引发延迟飙升。
- 异常事件淹没:发布期间大量连接超时、重试、拒绝事件与正常业务告警混杂,缺乏网络维度的归因。
SRE 经验:在蓝绿发布期间,网络延迟的 P99 如果超过基线的 2 倍,通常不是应用代码问题,而是网络策略或代理配置未就绪。NetPolicy 的延迟水位观测可以自动标记这类“策略相关延迟异常”。
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 在发布期间能够回答三个关键问题:
- 当前流量是否按照策略正确路由到目标版本?
- 新版本的网络延迟水位是否在可接受范围内?
- 如果出现异常,是策略问题、应用问题还是基础设施问题?