Guide de gestion de plusieurs clusters Kubernetes avec kubectl config

Gérez plusieurs clusters Kubernetes avec les contextes kubectl, les fichiers kubeconfig, les espaces de noms et des commandes de changement plus sûres.

Guide de gestion de plusieurs clusters Kubernetes avec kubectl config

Gérer plusieurs clusters Kubernetes est courant dès que vous avez des environnements de développement, de staging, de production ou des clusters dans plusieurs clouds. Le risque est simple : une commande peut atteindre le mauvais cluster si votre contexte n'est pas clair.

Ce guide vous montre comment utiliser kubectl config pour inspecter les contextes, changer de cluster, définir des espaces de noms et organiser plusieurs fichiers kubeconfig.

Comprendre le fichier Kubeconfig

Avant de plonger dans les commandes kubectl config, il est essentiel de comprendre le fichier kubeconfig. Ce fichier stocke des informations sur vos clusters, utilisateurs et les contextes qui les lient. kubectl utilise ce fichier pour s'authentifier et spécifier avec quel cluster interagir. Par défaut, kubectl cherche le fichier kubeconfig à l'emplacement $HOME/.kube/config.

Dans ce fichier, vous trouverez trois sections principales :

  • clusters : Définit les clusters Kubernetes, y compris leurs points de terminaison de serveur API et autorités de certification.
  • users : Stocke les informations d'authentification, telles que les certificats clients et les jetons.
  • contexts : Associe un cluster, un utilisateur et éventuellement un espace de noms. Un contexte offre un moyen pratique de regrouper ces configurations, permettant à kubectl de basculer facilement entre différentes combinaisons cluster/utilisateur.

Gérer les contextes avec kubectl config

Les contextes sont le principal moyen pour kubectl de gérer votre connexion à différents clusters Kubernetes. Ils agissent comme des raccourcis, vous permettant de basculer entre eux avec une seule commande.

Afficher les contextes disponibles

Pour voir tous les contextes disponibles dans votre fichier kubeconfig actuel, utilisez la commande suivante :

kubectl config get-contexts

Cette commande affichera une liste de contextes, avec le cluster, l'utilisateur et l'espace de noms associés à chacun. Le contexte actuellement actif sera marqué d'un astérisque (*).

Exemple de sortie :

CURRENT   NAME                 CLUSTER              AUTHINFO       NAMESPACE
*         my-dev-context       my-dev-cluster       dev-user       default
          my-prod-context      my-prod-cluster      prod-user      production
          staging-context      staging-cluster      staging-user   staging

Obtenir le contexte actuel

Pour vérifier rapidement quel contexte vous utilisez actuellement, exécutez :

kubectl config current-context

Cela affichera le nom du contexte actif.

Changer de contexte

Changer de contexte est simple. Utilisez la sous-commande use-context suivie du nom du contexte que vous souhaitez activer :

kubectl config use-context <nom-du-contexte>

Par exemple, pour passer à my-prod-context dans l'exemple ci-dessus :

kubectl config use-context my-prod-context

Après avoir exécuté cette commande, les commandes kubectl suivantes seront dirigées vers le cluster spécifié dans my-prod-context.

Définir un contexte

Vous pouvez également définir un contexte spécifique pour un cluster et un utilisateur sans nécessairement en faire la valeur par défaut pour une utilisation future. Cela est utile pour des opérations temporaires.

kubectl config set-context <nom-du-contexte> --cluster=<nom-du-cluster> --user=<nom-utilisateur> --namespace=<nom-espace-de-noms>

Si vous omettez --namespace, l'espace de noms par défaut du cluster sera utilisé.

Gérer les clusters et les utilisateurs

Bien que les contextes soient utilisés pour basculer, vous pouvez également gérer directement les configurations de cluster et d'utilisateur auxquelles les contextes font référence.

Afficher les informations du cluster

Pour lister tous les clusters configurés :

kubectl config get-clusters

Pour afficher les détails d'un cluster spécifique :

kubectl config view --minify -o jsonpath='{.clusters[?(@.name=="<nom-du-cluster>")].cluster}'

Remplacez <nom-du-cluster> par le nom réel de votre cluster.

Afficher les informations utilisateur

Pour lister tous les utilisateurs configurés :

kubectl config get-users

Ajouter et modifier des configurations

Vous pouvez ajouter de nouveaux clusters, utilisateurs et contextes, ou modifier ceux existants :

  • Ajouter un nouveau cluster :
    kubectl config set-cluster <nom-du-cluster> --server=<url-serveur-api> --certificate-authority=<chemin-vers-fichier-ca> --embed-certs=true
    
  • Ajouter un nouvel utilisateur :
    kubectl config set-credentials <nom-utilisateur> --client-certificate=<chemin-vers-fichier-cert> --client-key=<chemin-vers-fichier-cle> --embed-certs=true
    
  • Ajouter un nouveau contexte :
    kubectl config set-context <nom-du-contexte> --cluster=<nom-du-cluster> --user=<nom-utilisateur> --namespace=<nom-espace-de-noms>
    

Gérer plusieurs fichiers Kubeconfig

Pour une sécurité et une organisation renforcées, surtout lorsque vous traitez avec de nombreux clusters ou des informations d'identification sensibles, il est recommandé de garder vos fichiers kubeconfig séparés. kubectl peut gérer plusieurs fichiers kubeconfig en utilisant la variable d'environnement KUBECONFIG ou le drapeau --kubeconfig.

Utiliser la variable d'environnement KUBECONFIG

Vous pouvez spécifier une liste de fichiers kubeconfig à charger. kubectl fusionne ces fichiers. Si le même cluster, utilisateur ou contexte nommé apparaît dans plusieurs fichiers, la priorité de fusion dépend de l'ordre des fichiers dans KUBECONFIG, donc utilisez des noms uniques pour éviter les surprises.

Pour définir cette variable pour votre session shell actuelle :

export KUBECONFIG=~/.kube/config:~/.kube/config-dev:~/.kube/config-prod

Pour rendre cela persistant, ajoutez la ligne export à votre fichier de profil shell (par exemple, ~/.bashrc, ~/.zshrc).

Utiliser le drapeau --kubeconfig

Alternativement, vous pouvez spécifier un fichier kubeconfig particulier pour une seule commande kubectl :

kubectl --kubeconfig=~/.kube/config-dev get pods

Cela est utile pour des commandes ponctuelles ou lorsque vous voulez être absolument sûr du fichier utilisé.

Meilleures pratiques pour la gestion multi-cluster

  • Utilisez des fichiers séparés : Stockez les configurations pour différents environnements (dev, staging, prod) ou fournisseurs cloud dans des fichiers kubeconfig distincts (par exemple, config-dev, config-staging, config-prod).
  • Tirez parti de KUBECONFIG : Définissez la variable d'environnement KUBECONFIG dans votre profil shell pour fusionner et gérer facilement plusieurs fichiers sans fusion manuelle.
  • Noms de contexte descriptifs : Utilisez des noms clairs et descriptifs pour vos contextes (par exemple, aws-prod-us-east-1, gke-dev-eu-west-2) pour éviter toute confusion.
  • Conscience de l'espace de noms : Soyez toujours conscient de l'espace de noms dans lequel vous opérez. Utilisez le drapeau --namespace ou définissez-le dans votre contexte pour cibler le bon espace de noms.
  • Auditez régulièrement : Vérifiez périodiquement vos contextes et configurations de cluster pour vous assurer qu'ils sont à jour et sécurisés.
  • Sécurisez votre Kubeconfig : Traitez vos fichiers kubeconfig comme des informations d'identification sensibles. Restreignez les permissions des fichiers et évitez de les commettre dans le contrôle de version.

Conclusion finale

Faites des vérifications de contexte une partie de votre flux de travail. Exécutez kubectl config current-context avant les commandes risquées, utilisez des noms de contexte descriptifs, définissez les espaces de noms intentionnellement et gardez les informations d'identification de production hors des sessions shell occasionnelles lorsque vous n'en avez pas besoin.