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 a kubectl di 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'ambiente KUBECONFIG nel 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 --namespace o 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.