Guida alla gestione di più cluster Kubernetes con kubectl config
Gestisci più cluster Kubernetes con contesti kubectl, file kubeconfig, namespace e comandi di commutazione più sicuri.
Guida alla gestione di più cluster Kubernetes con kubectl config
Gestire più cluster Kubernetes è normale quando si dispone di ambienti di sviluppo, staging, produzione o cluster in più di un cloud. Il rischio è semplice: un comando può colpire il cluster sbagliato se il tuo contesto non è chiaro.
Questa guida mostra come utilizzare kubectl config per ispezionare i contesti, cambiare cluster, impostare namespace e organizzare più file kubeconfig.
Comprendere il file Kubeconfig
Prima di immergersi nei comandi kubectl config, è essenziale comprendere il file kubeconfig. Questo file memorizza informazioni sui tuoi cluster, utenti e i contesti che li legano insieme. kubectl utilizza questo file per autenticarsi e specificare con quale cluster interagire. Per impostazione predefinita, kubectl cerca il file kubeconfig in $HOME/.kube/config.
All'interno di questo file troverai tre sezioni principali:
clusters: Definisce i cluster Kubernetes, inclusi i loro endpoint del server API e le autorità di certificazione.users: Memorizza le credenziali di autenticazione, come certificati client e token.contexts: Associa un cluster, un utente e opzionalmente un namespace. Un contesto fornisce un modo conveniente per raggruppare queste configurazioni, consentendo akubectldi passare facilmente tra diverse combinazioni cluster/utente.
Gestione dei contesti con kubectl config
I contesti sono il modo principale con cui kubectl gestisce la tua connessione a diversi cluster Kubernetes. Fungono da scorciatoie, permettendoti di passare da uno all'altro con un singolo comando.
Visualizzazione dei contesti disponibili
Per vedere tutti i contesti disponibili nel tuo file kubeconfig corrente, usa il seguente comando:
kubectl config get-contexts
Questo comando restituirà un elenco di contesti, insieme al cluster, utente e namespace associati a ciascuno. Il contesto attualmente attivo sarà contrassegnato con un asterisco (*).
Esempio di output:
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
Ottenere il contesto corrente
Per verificare rapidamente quale contesto stai utilizzando attualmente, esegui:
kubectl config current-context
Questo restituirà il nome del contesto attivo.
Cambiare contesto
Passare a un contesto diverso è semplice. Usa il sottocomando use-context seguito dal nome del contesto che desideri attivare:
kubectl config use-context <nome-contesto>
Ad esempio, per passare a my-prod-context dall'esempio precedente:
kubectl config use-context my-prod-context
Dopo aver eseguito questo comando, i successivi comandi kubectl saranno diretti al cluster specificato in my-prod-context.
Impostare un contesto
Puoi anche impostare un contesto specifico per un cluster e un utente senza renderlo necessariamente predefinito per usi futuri. Questo è utile per operazioni temporanee.
kubectl config set-context <nome-contesto> --cluster=<nome-cluster> --user=<nome-utente> --namespace=<nome-namespace>
Se ometti --namespace, verrà utilizzato il namespace predefinito del cluster.
Gestione di cluster e utenti
Mentre i contesti vengono utilizzati per il cambio, puoi anche gestire direttamente le configurazioni di cluster e utenti a cui i contesti fanno riferimento.
Visualizzazione delle informazioni del cluster
Per elencare tutti i cluster configurati:
kubectl config get-clusters
Per visualizzare i dettagli di un cluster specifico:
kubectl config view --minify -o jsonpath='{.clusters[?(@.name=="<nome-cluster>")].cluster}'
Sostituisci <nome-cluster> con il nome effettivo del tuo cluster.
Visualizzazione delle informazioni utente
Per elencare tutti gli utenti configurati:
kubectl config get-users
Aggiunta e modifica delle configurazioni
Puoi aggiungere nuovi cluster, utenti e contesti, o modificare quelli esistenti:
- Aggiungere un nuovo cluster:
kubectl config set-cluster <nome-cluster> --server=<url-server-api> --certificate-authority=<percorso-file-ca> --embed-certs=true - Aggiungere un nuovo utente:
kubectl config set-credentials <nome-utente> --client-certificate=<percorso-file-cert> --client-key=<percorso-file-chiave> --embed-certs=true - Aggiungere un nuovo contesto:
kubectl config set-context <nome-contesto> --cluster=<nome-cluster> --user=<nome-utente> --namespace=<nome-namespace>
Gestione di più file Kubeconfig
Per una maggiore sicurezza e organizzazione, specialmente quando si ha a che fare con molti cluster o credenziali sensibili, è buona pratica mantenere separati i file kubeconfig. kubectl può gestire più file kubeconfig utilizzando la variabile d'ambiente KUBECONFIG o il flag --kubeconfig.
Utilizzo della variabile d'ambiente KUBECONFIG
Puoi specificare un elenco di file kubeconfig da caricare. kubectl unisce questi file. Se lo stesso cluster, utente o contesto con nome appare in più di un file, la precedenza di unione dipende dall'ordine dei file in KUBECONFIG, quindi usa nomi univoci per evitare sorprese.
Per impostare questa variabile per la sessione corrente della shell:
export KUBECONFIG=~/.kube/config:~/.kube/config-dev:~/.kube/config-prod
Per renderla persistente, aggiungi la riga export al file di profilo della tua shell (ad esempio, ~/.bashrc, ~/.zshrc).
Utilizzo del flag --kubeconfig
In alternativa, puoi specificare un file kubeconfig particolare per un singolo comando kubectl:
kubectl --kubeconfig=~/.kube/config-dev get pods
Questo è utile per comandi occasionali o quando vuoi essere assolutamente certo di quale file viene utilizzato.
Best practice per la gestione multi-cluster
- Usa file separati: Memorizza le configurazioni per diversi ambienti (dev, staging, prod) o provider cloud in file kubeconfig distinti (ad esempio,
config-dev,config-staging,config-prod). - Sfrutta
KUBECONFIG: Imposta la variabile d'ambienteKUBECONFIGnel profilo della tua shell per unire e gestire facilmente più file senza unione manuale. - Nomi di contesto descrittivi: Usa nomi chiari e descrittivi per i tuoi contesti (ad esempio,
aws-prod-us-east-1,gke-dev-eu-west-2) per evitare confusione. - Consapevolezza del namespace: Fai sempre attenzione al namespace in cui stai operando. Usa il flag
--namespaceo impostalo nel tuo contesto per indirizzare il namespace corretto. - Controlla regolarmente: Rivedi periodicamente i tuoi contesti e le configurazioni dei cluster per assicurarti che siano aggiornati e sicuri.
- Proteggi il tuo Kubeconfig: Tratta i tuoi file kubeconfig come credenziali sensibili. Limita i permessi dei file ed evita di inserirli nel controllo versione.
Conclusione finale
Includi i controlli del contesto nel tuo flusso di lavoro. Esegui kubectl config current-context prima di comandi rischiosi, usa nomi di contesto descrittivi, imposta i namespace intenzionalmente e tieni le credenziali di produzione fuori dalle sessioni shell casuali quando non ne hai bisogno.