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.
Table of Contents
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 :
- Ajoutez le dépôt Helm de Kyverno :
helm repo add kyverno https://kyverno.github.io/kyverno/
- 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.
- 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
etPersistentVolume
sont les ressources ciblées.spec.storageClassName: "!local-storage"
signifie que toute tentative d’utiliser laStorageClass
nomméelocal-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 :
- Liste des politiques Kyverno :
kubectl get cpol
- 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.