1. 课程导论:Deployment升级风险、准入控制概念、Rego策略在K8s中的作用
1.1 Deployment升级:收益与风险并存
在Kubernetes生产环境中,Deployment是最常用的工作负载控制器,负责声明式地管理Pod副本的滚动更新、回滚与扩缩容。然而,每一次升级操作都伴随着不可忽视的风险。以下表格梳理了常见的升级风险类型及其潜在影响:
| 风险类别 | 典型场景 | 潜在影响 |
|---|---|---|
| 镜像风险 | 使用了未知来源的镜像、镜像标签为latest、镜像包含高危漏洞 |
容器运行时被攻击、数据泄露、服务不可用 |
| 配置漂移 | 升级时修改了securityContext、resource限制或env变量 |
Pod以特权模式运行、资源争抢、配置不一致导致业务异常 |
| 合规违规 | 违反组织安全基线(如禁止挂载宿主机路径、禁止使用hostNetwork) |
审计不通过、安全策略被绕过、合规罚款 |
| 版本兼容性 | 新镜像依赖的API版本与集群版本不匹配 | Pod启动失败、CrashLoopBackOff、集群稳定性下降 |
⚠️ 核心痛点: 传统CI/CD流水线在Deployment升级前,往往只做镜像构建与单元测试,缺乏对Kubernetes资源语义和安全策略的自动化校验。等到Pod启动失败或被安全团队拦截时,修复成本已大幅上升。
1.2 准入控制:K8s API的“守门员”
Kubernetes 准入控制(Admission Control) 是API Server请求处理链中的一个关键环节。它位于认证(Authentication)和授权(Authorization)之后,在对象被持久化到etcd之前执行。准入控制器可以变更(Mutating)或验证(Validating)传入的资源请求。
下图展示了K8s API请求的完整处理流程,突出准入控制的位置:
💡 关键认知: 准入控制Webhook允许集群管理员在资源被创建或更新时,调用外部HTTP服务进行自定义的变更或验证。这正是Rego策略的切入点——通过Validating Webhook拦截Deployment升级请求,执行OPA策略评估。
1.3 Rego策略:云原生策略引擎的核心语言
Rego是Open Policy Agent (OPA)项目原生的声明式查询语言,专为在复杂分层结构中表达策略而设计。在Kubernetes生态中,Rego策略被用来定义“允许什么”、“拒绝什么”以及“必须满足什么条件”。
以下列表总结了Rego策略在K8s准入控制中的核心作用:
- 策略即代码(Policy as Code): 将安全基线、合规要求、运维规范编写为可版本管理、可测试的Rego代码。
- 细粒度校验: 可以深入到Deployment的
spec.template.spec.containers层级,检查镜像仓库地址、securityContext、resources.limits、env等任意字段。 - 上下文感知: 策略可以引用集群内其他资源(如Namespace标签、ServiceAccount绑定),实现基于上下文的动态决策。
- 低延迟执行: OPA将Rego编译为高效的计划,在Webhook调用时通常能在毫秒级完成评估,不影响API Server性能。
下图展示了Rego策略在Deployment升级准入控制中的完整调用链路:
🔑 课程核心目标: 本课程将带领你从零搭建一套完整的Deployment升级前Rego策略准入控制接口调用验证环境。你将学会:编写Rego策略 → 部署OPA作为Validating Webhook → 模拟Deployment升级请求 → 捕获并分析准入控制接口的调用日志与决策结果。最终实现“升级前自动校验,不合规立即拒绝”的安全左移能力。
1.4 本章小结
- Deployment升级存在镜像、配置、合规、兼容性等多维风险,传统流水线缺乏K8s语义层面的校验。
- 准入控制是K8s API请求处理链中最后一道可编程防线,Validating Webhook为Rego策略提供了执行入口。
- Rego策略以声明式方式表达安全与合规规则,能够对Deployment的任意字段进行细粒度验证,实现策略即代码。
- 本课程将聚焦于接口调用验证这一实操环节,确保你不仅理解理论,更能动手验证策略是否被正确触发和执行。