Rotazione delle credenziali del cluster


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

Informazioni sulle rotazioni delle credenziali in GKE

L'autorità di certificazione (CA) radice del cluster ha una durata limitata. Alla scadenza della CA, le credenziali firmate dalla CA non sono più valide, inclusi il certificato client del cluster (dal campo dell'API MasterAuth), la chiave e il certificato per il server API e i certificati client kubelet. Per maggiori dettagli, consulta 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 ricreazione dei nodi per utilizzare nuove credenziali. Devi avviare e finish una rotazione delle credenziali per il cluster finish della scadenza delle credenziali attuali. Oltre alla rotazione delle credenziali, la rotazione delle credenziali esegue anche una rotazione IP.

Quando eseguire una rotazione delle credenziali

Devi eseguire la rotazione delle credenziali regolarmente e prima della data di scadenza delle credenziali attuale. La rotazione delle credenziali richiede la nuova creazione dei nodi per l'utilizzo delle nuove credenziali, il che potrebbe causare interruzioni all'esecuzione dei carichi di lavoro. Pianifica i 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 le credenziali del cluster sono già scadute, GKE fornisce indicazioni con un insight e un suggerimento per spiegare che devi eseguire una 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 questa 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, altrimenti GKE avvia automaticamente una rotazione delle credenziali entro 30 giorni dalla data di scadenza corrente della CA, come spiegato nella sezione successiva.

Criterio di automazione di GKE per evitare interruzioni dei cluster

Per evitare che il cluster entri in uno stato non recuperabile se le credenziali attuali scadono, GKE avvia automaticamente una rotazione delle credenziali entro 30 giorni dalla data di scadenza attuale della CA. Ad esempio, se la tua CA del cluster scade il 6 gennaio 2024 e non ruoti le tue 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 risorsa per evitare l'interruzione del cluster e prevede le seguenti considerazioni:

  • Le rotazioni automatiche ignorano eventuali periodi di manutenzione configurati o esclusioni di manutenzione.
  • Al termine della rotazione delle credenziali, le credenziali in scadenza vengono revocate. I client API Kubernetes esterni al cluster, ad esempio kubectl negli ambienti locali, non funzioneranno fino a quando non avrai configurato i client
  • Le ricreazioni dei pool di nodi durante la rotazione potrebbero causare interruzioni dell'esecuzione dei carichi di lavoro

Le rotazioni automatiche avviate da GKE sono una misura di prevenzione delle interruzioni dell'ultima risorsa. Non affidarti solo a 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 initialize gcloud CLI. Se hai già installato gcloud CLI, scarica la versione più recente eseguendo gcloud components update.

Controlla la durata delle credenziali

Ti consigliamo di controllare 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 controllare 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 controllare 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

Eseguire una rotazione delle credenziali

La rotazione delle credenziali prevede i seguenti passaggi:

  1. Avvia la rotazione: il piano di controllo inizia la pubblicazione su un nuovo indirizzo IP oltre all'indirizzo IP originale. Vengono inviate nuove credenziali 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à derivante dai periodi di manutenzione e dalle esclusioni.
  3. Aggiorna i 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 utilizzando 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 le eventuali credenziali statiche esistenti per Kubernetes ServiceAccounts.

Avvia la rotazione

Per avviare una rotazione delle credenziali, esegui questo comando:

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 in modo che utilizzi due indirizzi IP: l'indirizzo IP originale e un nuovo indirizzo IP.

Ricrea i nodi

Dopo aver riconfigurato il server API in modo che utilizzi un nuovo indirizzo IP, GKE aggiorna automaticamente i nodi in modo da utilizzare il nuovo indirizzo IP e le nuove credenziali se è disponibile la manutenzione. GKE esegue l'upgrade di tutti i tuoi nodi alla stessa versione GKE già in esecuzione, ricreando i nodi. Per ulteriori informazioni, consulta la pagina relativa agli 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 attivo o un'esclusione nel cluster impedisce a GKE di ricreare alcuni nodi durante questo periodo di sette giorni, la rotazione delle credenziali non verrà completata.

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

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

    Sostituisci VERSION con la stessa versione di GKE che utilizza già il cluster.

    Per maggiori informazioni, consulta Avvertenze 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 comando seguente:

    gcloud container operations wait OPERATION_ID
    

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

Aggiorna client API

Dopo aver avviato la rotazione delle credenziali, devi aggiornare tutti i client API all'esterno del 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 ciascun client:

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

Aggiorna le credenziali ServiceAccount Kubernetes

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

Aggiorna indirizzi IP e regole firewall impostati come hardcoded

Se hai impostato come hardcoded l'indirizzo IP del piano di controllo nel tuo ambiente o se sono presenti 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, queste risorse potrebbero subire interruzioni all'interruzione della pubblicazione di GKE 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