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検証ルールは、いくつかの関数ライブラリにアクセスできます:
-
Kubernetes CEL拡張ライブラリ、リスト、正規表現、URL、認可者、数量、オプション型、数値比較などの補助関数を含みます。
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のおかげで、クラスター外で開発およびテストが可能です。