|
本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。 |
|
这是尚未发布的文档。 Admission Controller 1.34-dev. |
CEL 简介
通用表达式语言 (CEL) 是一种通用的表达式语言,旨在快速、可移植且安全地执行。CEL 作为一种语言,具有内存安全、无副作用、且保证程序终止(即程序不会无限循环),同时支持强类型和动态类型。您可以在 cel.dev 了解更多关于 CEL 的信息,并在 CEL 游乐场 中进行实践。
Kubernetes 中的 CEL
CEL 被选为 Kubernetes 验证规则的语言,因为 CEL 表达式可以轻松地内联到 CRD 模式中,并在 "提前"(当 CRD 被创建和更新时)编译和类型检查。出于这些原因及其一般特性,它是扩展 Kubernetes API 的完美候选者。
Kubernetes 函数库
Kubernetes CEL 验证规则可以访问多个函数库:
-
Kubernetes CEL 扩展库,提供列表、正则表达式、URL、授权者、数量、可选类型、数值比较等的补充函数。
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,可以在集群外进行开发和测试。