
Configuration de kubectl pour accéder à différents clusters (kubeconfig)
Apprenez à configurer kubectl via le fichier kubeconfig pour gérer l'accès sécurisé à un ou plusieurs clusters Kubernetes. Maîtrisez les contextes.
Le passeport pour vos clusters : comprendre le kubeconfig
Maintenant que `kubectl` est installé, comment sait-il à quel cluster Kubernetes se connecter ? Comment gère-t-il les informations d'authentification nécessaires pour parler à l'API Server ? Et comment pouvez-vous facilement basculer entre différents clusters (par exemple, développement, staging, production) ou utiliser différents utilisateurs sur un même cluster ? La réponse réside dans un fichier de configuration spécial : le fichier kubeconfig.
Ce fichier contient toutes les informations nécessaires pour que `kubectl` puisse trouver, s'authentifier et communiquer avec un ou plusieurs clusters Kubernetes. Il agit comme un carnet d'adresses et un trousseau de clés pour vos environnements K8s. Comprendre sa structure et savoir le manipuler est essentiel pour une utilisation efficace et sécurisée de `kubectl`, surtout lorsque vous travaillez avec plusieurs clusters.
Anatomie d'un fichier kubeconfig
Par défaut, `kubectl` recherche ce fichier à l'emplacement `~/.kube/config` (sur Linux et macOS) ou `%USERPROFILE%\.kube\config` (sur Windows). Il s'agit d'un fichier au format YAML qui organise les informations en trois sections principales, plus une directive indiquant la configuration active :
- `clusters` : Définit une liste de clusters. Chaque entrée spécifie un nom pour le cluster, l'URL de son API Server (`server`) et les informations d'autorité de certification (`certificate-authority-data` ou `certificate-authority`) pour vérifier l'identité du serveur.
- `users` : Définit une liste d'utilisateurs. Chaque entrée spécifie un nom pour l'utilisateur et ses informations d'authentification. Celles-ci peuvent prendre différentes formes : un certificat client et une clé privée (`client-certificate-data`/`client-key-data`), un token d'authentification (`token`), ou des plugins d'authentification externes (pour l'intégration avec des systèmes comme OIDC, AWS IAM, etc.). L'utilisation de username/password est possible mais fortement déconseillée pour des raisons de sécurité.
- `contexts` : Définit une liste de contextes. Un contexte est une association nommée qui lie un `cluster`, un `user` et, facultativement, un `namespace` par défaut. C'est le contexte qui définit l'environnement complet dans lequel `kubectl` va opérer.
- `current-context` : Indique le nom du `context` qui doit être utilisé par défaut lorsque vous exécutez une commande `kubectl` sans spécifier explicitement un autre contexte.
Voici un exemple simplifié de structure :
apiVersion: v1
kind: Config
preferences: {}
clusters:
- name: cluster-dev
cluster:
certificate-authority-data: [CA_DATA_DEV]
server: https://api.dev.example.com
- name: cluster-prod
cluster:
certificate-authority-data: [CA_DATA_PROD]
server: https://api.prod.example.com
users:
- name: user-dev
user:
client-certificate-data: [CERT_DATA_DEV]
client-key-data: [KEY_DATA_DEV]
- name: user-prod-admin
user:
token: [TOKEN_PROD]
contexts:
- name: dev-context
context:
cluster: cluster-dev
user: user-dev
namespace: frontend-dev
- name: prod-context
context:
cluster: cluster-prod
user: user-prod-admin
namespace: default
current-context: dev-contextLocalisation et fusion des fichiers kubeconfig
`kubectl` détermine quel(s) fichier(s) kubeconfig utiliser selon les règles suivantes, par ordre de priorité :
- Utiliser le chemin spécifié par le flag `--kubeconfig` lors de l'appel de la commande `kubectl`.
- Utiliser les chemins spécifiés dans la variable d'environnement `KUBECONFIG`. Cette variable peut contenir une liste de chemins de fichiers séparés par des deux-points (`:`) sur Linux/macOS ou des points-virgules (`;`) sur Windows. Si cette variable est définie, `kubectl` fusionne les configurations de tous les fichiers listés.
- Utiliser le fichier par défaut : `~/.kube/config`.
La capacité de fusionner plusieurs fichiers via la variable `KUBECONFIG` est très pratique. Par exemple, vous pouvez garder votre configuration principale dans `~/.kube/config` et avoir des fichiers séparés pour des clusters spécifiques fournis par des outils ou des collègues, puis définir `KUBECONFIG=~/.kube/config:/chemin/vers/autre/config.yaml`.
Il est important de noter que de nombreux outils (Minikube, Kind, les CLIs des fournisseurs cloud comme `aws eks update-kubeconfig`, `gcloud container clusters get-credentials`, `az aks get-credentials`) modifient souvent automatiquement votre fichier kubeconfig par défaut (`~/.kube/config`) pour y ajouter les informations du cluster nouvellement créé ou configuré. Soyez conscient de cela et sauvegardez votre fichier si nécessaire.
Gérer les contextes avec `kubectl config`
La sous-commande `kubectl config` est votre outil principal pour visualiser et manipuler les informations de votre (vos) fichier(s) kubeconfig sans avoir à éditer directement le YAML.
- Afficher la configuration :
- `kubectl config view` : Affiche la configuration fusionnée complète.
- `kubectl config view --minify` : N'affiche que les informations relatives au contexte courant (cluster, user, context). - Lister les éléments :
- `kubectl config get-clusters` : Liste tous les clusters définis.
- `kubectl config get-users` : Liste tous les utilisateurs définis.
- `kubectl config get-contexts` : Liste tous les contextes définis. Le contexte actuel est marqué par un astérisque (`*`). - Gérer le contexte courant :
- `kubectl config current-context` : Affiche le nom du contexte actuellement actif.
- `kubectl config use-context [NOM_CONTEXTE]` : C'est LA commande clé pour basculer vers un autre contexte. Toutes les commandes `kubectl` suivantes utiliseront ce nouveau contexte par défaut. - Modifier la configuration (exemples) :
- `kubectl config set-cluster mon-nouveau-cluster --server=... --certificate-authority=...` : Ajoute ou modifie un cluster.
- `kubectl config set-credentials mon-nouvel-user --token=...` : Ajoute ou modifie un utilisateur.
- `kubectl config set-context mon-nouveau-contexte --cluster=mon-nouveau-cluster --user=mon-nouvel-user --namespace=mon-ns` : Crée ou modifie un contexte.
- `kubectl config unset users.mon-ancien-user` : Supprime un utilisateur (attention, ne supprime pas les contextes qui le référencent).
- `kubectl config delete-context [NOM_CONTEXTE]` : Supprime un contexte.
Bonnes pratiques et outils utiles
Quelques conseils pour gérer vos kubeconfigs :
- Sécurité : Le fichier kubeconfig contient des informations sensibles (clés, tokens). Protégez-le avec des permissions de fichier appropriées (lecture/écriture pour vous seul). Evitez de le commiter dans un dépôt Git public.
- Sauvegardes : Sauvegardez régulièrement votre fichier `~/.kube/config`, surtout avant de laisser un outil le modifier automatiquement.
- Organisation : Pour des configurations complexes, envisagez d'utiliser plusieurs fichiers et de les gérer via la variable `KUBECONFIG` plutôt que d'avoir un unique fichier monolithique.
- Outils externes : Des outils comme `kubectx` (pour changer de contexte rapidement) et `kubens` (pour changer de namespace par défaut rapidement) sont extrêmement populaires et peuvent grandement améliorer votre workflow quotidien. Ils sont souvent plus rapides et intuitifs que les commandes `kubectl config` équivalentes. D'autres outils comme `k9s` (interface terminal) intègrent aussi la gestion des contextes.
En maîtrisant la configuration de `kubectl` via le fichier kubeconfig et les commandes `kubectl config`, vous gagnez en flexibilité et en efficacité pour travailler avec un ou plusieurs clusters Kubernetes. Vous êtes maintenant prêt à utiliser `kubectl` pour explorer votre cluster et interagir avec ses ressources.