Restreindre l’utilisation d’une StorageClass spécifique dans Kubernetes avec Kyverno

Dans certains cas, vous voudrez peut-être restreindre l’utilisation d’une StorageClass spécifique, comme local-storage, dans votre cluster Kubernetes pour garantir une gestion plus fine des ressources. Kubernetes ne permet pas directement de contrôler l’utilisation des StorageClass via RBAC, mais des outils comme Kyverno vous permettent de définir des règles précises pour bloquer ou valider certaines pratiques.

Dans ce tutoriel, nous allons configurer une politique avec Kyverno pour empêcher l’utilisation de la StorageClass local-storage dans tout le cluster.


Objectif

Empêcher l’utilisation de la StorageClass local-storage pour la création de PersistentVolumeClaims (PVC) ou PersistentVolumes (PV) dans Kubernetes, et garantir que tout déploiement utilisant cette StorageClass soit bloqué.


Pourquoi Kyverno ?

Kyverno est un moteur de politiques Kubernetes qui permet de définir des règles de validation, de mutation et de génération sur des ressources Kubernetes. Contrairement à RBAC, Kyverno permet de contrôler des champs spécifiques à l’intérieur des objets Kubernetes, comme le champ storageClassName dans les PVC ou PV.


Étape 1 : Installer Kyverno

Si vous n’avez pas encore Kyverno installé dans votre cluster, vous pouvez le faire rapidement via Helm :

  1. Ajoutez le dépôt Helm de Kyverno :
helm repo add kyverno https://kyverno.github.io/kyverno/
  1. Installez Kyverno dans votre cluster Kubernetes :
helm install kyverno kyverno/kyverno --namespace kyverno --create-namespace

Cette commande installe Kyverno dans le namespace kyverno.


Étape 2 : Créer une politique Kyverno pour bloquer la StorageClass

Maintenant que Kyverno est installé, nous allons créer une politique Kyverno qui empêche l’utilisation de la StorageClass local-storage lors de la création de PVC ou PV.

  1. Créez un fichier YAML, nommé par exemple deny-local-storageclass.yaml, avec le contenu suivant :
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: deny-local-storageclass
spec:
  rules:
  - name: deny-local-storageclass
    match:
      resources:
        kinds:
        - PersistentVolumeClaim
        - PersistentVolume
    validate:
      message: "La StorageClass 'local-storage' est interdite."
      pattern:
        spec:
          storageClassName: "!local-storage"

Dans ce fichier :

  • PersistentVolumeClaim et PersistentVolume sont les ressources ciblées.
  • spec.storageClassName: "!local-storage" signifie que toute tentative d’utiliser la StorageClass nommée local-storage sera bloquée.
  • Le message « La StorageClass ‘local-storage’ est interdite. » sera affiché si quelqu’un tente de créer un PVC ou un PV avec cette StorageClass.

Étape 3 : Appliquer la politique

Appliquez la politique Kyverno à votre cluster avec la commande suivante :

kubectl apply -f deny-local-storageclass.yaml

Cette commande met en place la politique à l’échelle du cluster pour bloquer toute utilisation de la StorageClass local-storage.


Étape 4 : Vérifier la politique

Pour vérifier que la politique fonctionne correctement, essayez de créer un PVC utilisant la StorageClass local-storage avec un fichier YAML comme celui-ci :

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-pvc
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: local-storage

Appliquez-le avec la commande :

kubectl apply -f test-pvc.yaml

Kubernetes devrait refuser de créer ce PVC avec une erreur de type :

Error from server: admission webhook "validate.kyverno.svc" denied the request: La StorageClass 'local-storage' est interdite.

Étape 5 : Auditer les politiques Kyverno

Vous pouvez auditer toutes les politiques Kyverno appliquées dans votre cluster et voir si elles fonctionnent comme prévu en utilisant les commandes suivantes :

  1. Liste des politiques Kyverno :
kubectl get cpol
  1. Détails spécifiques sur une politique donnée :
kubectl describe cpol deny-local-storageclass

Conclusion

Avec Kyverno, il est facile de restreindre l’utilisation d’une StorageClass spécifique dans Kubernetes. En utilisant un Admission Controller comme Kyverno, vous pouvez définir des règles précises qui bloquent certaines pratiques non désirées, comme l’utilisation de local-storage dans les PVC ou PV. Cette approche permet une meilleure gestion et une plus grande sécurité des ressources dans votre cluster.

Kyverno est un outil extrêmement flexible et puissant pour la gouvernance des clusters Kubernetes, et il vous permet de gérer des politiques qui vont bien au-delà des simples capacités de RBAC.


Pour aller plus loin

  • Consultez la documentation officielle de Kyverno pour explorer d’autres types de politiques : Documentation Kyverno
  • Découvrez comment utiliser des outils similaires comme OPA Gatekeeper pour gérer des politiques complexes dans Kubernetes.