Ce guide décrit la mise en place d’un environnement de laboratoire local sûr et reproductible pour le tableau de bord Web Kubernetes, destiné aux tests, au dépannage et aux expérimentations. Il couvre l’inventaire des versions, la configuration sécurisée, la vérification, la récupération et une liste de contrôle opérationnelle, avec des commandes concrètes et les sorties attendues.
Introduction
Le tableau de bord Web Kubernetes est un outil puissant pour visualiser les ressources d’un cluster, diagnostiquer les charges de travail et gérer les applications. Cependant, l’exposer en production comporte des risques de sécurité, et expérimenter sur un cluster partagé peut perturber les autres utilisateurs. Un environnement de laboratoire local offre un espace sûr et isolé pour apprendre les fonctionnalités du tableau de bord, tester les politiques RBAC (Role-Based Access Control, contrôle d’accès basé sur les rôles) et pratiquer des modèles de déploiement sans affecter les systèmes de production.
Ce guide présente une implémentation pratique d’un laboratoire local pour le tableau de bord Web Kubernetes. Nous aborderons l’inventaire de l’environnement, la configuration sécurisée, la vérification, les modes de défaillance et une liste de contrôle opérationnelle. À la fin, vous disposerez d’une configuration reproductible et sécurisée que vous pourrez utiliser pour tester et vous former.
Inventaire des versions et de l’environnement
Avant d’installer le tableau de bord, établissez un environnement cohérent pour éviter les incompatibilités de versions et les comportements inattendus. Les composants suivants sont requis :
- Un cluster Kubernetes local. Il peut s’agir d’un cluster à nœud unique créé avec Minikube, kind ou k3s. Pour ce guide, nous utiliserons Minikube, mais les étapes sont similaires pour d’autres distributions.
- kubectl configuré pour communiquer avec le cluster.
- Un navigateur Web pour accéder à l’interface du tableau de bord.
Exemple d’inventaire de l’environnement :
| Composant | Version/Outil | Remarques |
|---|---|---|
| Cluster Kubernetes | v1.27.3 (Minikube) | Cluster local à nœud unique |
| kubectl | v1.27.3 | La version du client correspond au serveur |
| Tableau de bord | v2.7.0 | Dernière version stable au moment de la rédaction |
| Système d’exploitation | Ubuntu 22.04 LTS | Système hôte pour Minikube |
Démarrez le cluster et vérifiez la connectivité :
minikube start --driver=docker --kubernetes-version=v1.27.3
kubectl cluster-info
Sortie attendue :
Kubernetes control plane is running at https://192.168.49.2:8443
CoreDNS is running at https://192.168.49.2:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
Pour vous assurer que votre contexte kubectl est défini sur Minikube, exécutez :
kubectl config current-context
Sortie attendue :
minikube
Si un contexte différent s’affiche, basculez avec :
kubectl config use-context minikube
Chemin de configuration sécurisé
Dans un environnement de laboratoire, nous suivons tout de même les meilleures pratiques de sécurité pour simuler des conditions proches de la production. Au lieu d’utiliser la configuration non sécurisée par défaut, nous allons :
- Créer un espace de noms dédié au tableau de bord.
- Déployer le tableau de bord avec un compte de service minimal.
- Utiliser RBAC pour restreindre l’accès.
- Accéder au tableau de bord via le proxy kubectl avec une authentification par jeton.
Étape 1 : Créer l’espace de noms et le compte de service
kubectl create namespace kubernetes-dashboard
helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/
helm upgrade --install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard --create-namespace --namespace kubernetes-dashboard
Vérifiez que le compte de service a été créé :
kubectl get serviceaccount dashboard-admin -n kubernetes-dashboard
Sortie attendue :
NAME SECRETS AGE
dashboard-admin 0 10s
Remarque : Depuis Kubernetes v1.24, les comptes de service ne reçoivent plus automatiquement un secret de jeton à longue durée de vie. Nous générerons un jeton plus tard à l’aide de la commande kubectl create token.
Étape 2 : Appliquer les règles RBAC
Créez un ClusterRoleBinding pour un accès cluster-admin (à des fins de laboratoire) ou un rôle plus restrictif selon les besoins. Pour simplifier, nous accorderons cluster-admin au compte de service. Dans un environnement réel, vous devez définir un rôle à privilèges minimaux.
Créez un fichier dashboard-admin.yaml :
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: dashboard-admin
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: dashboard-admin
namespace: kubernetes-dashboard
Appliquez-le :
kubectl apply -f dashboard-admin.yaml
Sortie attendue :
clusterrolebinding.rbac.authorization.k8s.io/dashboard-admin created
Vérifiez la liaison :
kubectl get clusterrolebinding dashboard-admin
Sortie attendue :
NAME ROLE AGE
dashboard-admin ClusterRole/cluster-admin 5s
Pour un moindre privilège de type production, vous pourriez créer un Role et un RoleBinding limités à l’espace de noms du tableau de bord. Par exemple, pour autoriser uniquement la visualisation des pods et des déploiements, vous créeriez un Role avec les verbes get, list et watch sur ces ressources. Cependant, pour ce laboratoire, cluster-admin offre une visibilité complète sur les fonctionnalités du tableau de bord.
Étape 3 : Déployer le tableau de bord
Appliquez le manifeste officiel du tableau de bord :
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
Sortie attendue (tronquée) :
namespace/kubernetes-dashboard configured
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
...
deployment.apps/kubernetes-dashboard created
Vérifiez que les pods sont en cours d’exécution :
kubectl get pods -n kubernetes-dashboard
Sortie attendue :
NAME READY STATUS RESTARTS AGE
dashboard-metrics-scraper-5c6d6f6c8b-xxxxx 1/1 Running 0 30s
kubernetes-dashboard-xxxxxxxxxx-xxxxx 1/1 Running 0 30s
Attendez que les deux pods affichent le statut Running. Le téléchargement des images peut prendre une minute.
Étape 4 : Obtenir un jeton
Obtenez un jeton pour le compte de service :
kubectl -n kubernetes-dashboard create token dashboard-admin
Cette commande génère un long jeton JWT (JSON Web Token, jeton Web JSON). Copiez-le pour la connexion. Notez que ce jeton est limité dans le temps (1 heure par défaut). Pour un jeton plus durable en laboratoire, vous pouvez spécifier une durée :
kubectl -n kubernetes-dashboard create token dashboard-admin --duration=24h
Vérification et diagnostic
Après le déploiement, vérifiez que le tableau de bord fonctionne correctement et est accessible via un proxy sécurisé.
Démarrez le proxy kubectl dans un terminal séparé :
kubectl proxy
Sortie attendue :
Starting to serve on 127.0.0.1:8001
Accédez au tableau de bord à l’adresse :
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
Remarque : Vous devez inclure la barre oblique finale. L’URL est sensible à la casse.
Vous devriez voir une page de connexion. Sélectionnez Token et collez le jeton obtenu précédemment. Après une authentification réussie, vous verrez l’aperçu du tableau de bord.
Contrôles de diagnostic :
- Vérifiez les journaux du pod pour détecter d’éventuelles erreurs :
kubectl logs -n kubernetes-dashboard deployment/kubernetes-dashboard
La sortie attendue se termine par :
Starting server...
Si des erreurs surviennent, elles apparaîtront dans les journaux. Les problèmes courants incluent des permissions RBAC manquantes ou des échecs de téléchargement d’image.
- Vérifiez les points de terminaison du service :
kubectl get endpoints -n kubernetes-dashboard
Sortie attendue :
NAME ENDPOINTS AGE
dashboard-metrics-scraper 10.244.0.5:8000 5m
kubernetes-dashboard 10.244.0.6:8443 5m
Si les points de terminaison sont vides, les pods ne sont peut-être pas prêts ou le sélecteur de service ne correspond pas aux étiquettes des pods.
- Testez l’accès à l’API avec curl (facultatif) :
export TOKEN=$(kubectl -n kubernetes-dashboard create token dashboard-admin)
curl -k https://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/ -H "Authorization: Bearer $TOKEN"
Vous devriez recevoir une page HTML (la page de connexion du tableau de bord). Cela confirme que le proxy et l’authentification fonctionnent.
De plus, vérifiez la sonde de préparation du pod du tableau de bord :
kubectl describe pod -n kubernetes-dashboard -l k8s-app=kubernetes-dashboard
Recherchez les sections Readiness et Liveness. Elles doivent indiquer success.
Modes de défaillance et récupération
Problèmes courants et comment les résoudre :
Problème 1 : Le pod du tableau de bord est bloqué en CrashLoopBackOff
Symptôme : Le pod redémarre à plusieurs reprises et le statut affiche CrashLoopBackOff.
Diagnostic :
kubectl logs -n kubernetes-dashboard deployment/kubernetes-dashboard --previous
Causes possibles :
- Permissions RBAC manquantes : assurez-vous que le ClusterRoleBinding est correctement appliqué.
- Contraintes de ressources : minikube n’a peut-être pas assez de CPU/mémoire. Vérifiez
minikube statuset augmentez les ressources si nécessaire. - Erreurs de téléchargement d’image : vérifiez que l’image est accessible.
Correctif :
- Réappliquez le manifeste RBAC :
kubectl apply -f dashboard-admin.yaml. - Augmentez les ressources Minikube :
minikube delete && minikube start --cpus=4 --memory=4096. - Si vous utilisez une image personnalisée, assurez-vous qu’elle est correctement téléchargée.
Problème 2 : Impossible d’accéder au tableau de bord via le proxy
Symptôme : Le navigateur affiche « 404 Not Found » ou « Service Unavailable ».
Diagnostic :
- Assurez-vous que
kubectl proxyest en cours d’exécution et qu’il n’y a pas de conflit de port. Le port par défaut est 8001 ; s’il est occupé, utilisezkubectl proxy --port=8002et ajustez l’URL. - Vérifiez que l’URL utilise le bon chemin avec
/proxy/à la fin. - Vérifiez que le service existe :
kubectl get svc -n kubernetes-dashboard.
Correctif :
- Redémarrez le proxy si nécessaire.
- Utilisez l’URL exacte :
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/.
Problème 3 : L’authentification par jeton échoue
Symptôme : La page de connexion renvoie « Unauthorized » ou « Invalid token ».
Diagnostic :
- Vérifiez que le compte de service existe :
kubectl get serviceaccount dashboard-admin -n kubernetes-dashboard. - Vérifiez l’expiration du jeton : le jeton par défaut dure 1 heure. S’il est expiré, générez-en un nouveau.
Correctif :
- Recréez le jeton :
kubectl -n kubernetes-dashboard create token dashboard-admin. - Assurez-vous que le ClusterRoleBinding est correctement lié :
kubectl get clusterrolebinding dashboard-admin -o yamlet vérifiez le sujet.
Retour en arrière
Pour supprimer complètement le tableau de bord :
kubectl delete -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
kubectl delete namespace kubernetes-dashboard
kubectl delete clusterrolebinding dashboard-admin
Cela nettoie toutes les ressources du tableau de bord. Vous pouvez ensuite recréer le laboratoire à partir de zéro si nécessaire.
Liste de contrôle opérationnelle
Utilisez cette liste de contrôle pour des opérations reproductibles :
- [ ] Le cluster est en cours d’exécution et kubectl peut communiquer (
minikube status,kubectl cluster-info). - [ ] L’espace de noms
kubernetes-dashboardexiste (kubectl get ns kubernetes-dashboard). - [ ] Le compte de service
dashboard-adminest créé et lié à une RBAC appropriée (kubectl get clusterrolebinding dashboard-admin). - [ ] Le déploiement du tableau de bord est appliqué et les pods sont en cours d’exécution (
kubectl get pods -n kubernetes-dashboard). - [ ] Le jeton est généré et stocké de manière sécurisée (utilisez
kubectl -n kubernetes-dashboard create token dashboard-admin). - [ ] L’accès est vérifié via le proxy kubectl (ouvrez l’URL du tableau de bord et connectez-vous).
- [ ] Les journaux sont examinés pour détecter des erreurs (
kubectl logs -n kubernetes-dashboard deployment/kubernetes-dashboard). - [ ] Les procédures de nettoyage sont documentées (voir la section Retour en arrière).
Référence des commandes clés :
| Action | Commande |
|---|---|
| Démarrer le cluster | minikube start |
| Créer l’espace de noms | kubectl create namespace kubernetes-dashboard |
| Créer le compte de service | kubectl create serviceaccount dashboard-admin -n kubernetes-dashboard |
| Appliquer la RBAC | kubectl apply -f dashboard-admin.yaml |
| Appliquer le tableau de bord | kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml |
| Obtenir un jeton | kubectl -n kubernetes-dashboard create token dashboard-admin |
| Démarrer le proxy | kubectl proxy |
| Accéder au tableau de bord | http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/ |
| Vérifier les pods | kubectl get pods -n kubernetes-dashboard |
| Consulter les journaux | kubectl logs -n kubernetes-dashboard deployment/kubernetes-dashboard |
| Supprimer le tableau de bord | kubectl delete -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml |
| Supprimer l’espace de noms | kubectl delete namespace kubernetes-dashboard |
| Supprimer la liaison RBAC | kubectl delete clusterrolebinding dashboard-admin |
Conclusion
Un laboratoire local pour le tableau de bord Web Kubernetes offre un environnement sûr pour l’apprentissage et les tests. En suivant ce guide, vous avez configuré un tableau de bord avec une isolation par espace de noms, une RBAC et un accès sécurisé appropriés. Vous pouvez désormais expérimenter la gestion des ressources, surveiller les charges de travail et tester des configurations avant de les appliquer à des clusters partagés. Utilisez la liste de contrôle opérationnelle pour maintenir la cohérence et garantir la reproductibilité.
Ensuite, envisagez d’explorer des rôles RBAC plus granulaires pour limiter les autorisations du tableau de bord selon différents scénarios utilisateur. Par exemple, créez un rôle en lecture seule qui autorise uniquement la visualisation des ressources, ou un rôle administrateur limité à un espace de noms. De plus, vous pouvez intégrer le tableau de bord à un fournisseur OIDC (OpenID Connect) pour une authentification externe dans une configuration plus proche de la production. Les compétences que vous avez pratiquées ici vous aideront à administrer Kubernetes de manière plus efficace et plus sécurisée.