2 minutes pour comprendre... Kyverno
Sommaire
En 2 minutes #
Kyverno est un projet open source et contrôleur d’admission permettant d’automatiser le contrôle des bonnes pratiques de sécurité et d’assurer la conformité de différentes ressources d’infrastructure. Afin de faciliter la gestion des cas complexes et d’éviter la maintenance d’un nouveau langage, les règles peuvent être écrites en utilisant les langages JMESPath et CEL.
Étant à la base conçu pour Kubernetes, Kyverno est capable de valider n’importe quel type de ressource Kubernetes (natives ou custom) lors de leur ajout ou modification. De plus, il permet également de créer, de modifier et de supprimer d’autres ressources en fonction d’un événement Kubernetes particulier, tel que la création d’un nouveau Namespace par exemple.
Kyverno a également d’autres fonctionnalités intéressantes : étant un binaire indépendant il est capable de fonctionner en dehors de Kubernetes, lui permettant ainsi d’être utilisé dans une chaîne de CI/CD afin de tester des règles, sans pour autant avoir à les appliquer dans un cluster Kubernetes. Une fonctionnalité de vérification des signatures et attestations des images OCI est également disponible.
Soutenu par une communauté active et un développement constant, Kyverno est un élément central de certifications telles que la CKS et la KCA. Nirmata, l’entreprise à l’origine de Kyverno, propose également plusieurs produits et services de support autour de cette solution.
Voici quelques cas d’usages de Kyverno :
- définir des règles sur les ressources Kubernetes de manière déclarative
- générer des ressources Kubernetes dynamiquement (ex : quotas (CPU, mémoire, réseau) pour chaque nouveau namespace)
- réguler la consommation des workloads d’un namespace en limitant le nombre de réplicas sur les Deployments, DaemonSets, StatefullSets…
- ajouter des règles de gouvernance permettant de s’assurer du respect des conventions et recommandations de sécurité propres aux entreprises
En savoir plus… #
Fonctionnalités principales #
- utilise les CRDs de Kubernetes et propose donc une approche déclarative
- permet de valider, générer, supprimer ou modifier des ressources Kubernetes de manière automatique selon des règles souhaitées
- peut vérifier la signature et les métadonnées des images OCI
- adapté à la réalisation de tests unitaires et E2E basés sur des règles depuis une chaîne de CI
- fournit des rapport détaillés utilisant Open Reporting Format de la CNCF
Architecture #
Pour bien comprendre comment fonctionne Kyverno, il faut premièrement comprendre le concept de contrôle d’admission (Admission Control) dans Kubernetes. Arrivant juste après l’authentification et l’autorisation d’une requête, le processus de contrôle d’admission a pour objectif de valider, modifier ou rejeter les requêtes selon des règles définies. Pour ce faire, l’apiserver de Kubernetes fournit deux webhooks : un de validation (validating admission) et un de mutation (mutating admission).
Ces webhooks font appel à un ou plusieurs contrôleurs chargés de traiter la requête. Dans le cas présent, c’est Kyverno qui implémente ces deux webhooks et traite les requêtes envoyées par l’apiserver. À noter que les deux webhooks ne sont pas forcément obligatoires, il est par exemple possible de valider une ressource sans pour autant la modifier.

Kyverno configure donc deux webhooks dans les clusters Kubernetes, un ValidatingWebhookConfiguration et un MutatingWebhookConfiguration. Ces derniers ont pour objectif de renseigner l’adresse où envoyer les requêtes lors de la phase d’admission de l’apiserver de Kubernetes.

Le composant webhook controller a pour objectif de regarder les différentes Policies déclarées afin d’adapter les configurations de webhook d’admission en conséquence.
L’admission controller a deux rôles :
- il utilise les configurations webhook générés par le
webhook controllerafin de filtrer les requêtes et traiter uniquement celles destinées auxPoliciesconfigurées - il s’occupe du dialogue entre l’
enginede kyverno (en charge du traitement des expression dans lesPolicies) et l’apiserver de Kubernetes auquel il renvoie les réponses
Le composant cert renewer est responsable de la génération et du renouvellement des certificats TLS pour les webhook.
Les report controllers doivent gérer la création des PolicyReports et de leurs ressources intermédiaires (AdmissionReports, ScanReports…).
Le cleanup controller s’occupe de la suppression des ressources en fonction de règles définies via les CleanupPolicies.
Ecosystème #
- policy reporter est une interface web permettant la visualisation des rapports de Kyverno
- Kyverno Chainsaw est le framework de test end-to-end pour Kyverno. Il est capable de manière générale de tester n’importe quel type d’opérateur et de contrôleur
- Kyverno Envoy Plugin est une extension permettant de définir des règles d’autorisation via Kyverno pour toutes les requêtes d’un service mesh basé sur Envoy
Bon à savoir #
- projet “incubating” de la CNCF
- un dashboard pour Grafana permettant de visualiser les rapports de Kyverno est disponible
- on peut tester ses règles dans un bac à sable : Kyverno Playground
- de nombreux exemples de règles sont disponibles dans ce dépôt
- Nirmata fournit des règles et conseils pour Kyverno
Produits similaires #
Le projet Open Policy Agent (OPA), un gestionnaire de règles utilisant le langage Rego, et Gatekeeper, un contrôleur Kubernetes adapté pour OPA, forment un couple aux capacités très similaires à Kyverno. Bien que plus complexes à utiliser, notamment à cause de Rego, ils disposent néanmoins d’une plus grande flexibilité.
Très similaire à Kyverno, Kubewarden s’appuie sur des règles écrites en CEL ou dans certains langages de programmation tels que Go, Typescript, C#… Les règles sont ensuite compilées en binaires avec WebAssembly et packagés dans des images OCI que Kubewarden peut récupérer. Disposant d’un plus large choix en matière de langage pour l’écriture de règles et d’une meilleure sécurité (grâce à l’isolation de la sandbox WebAssembly), Kubewarden se révèle cependant moins intégré à Kubernetes et est aussi plus jeune que son concurrent.