KubeCon EUの期間中、Mercedes Benzのチームは、1000以上のKubernetesクラスタを保護するために、Pod Security Policiesから Validation Admission Policiesへの移行を発表した。このソリューションは、パフォーマンスの向上によりKyvernoが選択された。
Mercedes-Benz Tech InnovationのプラットフォームエンジニアであるTobias Giese氏とTjark Rasche氏によると、同社のプラットフォームは「セルフサービス」として構想されたという。ソフトウェア開発チームは、低レベルのオペレーションを考慮することなく、オンデマンドでKubernetesクラスタを運用開始または廃止できる。
初期のクラスタ実装では、Pod Security Policiesを使用して、ランタイム中にセキュリティを強制した。Kubernetes APIサーバーのリクエストは、Open Policy Agent(静的なポッドマニフェストとして実行される)を介して、検証および認証のWebhooksと連携してセキュリティ保護された。Giese氏はこのソリューションを「オールインワン」だが、混乱しやすく「バグが起きやすい」と評した。
Rasche氏は、カスタムアドミッションポリシーに対するチームの要求を列挙した。Podだけでなく、複数のリソース(デプロイメント、CronJobsなど)に対して非常に柔軟にポリシーを定義できなければならない。また、顧客が希望するツールをシームレスに使用でき、「Kubernetesはデフォルトがかなり安全でない傾向がある」ため、リソースの変異を可能にする必要がある(たとえば、ポッドのallowPrivilegeEscalationのデフォルトはtrueである)。
彼らの移行は一筋縄ではいかなかった。当初、ポリシー管理のために設計されたCNCFのインキュベート・プロジェクトであるKyvernoを試した後、APIリクエストの応答時間が最大11秒であったため、彼らはこれを却下した。これは、彼らの最初のソリューションのパフォーマンスより20倍も遅かった。とはいえ、彼らの同僚の一人がベンチマークをKyvernoのメンテナと共有した後、(バージョン1.12.0で)パフォーマンスが改善されたことを彼らは指摘している(Grafanaのk6で測定)。彼らの実装の性能にかかわらず、彼らはKyvernoを使用する素晴らしい開発者体験について言及した。
前進するために、彼らは再編成し、3つの方向に力を注ぐことにした。
- OPAの現在のセットアップを使用してすべてのポリシーを実装する。
- カスタムコントローラの概念実証のパフォーマンスを評価する。
- k6の負荷テスト・スイートを実際のシナリオに近づけるために改善する。
Kubernetes 1.26のリリースが近づいており、複数のバージョンで遅れを取りたくないことを考慮し、コントロールプレーンをバージョン1.24から1.25に移行し、その後バージョン1.26に移行した。さらに、ワーカーノードのマイグレーションも1.24から1.26へそのまま移行した。
移行中に彼らは、Kubernetes 1.26でアルファ版としてリリースされた「聖杯」-Validating Admission Policies-を発見した。新たに発見されたこの機能は、カスタムのアドミッションロジックを可能にし、インメモリのAbstract Syntax Treeのおかげでパフォーマンスが向上する一方で、追加のコントローラを必要としないことを約束した。
Rasche氏は、基本的なアドミッションポリシーを紹介し、検証式は、クリティカルなコードパスで使用するために考案された、パフォーマンス重視の新しいプログラミング言語であるCommon Expression Language(CEL)を使用して記述されていることを指摘した。
また、複雑なポリシーは「読めないゴチャゴチャ」になりがちだと指摘した。手作業でポリシーを書き始めた後、すぐにシンプルなHelmセットアップでポリシーを生成するようになった。このアプローチの欠点は、実施されるポリシーへの依存度が高いことだ。
変異の要件は、カスタムコントローラーによって実装された。Giese氏は、新しい機能強化リクエストによって、変異の許可もバリデーションと同様に実装できるようになると指摘した。この機能は、Kubernetesのバージョン1.31で利用可能になるかもしれない。Validation Admission Policies機能がバージョン1.26でリリースされたばかりであることを考えると、デプロイされたKubernetesのバージョンごとに異なる実装を使用する必要があった。
- Kubernetes 1.25では、OPAとアドミッション・コントローラー(検証と変異の両方)を使用した。
- Kubernetes 1.26では、VAPとアドミッションコントローラー(変異用)を使用する。
Kyverno 1.12.0がリリースされた後、Kyvernoはすべてのソリューションを比較するパフォーマンス測定をやり直した。彼らはまた、Kyvernoが現在VAP生成をサポートしていることも指摘している。
最後に、Kyvernoが得た教訓を発表した。第一に、ポリシーのベンチマークとエンド・ツー・エンドの一連のテストは、パフォーマンスや品質を犠牲にすることなく、迅速な反復を可能にする。次に、サブリソース(ポッドやエフェメラルコンテナなど)を管理する際の注意点、特にカスタムコントローラを実装する際の注意点について言及した。最後に、Kubernetesネイティブなポリシーの実装は、アーリーアダプターであることのコストを伴うとしても、実現可能であると結論づけた。
注:Validation Admission Policiesは、Kubernetesバージョン1.28でベータステータスに達した。