CELの概要

共通式言語(CEL)は、高速でポータブル、安全に実行できるように設計された汎用の式言語です。CELは、メモリ安全で、副作用がなく、終了する(プログラムが無限ループしない)、強く動的に型付けされた言語です。CELについての詳細は、cel.devで学ぶことができ、CELプレイグラウンドで実践できます。

KubernetesにおけるCEL

CELは、Kubernetesの検証ルールのための言語として選ばれました。CEL式はCRDスキーマに簡単にインライン化でき、"事前に"(CRDが作成および更新されるとき)コンパイルおよび型チェックが可能です。これらの理由とその一般的な特性から、Kubernetes APIを拡張するための完璧な候補です。

Kubernetes 1.30で安定版としてマークされ、ValidatingAdmissionPoliciesやその他の検証ルールでCELを使用できます。詳細については、Kubernetesのドキュメントをこちらでご覧ください。

Kubernetes関数ライブラリ

Kubernetes CEL検証ルールは、いくつかの関数ライブラリにアクセスできます:

SUSE Security Admission ControllerにおけるCEL:cel-policy

Admission Controllerはcel-policyを提供します。 これは、アップストリームのcel-goインタープリターを構築しバンドルするポリシーであり、KubernetesのCEL用に上記のさまざまなライブラリも含まれています。 apiextensions-apiserver

さらに、`cel-policy`は*Admission ControllerCEL拡張ライブラリ*をバンドルしており、Admission Controllerのホスト機能をネイティブCELとして公開します

  • Sigstore検証

  • OCIインタラクション

  • 暗号機能

  • ネットワーク操作

  • Kubernetesリソースへのアクセス

これは、`cel-policy`がKubernetes CELのスーパーセットであり、後方互換性があることを意味します。バニラKubernetes用に書かれたCELを再利用したり、Admission Controllerによって追加された機能を利用したりできます。

`cel-policy`はコンパイル済みで出荷され、CELインタープリタとして動作します。ポリシーのユーザーは、(Cluster)AdmissionPolicyの`spec.settings`に希望するCEL式を渡し、CEL機能のおかげで、式は作成または更新時にコンパイルされ、型チェックによって正しさが検証されます。これは、`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のおかげで、クラスター外で開発およびテストが可能です。