
Trois approches dominent l’écosystème Kubernetes pour les policies d’admission : ValidatingAdmissionPolicy (natif), Kyverno et Gatekeeper. Ce comparatif présente leur état réel en mars 2026, y compris les transitions en cours qui changent la donne.
État des lieux 2026
Section intitulée « État des lieux 2026 »Ce tableau synthétise les caractéristiques actuelles de chaque solution. Regardez d’abord les lignes “Installation” et “Langage principal” pour comprendre le positionnement : VAP est natif et utilise CEL, Kyverno privilégie YAML avec CEL en complément, Gatekeeper s’appuie sur Rego (le langage d’OPA). La ligne “Positionnement 2026” résume les évolutions en cours.
| Critère | VAP | Kyverno | Gatekeeper |
|---|---|---|---|
| Installation | Native, rien à déployer | Composant externe (webhook) | Composant externe (webhook) |
| Validation | GA depuis 1.30 | Oui | Oui |
| Mutation | Beta en 1.34 | Oui | Oui |
| Génération | Non | Oui | Non |
| Audit / reporting | Basique via Warn/Audit | PolicyReports | Intégré |
| Langage principal | CEL | YAML + CEL | Rego |
| Statut CNCF | Fonctionnalité native K8s | Incubating | Basé sur OPA (Graduated) |
| Positionnement 2026 | Validation native légère | Moteur riche, transition CEL | OPA/Rego, intégration VAP renforcée |
Transitions en cours (à ne pas ignorer)
Section intitulée « Transitions en cours (à ne pas ignorer) »Kyverno 1.17 : migration CEL
Section intitulée « Kyverno 1.17 : migration CEL »Gatekeeper 3.22 : intégration VAP
Section intitulée « Gatekeeper 3.22 : intégration VAP »Comparaison détaillée
Section intitulée « Comparaison détaillée »Langage de policy
Section intitulée « Langage de policy »spec: validations: - expression: | !object.spec.containers.exists(c, has(c.securityContext) && has(c.securityContext.privileged) && c.securityContext.privileged ) message: "Conteneurs privilégiés interdits"Avantages :
- Expressif et typé
- Standard Kubernetes (utilisé dans CRD validation)
- Exécution in-process (pas de webhook)
Inconvénients :
- Syntaxe moins intuitive que YAML
- Nécessite des
has()pour éviter les erreurs sur champs absents
# Syntaxe 1.17+ (CEL)spec: rules: - name: deny-privileged validate: failureAction: Deny cel: expressions: - expression: | !object.spec.containers.exists(c, c.securityContext.privileged == true )Avantages :
- Syntaxe YAML native, intuitive (modèle historique)
- CEL pour les cas complexes (modèle 1.17+)
- Documentation excellente
Inconvénients :
- Modèle historique en transition
- Complexité opérationnelle (webhook, HA)
violation[{"msg": msg}] { container := input.review.object.spec.containers[_] container.securityContext.privileged == true msg := sprintf("Conteneur '%v' privileged", [container.name])}Avantages :
- Le plus puissant des trois
- Réutilisable hors Kubernetes (Terraform, APIs)
- Références croisées, calculs complexes
Inconvénients :
- Courbe d’apprentissage significative
- Debugging plus difficile
Modèle d’application
Section intitulée « Modèle d’application »| Engine | Modèle | Commentaire |
|---|---|---|
| VAP | Policy + Binding + Params (3 ressources) | Séparation claire : logique / scope / valeurs |
| Kyverno | ClusterPolicy (1 ressource) ou nouveaux types CEL | Tout-en-un historique, transition vers types dédiés |
| Gatekeeper | Template + Constraint (2 ressources) | Template Rego réutilisable, Constraint l’instancie |
Les modèles VAP et Gatekeeper facilitent la séparation des responsabilités : l’équipe plateforme crée les templates/policies, les équipes applicatives les instancient.
Fonctionnalités
Section intitulée « Fonctionnalités »Chaque engine couvre un périmètre différent. La validation est disponible partout, mais les différences apparaissent sur la mutation (modifier les objets avant leur création), la génération (créer automatiquement d’autres ressources), et la vérification d’images (Cosign/Sigstore). Si vous avez besoin de génération ou de signature d’images, Kyverno est actuellement le seul à proposer ces fonctionnalités.
| Fonctionnalité | VAP | Kyverno | Gatekeeper |
|---|---|---|---|
| Validation | GA | Oui | Oui |
| Mutation | Beta (1.34) | Mature | Stable |
| Génération | Non | Unique | Non |
| Image verification | Non | Cosign/Sigstore | Non |
| Paramétrage | paramRef/paramKind | Variables | Via Constraint |
| Déploiement progressif | Warn/Audit via validationActions | Audit mode | dryrun/warn |
| matchConditions | CEL | YAML/CEL | Rego |
Performances
Section intitulée « Performances »Approche qualitative (pas de benchmark officiel robuste disponible) :
| Engine | Caractéristique | Impact |
|---|---|---|
| VAP | Exécution in-process dans l’API server | Latence la plus faible, pas d’appel réseau |
| Kyverno | Webhook HTTP externe | Coût réseau + composant externe |
| Gatekeeper | Webhook HTTP externe + Rego | Coût réseau + évaluation Rego |
Conclusion : VAP est structurellement le plus performant pour la validation pure. Pour la plupart des clusters, les trois solutions sont suffisamment performantes, mais sur des clusters à fort volume, VAP a un avantage architectural.
Écosystème
Section intitulée « Écosystème »Au-delà des fonctionnalités techniques, l’écosystème influence fortement votre productivité. Une librairie de policies prêtes à l’emploi évite de tout écrire soi-même. Une CLI dédiée facilite les tests avant déploiement. L’intégration GitOps garantit un workflow déclaratif cohérent avec ArgoCD ou Flux.
| Aspect | VAP | Kyverno | Gatekeeper |
|---|---|---|---|
| Librairie de policies | À écrire soi-même | Policy Library (200+) | Gatekeeper Library |
| CLI pour tests | kubectl | kyverno CLI | gator (recommandé) / opa |
| ArgoCD/Flux | Natif | Intégration forte | Intégration |
| Community | SIG Auth | CNCF Incubating | Basé sur OPA (CNCF Graduated) |
Scénarios de choix
Section intitulée « Scénarios de choix »Choisir VAP si…
Section intitulée « Choisir VAP si… »✅ Kubernetes 1.30+ et validation simple ✅ Performance critique (validations à haute fréquence) ✅ Architecture minimaliste sans composant externe ✅ Équipe à l’aise avec CEL
Limites à connaître :
- Pas suffisant seul pour mutation avancée (beta en 1.34)
- Pas de librairie prête à l’emploi
- Pas de reporting riche comme PolicyReports
Recommandation CKS : VAP est le choix le plus aligné avec l’approche “native Kubernetes” attendue à l’examen.
Choisir Kyverno si…
Section intitulée « Choisir Kyverno si… »✅ Besoins de mutation importants (injection de sidecars, defaults) ✅ Génération automatique de ressources (NetworkPolicies, Secrets) ✅ Vérification d’images (Cosign/Sigstore) ✅ Équipe préférant YAML pur
Attention en 2026 :
- Le modèle historique
ClusterPolicyest en transition vers les nouveaux types CEL - Investir massivement dans l’ancien modèle peut créer une dette technique
- Complexité opérationnelle (webhook, HA, debugging)
Choisir Gatekeeper si…
Section intitulée « Choisir Gatekeeper si… »✅ OPA déjà utilisé ailleurs (Terraform, CI, APIs) ✅ Équipe maîtrisant Rego ✅ Policies complexes avec références croisées ✅ Besoin d’audit intégré des ressources existantes
Évolution 2026 :
- Gatekeeper s’intègre mieux avec VAP (génération de ressources VAP)
- Coût cognitif et opérationnel plus élevé qu’un VAP natif
- Reste le choix OPA/Rego pour les équipes investies dans cet écosystème
Combinaisons possibles
Section intitulée « Combinaisons possibles »Rien n’empêche de combiner plusieurs engines pour bénéficier de leurs forces respectives. L’approche la plus courante consiste à utiliser VAP pour les validations critiques (performance) et Kyverno ou Gatekeeper pour les fonctionnalités avancées (mutation, génération, audit). Ce tableau présente les combinaisons les plus pertinentes — mais attention aux risques documentés dans l’encadré qui suit.
| Combinaison | Use case | Avantage |
|---|---|---|
| VAP + Kyverno | VAP pour validation critique, Kyverno pour mutation/génération | Performance + fonctionnalités complètes |
| VAP + Gatekeeper audit | VAP enforce, Gatekeeper pour conformité continue | Performance + audit détaillé |
| Kyverno seul | Couverture complète sans Rego | Simplicité conceptuelle (attention transition 1.17) |
Migration vers VAP
Section intitulée « Migration vers VAP »Avec VAP en GA depuis 1.30 et mutation en beta en 1.34, migrer les validations simples depuis Kyverno/Gatekeeper vers VAP devient pertinent.
Ce qui se migre bien
Section intitulée « Ce qui se migre bien »- Interdire les conteneurs privilégiés
- Restreindre les registries autorisés
- Exiger certains labels
- Bloquer hostPath, hostNetwork
- Limiter les réplicas
Ce qui ne se migre PAS simplement
Section intitulée « Ce qui ne se migre PAS simplement »- Mutation : VAP mutation est encore beta
- Génération : VAP ne génère pas de ressources
- Vérification d’images : VAP n’a pas d’équivalent Cosign
- Policies complexes : certaines logiques Rego ne se traduisent pas en CEL
Exemple de conversion
Section intitulée « Exemple de conversion »spec: rules: - name: deny-privileged validate: cel: expressions: - expression: | !object.spec.containers.exists(c, c.securityContext.privileged == true )spec: validations: - expression: | !object.spec.containers.exists(c, has(c.securityContext) && has(c.securityContext.privileged) && c.securityContext.privileged )Différence principale : VAP nécessite des has() pour vérifier l’existence des champs avant d’y accéder.
Tableau de décision
Section intitulée « Tableau de décision »Comment utiliser ce tableau : Parcourez les questions de haut en bas. Dès qu’une réponse correspond à votre situation, la recommandation associée est probablement le bon choix. Si plusieurs lignes correspondent, privilégiez celle qui répond au besoin le plus critique pour votre contexte.
| Question | Réponse | Recommandation | Pourquoi |
|---|---|---|---|
| Kubernetes 1.30+ ? | Non | Kyverno ou Gatekeeper | VAP non disponible |
| Validation simple uniquement ? | Oui | VAP | Natif, performant, sans dépendance |
| Mutation critique ? | Oui | Kyverno | La plus mature |
| Génération de ressources ? | Oui | Kyverno | Seul à le proposer |
| Signature d’images ? | Oui | Kyverno | Intégration Cosign native |
| OPA/Rego déjà utilisé ? | Oui | Gatekeeper | Réutilisation des compétences |
| Policies très complexes ? | Oui | Gatekeeper | Rego le plus puissant |
| Architecture minimaliste ? | Oui | VAP | Pas de composant externe |
Ce que la CKS attend réellement
Section intitulée « Ce que la CKS attend réellement »Pour clarifier le positionnement de ce comparatif par rapport à l’examen :
La certification CKS évalue votre capacité à sécuriser un cluster, pas votre maîtrise d’un outil spécifique. Le tableau ci-dessous montre comment les différents policy engines peuvent répondre aux objectifs du curriculum — mais l’examinateur s’intéresse au résultat (“les Pods ne peuvent pas être privilégiés”), pas à l’outil utilisé pour y parvenir.
| Domaine CKS | Ce qui est évalué | Outil possible |
|---|---|---|
| Cluster Hardening | Pod Security Standards, restrictions | VAP, PSA, Kyverno, Gatekeeper |
| Supply Chain Security | Registries autorisées, signatures, SBOM | Kyverno (Cosign), Gatekeeper, outils externes |
| System Hardening | Least privilege, seccomp, AppArmor | Tous peuvent contribuer |
| Minimize Microservice Vulnerabilities | Network policies, secrets | Kyverno (génération), VAP |
L’examen évalue des résultats sécurité, pas la maîtrise d’un outil spécifique. Vous devez savoir implémenter des contrôles, pas nécessairement avec Kyverno ou Gatekeeper.
À retenir
Section intitulée « À retenir »- VAP : validation native, performante, sans dépendance — le plus aligné CKS
- Kyverno : mutation/génération/signatures, mais transition 1.17 à anticiper
- Gatekeeper : OPA/Rego + audit intégré, intégration VAP renforcée en 3.22
- Combinaison possible : VAP pour validation + Kyverno pour mutation, mais attention aux risques
- CKS : évalue des objectifs sécurité, pas un outil spécifique