4. 控制面策略体系:Pod安全策略(PSP)、网络策略(NetworkPolicy)、资源配额(ResourceQuota)、LimitRange
Kubernetes 控制面的策略体系是保障集群安全、网络隔离与资源公平性的核心机制。在 Prometheus 监控视角下,策略的命中率与误报率直接反映了控制面的执行效率与合规水位。本章深入剖析四大策略组件:Pod 安全策略(PSP)、网络策略(NetworkPolicy)、资源配额(ResourceQuota)与 LimitRange,并给出对应的监控指标设计。
监控前置提示: 策略命中率 = 策略生效次数 / 总请求次数;误报率 = 策略拒绝但实际合规的请求数 / 总拒绝次数。这两个指标是控制面健康度的核心 SLO。
4.1 策略体系总览与职责矩阵
四种策略在控制面中承担不同维度的准入与运行时约束。下表从作用域、生效时机、监控切入点三个维度进行对比:
| 策略类型 | 作用域 | 生效时机 | 核心监控指标 |
|---|---|---|---|
| PodSecurityPolicy (PSP) | 集群级 / 命名空间级 | Pod 创建准入阶段 | psp_denied_total、psp_allowed_total |
| NetworkPolicy | 命名空间级 | 网络流量运行时 | network_policy_rule_hit_total、network_policy_drop_total |
| ResourceQuota | 命名空间级 | 资源创建 / 更新准入 | quota_usage_ratio、quota_denied_total |
| LimitRange | 命名空间级 | Pod / Container 创建准入 | limitrange_default_applied_total、limitrange_min_max_violation_total |
关键发现: PSP 与 ResourceQuota 在准入阶段即拒绝请求,误报会导致用户创建失败;NetworkPolicy 的误报则表现为合法流量被静默丢弃,排查难度更高。
4.2 PodSecurityPolicy (PSP) — 安全准入守门员
PSP 是集群级别的安全策略资源,控制 Pod 能否使用特权容器、主机网络、主机路径等敏感能力。在 Kubernetes 1.21+ 中 PSP 已被弃用,但大量存量集群仍在使用,且其监控方法论可迁移至 Pod Security Admission (PSA)。
4.2.1 PSP 命中率与误报模型
- 命中率计算:
rate(psp_allowed_total[5m]) / (rate(psp_allowed_total[5m]) + rate(psp_denied_total[5m])) - 误报场景: 策略规则过于严格,例如禁止所有
hostNetwork但忽略了 DaemonSet 网络插件的合法需求。 - 监控告警: 当命中率低于 0.95 且误报率高于 0.05 时,触发策略审计工单。
# Prometheus 告警规则示例:PSP 拒绝率突增
- alert: PSPRejectionRateBurst
expr: |
rate(psp_denied_total[5m]) / rate(psp_allowed_total[5m]) > 0.1
for: 2m
labels:
severity: warning
annotations:
summary: "PSP 拒绝率超过 10%,可能存在策略误报或攻击行为"
4.3 NetworkPolicy — 微分段流量控制
NetworkPolicy 通过标签选择器定义 Pod 间、Pod 与外部服务的通信规则。其监控难点在于:策略命中是隐式的(流量通过即命中),而误报则表现为流量黑洞。
4.3.1 网络策略命中率与误报检测
- 命中率指标: 通过 eBPF / CNI 插件暴露的
network_policy_rule_hit_total与network_policy_drop_total。 - 误报排查: 对比
kube_networkpolicy_annotations中的预期白名单与实际丢包源 IP。 - 典型误报: 未放行 kube-dns 的 53 端口导致服务发现中断。
避坑指南: NetworkPolicy 默认拒绝所有入站流量。如果未显式放行
kube-system 命名空间的监控组件(如 Prometheus Operator),将导致指标采集失败,形成监控盲区。
4.4 ResourceQuota — 资源公平性保障
ResourceQuota 限制命名空间级别的 CPU、内存、存储及对象数量(如 Pod、Service 数量)。其命中率反映资源分配的饱和度,误报则通常由配额配置与业务实际需求不匹配导致。
4.4.1 配额命中率与误报场景
- 命中率指标:
kube_resourcequota{type="hard"} - kube_resourcequota{type="used"}趋近于 0 时表示配额即将耗尽。 - 误报案例: 同时设置
requests.cpu与limits.cpu配额,但业务容器未设置 limits 导致被拒绝。 - 监控策略: 使用
predict_linear预测配额耗尽时间,提前扩容或调整。
# 预测配额耗尽时间(以 CPU 为例)
predict_linear(kube_resourcequota{resource="requests.cpu", type="used"}[7d], 86400 * 3)
4.5 LimitRange — 默认资源约束与边界控制
LimitRange 为命名空间内的 Pod 或 Container 设置默认资源请求/限制,以及最小/最大值边界。它不直接拒绝请求,而是通过修改(mutate)或验证(validate)来保证合规。
4.5.1 LimitRange 命中率与误报模型
- 命中率:
rate(limitrange_default_applied_total[5m])表示默认值注入次数。 - 误报场景: 设置了
min: 512Mi内存,但业务 sidecar 容器只需要 128Mi,导致创建失败。 - 监控指标:
limitrange_min_max_violation_total记录超出边界的拒绝次数。
最佳实践: LimitRange 与 ResourceQuota 配合使用时,务必保证
min ≤ default ≤ max,且所有配额值在命名空间维度对齐,避免策略冲突导致的误报。
4.6 策略误报根因分析与监控看板设计
在 Prometheus 监控体系中,策略误报的根因分析需要多维数据关联。推荐使用以下 Grafana 看板面板组合:
| 面板名称 | 数据源 | 分析目标 |
|---|---|---|
| 策略拒绝率趋势 | psp_denied_total、quota_denied_total |
识别拒绝率突增的时间窗口 |
| 误报分布热力图 | kube_event{reason="FailedCreate"} |
按命名空间、策略类型聚合误报 |
| 配额饱和度预测 | kube_resourcequota + predict_linear |
提前发现配额瓶颈 |
| 网络策略丢包源 IP 分析 | network_policy_drop_total + 标签 |
定位误丢弃的合法流量来源 |
重要提醒: 策略误报的修复不应仅依赖监控告警,必须建立策略变更的 CI/CD 流水线,每次变更后自动执行合规性回归测试,确保命中率不下降、误报率不上升。