Rotazione delle credenziali del cluster


Questa pagina spiega come eseguire una rotazione delle credenziali nei cluster Google Kubernetes Engine (GKE).

Informazioni sulla rotazione delle credenziali in GKE

L'autorità di certificazione (CA) radice del cluster ha una durata limitata. Alla scadenza della CA, tutte le credenziali firmate dalla CA non sono più valide, inclusi il certificato client cluster (dal campo API MasterAuth), la chiave e il certificato per il server API e i certificati client kubelet. Per i dettagli, vedi Durata della CA radice del cluster.

Puoi eseguire una rotazione delle credenziali per revocare ed emettere nuove credenziali per il cluster. Questa operazione ruota la chiave privata CA del cluster e richiede la creazione di nodi per utilizzare nuove credenziali. Devi avviare e finish la rotazione delle credenziali per il cluster finish della scadenza delle credenziali attuali. Oltre a ruotare le credenziali, la rotazione delle credenziali esegue anche una rotazione IP.

Quando eseguire una rotazione delle credenziali

Esegui la rotazione delle credenziali regolarmente e prima della data di scadenza attuale delle credenziali. Le rotazioni delle credenziali richiedono la ricreazione dei nodi per utilizzare le nuove credenziali, il che potrebbe compromettere l'esecuzione dei carichi di lavoro. Pianifica periodi di manutenzione ed esegui le rotazioni durante i periodi di manutenzione per evitare tempi di inattività imprevisti dei carichi di lavoro o client API che non rispondono al cluster.

Trova i cluster con credenziali in scadenza o scadute

Se le credenziali del cluster scadranno nei prossimi 180 giorni o se sono già scadute, GKE fornisce indicazioni con un insight e un suggerimento per spiegare che è necessario eseguire la rotazione delle credenziali per questo cluster. Queste indicazioni includono la data di scadenza delle credenziali. Puoi visualizzare queste indicazioni nella console Google Cloud. In alternativa, puoi visualizzare queste linee guida con gcloud CLI, o l'API Recommender, specificando il sottotipo CLUSTER_CA_EXPIRATION.

Se ricevi un insight e un suggerimento per un cluster, devi eseguire una rotazione delle credenziali. In caso contrario, GKE avvierà automaticamente una rotazione delle credenziali entro 30 giorni dalla data di scadenza della CA attuale, come spiegato nella sezione successiva. Una volta completata la rotazione delle credenziali, la risoluzione dell'insight e del suggerimento può richiedere fino a 36 ore.

Criteri di automazione di GKE per evitare interruzioni del cluster

Per evitare che il cluster entri in uno stato irreversibile se le credenziali attuali scadono, GKE avvia automaticamente la rotazione delle credenziali entro 30 giorni dalla data di scadenza della CA attuale. Ad esempio, se la tua CA del cluster scade il 6 gennaio 2024 e non ruoti le credenziali entro il 5 dicembre 2023, GKE avvia una rotazione automatica il 7 dicembre 2023 o in una data successiva e la completa sette giorni dopo l'inizio dell'operazione. Questa rotazione automatica è un tentativo di ultima istanza per evitare l'interruzione di un cluster e prevede le seguenti considerazioni:

  • Le rotazioni automatiche ignorano eventuali periodi di manutenzione o esclusioni di manutenzione configurate
  • Al termine della rotazione delle credenziali, le credenziali in scadenza vengono revocate. I client API Kubernetes esterni al cluster, come kubectl in ambienti locali, non funzioneranno finché non configuri i client
  • Le ricreazioni del pool di nodi durante la rotazione potrebbero causare interruzioni dei carichi di lavoro in esecuzione

Le rotazioni automatiche avviate da GKE sono una misura per la prevenzione delle interruzioni dell'ultimo servizio. Non fare affidamento solo su queste rotazioni automatiche: sono una misura di emergenza preventiva per evitare interruzioni complete.

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti attività:

  • Abilita l'API Google Kubernetes Engine.
  • Abilita l'API Google Kubernetes Engine
  • Se vuoi utilizzare Google Cloud CLI per questa attività, installa e quindi initialize gcloud CLI. Se hai già installato gcloud CLI, ottieni la versione più recente eseguendo gcloud components update.

Controlla la durata delle credenziali

Ti consigliamo di verificare la durata delle credenziali prima e dopo aver eseguito una rotazione delle credenziali in modo da conoscere la validità della CA radice del cluster.

Per verificare la durata delle credenziali per un singolo cluster, esegui questo comando:

gcloud container clusters describe CLUSTER_NAME \
    --region REGION_NAME \
    --format "value(masterAuth.clusterCaCertificate)" \
    | base64 --decode \
    | openssl x509 -noout -dates

L'output è simile al seguente:

notBefore=Mar 17 16:45:34 2023 GMT
notAfter=Mar  9 17:45:34 2053 GMT

Per verificare la durata delle credenziali per tutti i cluster in un progetto, esegui questo comando:

gcloud container clusters list --project PROJECT_ID \
    | awk 'NR>1 {print "echo; echo Validity for cluster " $1 " in location " $2 ":;\
         gcloud container clusters describe --project PROJECT_ID " $1 " --location " $2 " \
         --format \"value(masterAuth.clusterCaCertificate)\" \
         | base64 --decode | openssl x509 -noout -dates"}' \
    | bash

Esegui una rotazione delle credenziali

La rotazione delle credenziali prevede i seguenti passaggi:

  1. Avvia la rotazione: il piano di controllo avvia la pubblicazione su un nuovo indirizzo IP oltre all'indirizzo IP originale. Le nuove credenziali vengono inviate ai carichi di lavoro e al piano di controllo.
  2. Ricrea i nodi: GKE ricrea i nodi del cluster in modo che i nodi utilizzino il nuovo indirizzo IP e le nuove credenziali, rispettando la disponibilità prevista per i periodi di manutenzione e le esclusioni. Puoi anche ricreare manualmente i nodi eseguendo un upgrade della versione dei nodi alla stessa versione GKE già eseguita dai nodi.
  3. Aggiornamento dei client API: dopo aver avviato la rotazione, aggiorna gli eventuali client API del cluster, ad esempio le macchine di sviluppo che utilizzano kubectl, per comunicare con il piano di controllo mediante il nuovo indirizzo IP.
  4. Completa la rotazione: il piano di controllo smette di gestire il traffico sull'indirizzo IP originale. Le vecchie credenziali vengono revocate, incluse eventuali credenziali statiche esistenti per Kubernetes ServiceAccounts.

Quando avvii una rotazione delle credenziali, GKE ricrea i nodi per te. Tuttavia, durante eventi importanti come Google Cloud Next, potremmo mettere in pausa le ricreazioni automatiche dei nodi, per evitare interruzioni. Se non completi la rotazione delle credenziali entro sette giorni dall'avvio, GKE tenta di completarla per te. Se altri nodi nel cluster utilizzano ancora le credenziali precedenti, il completamento automatico non va a buon fine. Dovresti pianificare di monitorare manualmente e completare la rotazione delle credenziali dopo l'avvio della rotazione. Non fare affidamento sul completamento automatico, che è una misura del best effort.

Avvia la rotazione

Per avviare la rotazione delle credenziali, esegui il comando seguente:

gcloud container clusters update CLUSTER_NAME \
    --region REGION_NAME \
    --start-credential-rotation

Questo comando crea nuove credenziali, invia queste credenziali al piano di controllo e configura il piano di controllo per la pubblicazione su due indirizzi IP: l'indirizzo IP originale e un nuovo indirizzo IP.

Ricrea i nodi

Dopo aver riconfigurato il server API per la pubblicazione su un nuovo indirizzo IP, GKE aggiorna automaticamente i nodi in modo che utilizzino il nuovo indirizzo IP e le nuove credenziali in caso di disponibilità di manutenzione. GKE esegue l'upgrade di tutti i nodi alla stessa versione GKE già in esecuzione, che li ricrea. Per ulteriori informazioni, consulta Upgrade dei pool di nodi.

Per impostazione predefinita, GKE completa automaticamente la rotazione delle credenziali sette giorni dopo l'avvio dell'operazione. Se un periodo di manutenzione o un'esclusione attiva nel tuo cluster impediscono a GKE di ricreare alcuni nodi durante questo periodo di sette giorni, la rotazione delle credenziali non viene completata.

  • Se utilizzi esclusioni di manutenzione o periodi di manutenzione che potrebbero comportare una rotazione non riuscita, esegui manualmente l'upgrade del cluster per forzare la ricreazione dei nodi:

    gcloud container clusters upgrade CLUSTER_NAME \
        --location=LOCATION \
        --cluster-version=VERSION
    

    Sostituisci VERSION con la stessa versione GKE già utilizzata dal cluster.

    Per maggiori informazioni, consulta le caveat per i periodi di manutenzione.

Controlla l'avanzamento della ricreazione del pool di nodi

  1. Per monitorare l'operazione di rotazione, esegui questo comando:

    gcloud container operations list \
        --filter="operationType=UPGRADE_NODES AND status=RUNNING" \
        --format="value(name)"
    

    Questo comando restituisce l'ID operazione dell'operazione di upgrade del nodo.

  2. Per eseguire il polling dell'operazione, passa l'ID operazione al seguente comando:

    gcloud container operations wait OPERATION_ID
    

I pool di nodi vengono ricreati uno alla volta e ognuno ha una propria operazione. Se hai più pool di nodi, utilizza queste istruzioni per eseguire il polling di ogni operazione.

Aggiornamento client API

Dopo aver avviato la rotazione delle credenziali, devi aggiornare tutti i client API esterni al cluster (ad esempio kubectl sui computer degli sviluppatori) per utilizzare le nuove credenziali e puntare al nuovo indirizzo IP del piano di controllo.

Per aggiornare i client API, esegui questo comando per ogni client:

gcloud container clusters get-credentials CLUSTER_NAME \
    --region REGION_NAME

Aggiorna le credenziali dell'account di servizio di Kubernetes

Se utilizzi credenziali statiche per ServiceAccounts nel tuo cluster, passa alle credenziali di breve durata. Il completamento della rotazione invalida le credenziali ServiceAccount esistenti. Se non vuoi utilizzare credenziali di breve durata, assicurati di ricreare le credenziali statiche per tutti gli account di servizio nel cluster dopo aver completato la rotazione.

Aggiorna gli indirizzi IP impostati come hardcoded e le regole del firewall

Se hai eseguito l'hardcoded dell'indirizzo IP del piano di controllo nel tuo ambiente o se hai regole firewall che hanno come target l'indirizzo IP del piano di controllo, aggiorna gli indirizzi al nuovo indirizzo IP. Se completi la rotazione senza aggiornare gli indirizzi IP nelle applicazioni e nelle regole firewall, le risorse potrebbero subire interruzioni quando GKE smette di funzionare sull'indirizzo IP del piano di controllo precedente.

Completa la rotazione

Dopo aver aggiornato i client API all'esterno del cluster, completa la rotazione per configurare il piano di controllo in modo che utilizzi solo le nuove credenziali e il nuovo indirizzo IP:

gcloud container clusters update CLUSTER_NAME \
    --region=REGION_NAME \
    --complete-credential-rotation

Se la rotazione delle credenziali non viene completata e restituisce un messaggio di errore simile al seguente, consulta la risoluzione dei problemi:

ERROR: (gcloud.container.clusters.update) ResponseError: code=400, message=Node pool "test-pool-1" requires recreation.

Passaggi successivi