1. 课程导论:Admission Policy 在 Kubernetes 安全体系中的定位、策略即代码(Policy as Code)核心理念、资源配额模型与发布包完整性的关系

1.1 Admission Policy 在 Kubernetes 安全体系中的定位

Kubernetes 安全体系采用纵深防御(Defense in Depth)模型,从集群基础设施、网络、身份认证、授权、准入控制到运行时安全层层递进。其中,Admission Policy(准入策略) 位于 API 请求处理链的最后一个授权环节,是资源进入持久化存储(etcd)前的最后一道策略关卡。

下图展示了 Kubernetes API 请求的完整安全处理流程,突出 Admission Policy 的拦截位置:

Kubernetes API 请求安全处理流程 用户/客户端 认证 授权 (RBAC) Admission Policy (准入控制) etcd Admission Policy 是资源进入 etcd 前的最后一道策略关卡 可拦截、修改或拒绝不符合策略的 API 请求 Admission Policy 两种类型 MutatingAdmissionPolicy (变更) ValidatingAdmissionPolicy (校验) 组合使用

关键定位:Admission Policy 是 Kubernetes 安全体系中的策略执行点(Policy Enforcement Point, PEP),与认证、授权共同构成 API 请求的三道防线。认证确认身份,授权判断权限,Admission Policy 校验资源内容是否符合集群级策略。

1.2 策略即代码(Policy as Code)核心理念

策略即代码(Policy as Code, PaC)是将安全策略、合规规则、资源约束等以代码形式声明、版本化管理、自动化执行的实践方法。在 Kubernetes 场景下,PaC 通过 Admission Policy 将策略从人工审核、文档约束转变为可编程、可测试、可审计的代码资产。

下表对比了传统策略管理与策略即代码的核心差异:

维度 传统策略管理 策略即代码 (PaC)
表达形式 文档、PDF、邮件 YAML/JSON/Rego 代码
版本控制 无或手动 Git 仓库、CI/CD 集成
执行方式 人工审核、定期检查 自动拦截、实时校验
可测试性 低 单元测试、集成测试
审计追溯 困难 完整变更历史
变更效率 数天至数周 分钟级

策略即代码的核心理念可归纳为以下四个原则:

  1. 声明式策略定义:使用声明式语言(如 Rego、CEL)描述策略意图,而非编写命令式逻辑。
  2. 策略与基础设施同源:策略代码与应用代码、基础设施配置存储在同一个 Git 仓库中,遵循相同的 CI/CD 流程。
  3. 自动化执行与反馈:策略在 Admission 阶段自动执行,拒绝或修改不合规资源,并返回清晰错误信息。
  4. 持续合规审计:所有策略评估结果记录为审计日志,支持事后追溯和合规报告生成。

实践建议:在 Kubernetes 中实现 PaC 时,优先从 ValidatingAdmissionPolicy(基于 CEL 表达式)开始,它无需额外部署 Webhook 服务,降低运维复杂度。对于复杂策略场景,再引入 OPA Gatekeeper 或 Kyverno 等框架。

1.3 资源配额模型与发布包完整性的关系

资源配额模型(Resource Quota Model) 定义了 Kubernetes 集群中每个命名空间或租户可消耗的 CPU、内存、存储、对象数量等资源上限。而发布包完整性(Release Package Integrity) 则关注部署到集群中的容器镜像、Helm Chart、YAML 清单等制品是否被篡改、是否来自可信源、是否符合安全基线。

两者在 Admission Policy 层面形成双重校验关系:

  • 资源配额模型:确保资源使用不超限,防止单个应用耗尽集群资源导致拒绝服务。
  • 发布包完整性:确保部署的制品未被篡改,防止恶意代码或配置注入。

下图展示了资源配额模型与发布包完整性在 Admission Policy 中的协同校验流程:

Admission Policy 双重校验模型 资源配额模型校验 • CPU/内存/存储上限 • 对象数量限制(Pod/Service/ConfigMap) • 优先级与抢占策略 发布包完整性校验 • 镜像签名验证(Cosign/Notation) • Helm Chart 来源校验 • YAML 清单合规扫描 AND 通过 → 资源准入 etcd 拒绝 → 返回错误信息,阻止部署

常见误区:部分团队仅关注资源配额模型而忽略发布包完整性校验,导致集群虽未超限,但运行了包含已知漏洞或恶意代码的镜像。反之,仅校验完整性而不设资源配额,可能导致单个应用抢占所有集群资源。两者必须组合使用才能形成完整的安全基线。