本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。

这是尚未发布的文档。 Admission Controller 1.34-dev.

CEL 简介

通用表达式语言 (CEL) 是一种通用的表达式语言,旨在快速、可移植且安全地执行。CEL 作为一种语言,具有内存安全、无副作用、且保证程序终止(即程序不会无限循环),同时支持强类型和动态类型。您可以在 cel.dev 了解更多关于 CEL 的信息,并在 CEL 游乐场 中进行实践。

Kubernetes 中的 CEL

CEL 被选为 Kubernetes 验证规则的语言,因为 CEL 表达式可以轻松地内联到 CRD 模式中,并在 "提前"(当 CRD 被创建和更新时)编译和类型检查。出于这些原因及其一般特性,它是扩展 Kubernetes API 的完美候选者。

在 Kubernetes 1.30 中被标记为稳定,可以在 验证准入策略 和其他验证规则中使用 CEL。有关更多信息,请参见 Kubernetes 文档 这里

Kubernetes 函数库

Kubernetes CEL 验证规则可以访问多个函数库:

CEL 在 SUSE Security Admission Controller: cel-policy

Admission Controller 提供 cel-policy。 这是一项策略,构建并打包上游的 cel-go 解释器,以及上述列出的不同库,这些库可用于 Kubernetes 中的 CEL,来自 apiextensions-apiserver

此外,cel-policy 打包了一个 Admission Controller CEL 扩展库,该库暴露了 Admission Controller 的 主机能力作为原生 CEL

  • Sigstore 验证

  • OCI 交互

  • 加密功能

  • 网络操作

  • 访问 Kubernetes 资源

这意味着 cel-policy 是 Kubernetes CEL 的超集,并且向后兼容。可以重用为普通 Kubernetes 编写的 CEL,和/或利用 Admission Controller 添加的功能。

cel-policy 被编译并作为 CEL 解释器运行。政策的用户在 (Cluster)AdmissionPolicy 的 spec.settings 中传递所需的 CEL 表达式,得益于 CEL 的特性,表达式在创建或更新 (Cluster)AdmissionPolicy 时会被编译并进行类型检查以确保正确性。这意味着不需要自定义构建`cel-policy`。

与 ValidatingAdmissionPolicies 相比,Admission Controller 的 cel-policy 的优势

Admission Controller cel-policy

  • 它的 CEL 代码与 ValidatingAdmissionPolicies 向后兼容。

  • 与 ValidatingAdmissionPolicies 相反,它不需要像 ValidatingAdmissionPolicyBinding 这样的绑定,因为这一绑定已包含在 Admission Controller 的 (Cluster)AdmissionPolicy 定义中。

  • 可以部署到缺乏 ValidatingAdmissionPolicies 支持的集群。

  • 具有上下文感知能力,并利用 Admission Controller 的细粒度权限来实现 上下文感知

  • 作为 (Cluster)AdmissionPolicy 部署。

  • 得益于 Admission Controller 在策略上的追踪和遥测,带来了显著优势。

  • 审计扫描器会考虑到这一点。

  • 得益于kwctl,可以在集群外进行开发和测试。