3. K8s 策略评审流程:策略定义、策略分发、策略执行、策略审计与报告
K8s 策略评审是保障集群安全与合规的核心环节。一个完整的策略评审流程通常包含四个阶段:策略定义、策略分发、策略执行与策略审计与报告。这四个阶段形成闭环,确保策略从制定到落地的可追溯性与一致性。
核心原则:策略即代码(Policy as Code)。所有策略应声明式定义、版本化管理、自动化分发与执行,最终通过审计报告验证合规状态。
3.1 策略定义
策略定义是流程的起点,决定了集群的安全基线。策略通常以 OPA/Gatekeeper 的 ConstraintTemplate 与 Constraint、Kyverno 的 ClusterPolicy 或自定义准入 Webhook 的形式存在。
| 策略类型 | 定义方式 | 典型工具 | 示例场景 |
|---|---|---|---|
| 准入控制策略 | Rego / YAML | OPA Gatekeeper | 禁止特权容器 |
| 变异策略 | YAML / JSON Patch | Kyverno | 自动注入 Sidecar |
| 网络策略 | NetworkPolicy YAML | Calico / Cilium | 限制 Pod 间通信 |
| 资源配额策略 | ResourceQuota / LimitRange | K8s 原生 | 限制 Namespace 资源上限 |
最佳实践:策略定义应遵循 DRY(Don't Repeat Yourself)原则,将通用规则抽象为模板,通过参数化实现不同环境的差异化配置。
3.2 策略分发
策略分发确保定义好的策略能够一致地部署到目标集群。分发方式包括 GitOps 流水线、Operator 自动同步、以及 Helm Chart 批量部署。
- GitOps 模式:将策略 YAML 存储在 Git 仓库,通过 ArgoCD 或 Flux 自动同步到集群。
- Operator 模式:使用 Gatekeeper Operator 或 Kyverno Operator 管理策略的生命周期。
- 多集群分发:通过 Cluster API 或 Rancher 将策略模板分发到多个集群,确保一致性。
常见风险:策略分发时未考虑集群版本差异,导致旧版本集群无法识别新策略字段。建议在分发前执行
kubectl dry-run 或使用策略模拟工具验证兼容性。
3.3 策略执行
策略执行是策略生效的关键阶段。K8s 提供多种执行点:准入控制(Admission Control)、运行时审计(Audit)与周期性扫描(Reconcilation)。
# 示例:Gatekeeper 准入控制日志
{
"level": "info",
"msg": "admission review",
"resource": "Pod",
"namespace": "production",
"constraint": "block-privileged-containers",
"allowed": false,
"reason": "Container 'app' has securityContext.privileged=true"
}
执行模式对比:
| 执行模式 | 触发时机 | 阻断能力 | 性能影响 | 适用场景 |
|---|---|---|---|---|
| 准入控制 | 资源创建/更新时 | 强阻断 | 中等 | 安全基线、合规检查 |
| 运行时审计 | 资源运行期间 | 仅告警 | 低 | 异常行为检测 |
| 周期性扫描 | 定时执行 | 事后修复 | 低 | 配置漂移检测 |
执行策略:对于生产环境,建议将关键安全策略设置为“准入控制+强阻断”,将非关键策略设置为“运行时审计+告警”,避免过度阻断影响业务。
3.4 策略审计与报告
审计与报告是策略闭环的最后一步,用于验证策略是否被正确执行、是否存在违规资源、以及策略本身是否需要更新。
- 审计数据来源:K8s Audit Logs、Gatekeeper Audit、Kyverno Report、自定义 Webhook 日志。
- 报告内容:违规资源列表、策略命中率、策略覆盖率、合规趋势。
- 工具链:Falco(运行时审计)、kube-bench(CIS 基准)、OPA 审计 API、Prometheus + Grafana(可视化)。
# 查看 Gatekeeper 审计结果
kubectl get constrainttemplates
kubectl get constraints
kubectl get k8srequiredlabels.constraints.gatekeeper.sh -o yaml
审计频率建议:核心安全策略(如禁止特权容器)建议每小时审计一次;资源配额策略可每天审计一次;网络策略建议实时审计。
3.5 策略评审清单
在实际评审过程中,建议按照以下清单逐项检查:
| 评审阶段 | 检查项 | 通过标准 |
|---|---|---|
| 策略定义 | 策略是否版本化管理?是否包含参数化模板? | Git 仓库中至少包含 3 个版本标签 |
| 策略分发 | 分发流水线是否自动化?是否覆盖所有目标集群? | CI/CD 流水线成功率 > 99% |
| 策略执行 | 关键策略是否启用准入控制?非关键策略是否启用审计? | 无特权容器违规事件 |
| 审计与报告 | 审计日志是否持久化?报告是否定期生成? | 审计数据保留 > 90 天,周报自动发送 |
常见误区:只关注策略定义与执行,忽略审计与报告环节。没有审计反馈的策略评审是单向的、不可持续的,最终会导致策略与实际运行状态脱节。