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. Quando l'autorità di certificazione scade, tutte le credenziali firmate dall'autorità di certificazione 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 di kubelet. La durata delle credenziali del cluster dipende da quando hai creato il cluster o dall'ultima volta che hai ruotato le credenziali. Per maggiori dettagli, controlla la durata della credenziale.

Puoi eseguire una rotazione delle credenziali per revocare e emettere nuove credenziali per il tuo cluster. Questa operazione ruota la chiave privata della CA del cluster e richiede la nuova creazione dei nodi per utilizzare le nuove credenziali. Devi avviare e completare una rotazione delle credenziali per il tuo cluster prima della scadenza delle credenziali attuali. Oltre a girare le credenziali, la rotazione delle credenziali esegue anche una rotazione dell'IP.

Quando eseguire una rotazione delle credenziali

Devi eseguire la rotazione delle credenziali regolarmente e prima della data di scadenza delle credenziali correnti. Le rotazioni delle credenziali richiedono la ricreazione dei nodi per utilizzare le nuove credenziali, il che potrebbe causare interruzioni dei carichi di lavoro in esecuzione. Pianifica i periodi di manutenzione ed esegui le rotazioni durante le finestre di manutenzione per evitare tempi di riposo imprevisti del carico di lavoro o client API non rispondenti al di fuori del cluster.

Per scoprire di più su come la disponibilità per la manutenzione influisce sulla rotazione delle credenziali del cluster e su quale tipo di interruzione si verifica nel cluster durante i passaggi di una rotazione, consulta la riga relativa alla rotazione delle credenziali nella tabella delle modifiche manuali che ricreano i nodi utilizzando una strategia di upgrade dei nodi e rispettando le norme di manutenzione. GKE dipende dalla disponibilità delle risorse per aggiornare i nodi. Per scoprire di più sugli aggiornamenti dei nodi, consulta Pianificare le interruzioni per gli aggiornamenti dei nodi.

Tempo di vita delle credenziali del cluster

La durata delle credenziali del cluster dipende in genere da quando è stato creato il cluster o da quando le credenziali sono state ruotate più di recente:

  • I cluster creati prima di circa ottobre 2 2021 hanno una durata di 5 anni.
  • I cluster creati dopo circa ottobre 2021 hanno una durata di 30 anni.
  • I cluster ruotati dopo circa gennaio 2022 hanno una durata di 30 anni.

Trovare cluster con credenziali in scadenza o scadute

Se le credenziali del tuo cluster scadranno nei prossimi 180 giorni o se sono già scadute, GKE fornisce indicazioni con un'informazione e un consiglio 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 queste indicazioni con l'interfaccia a riga di comando gcloud o l'API Recommender specificando il sottotipo CLUSTER_CA_EXPIRATION.

Se ricevi un'informazione e un consiglio per un cluster, devi eseguire una rotazione delle credenziali oppure GKE avvia automaticamente una rotazione delle credenziali entro 30 giorni dalla data di scadenza dell'attuale CA, come spiegato nella sezione successiva. Una volta completata la rotazione delle credenziali, possono essere necessarie fino a 36 ore per la risoluzione dell'intuizione e del consiglio.

Criterio di automazione GKE per evitare interruzioni del 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 dell'attuale CA. Ad esempio, se la CA del tuo cluster scade il 6 gennaio 2024 e non ruoti le credenziali entro il 5 dicembre 2023, GKE avvia una rotazione automatica a partire dal 7 dicembre 2023 e la completa sette giorni dopo l'inizio dell'operazione. Questa rotazione automatica è un tentativo come ultima risorsa per evitare un interruzione del servizio del cluster e presenta le seguenti considerazioni:

  • Le rotazioni automatiche rispettano in genere le finestre di manutenzione o le esclusioni dalla manutenzione, ma GKE si riserva il diritto di eseguire i passaggi necessari per ruotare le credenziali entro 30 giorni dalla scadenza, indipendentemente dalla disponibilità della manutenzione.
  • Se la disponibilità per la manutenzione impedisce a GKE di completare inizialmente la rotazione, GKE continua a tentare di completarla fino alla data di scadenza delle credenziali, dopodiché il cluster diventa irrecuperabile.
  • Al termine della rotazione delle credenziali, quelle in scadenza vengono revocate. I client API Kubernetes esterni al cluster, come kubectl negli ambienti locali, non funzioneranno finché non li configurerai per utilizzare le nuove credenziali.
  • La ricreazione dei pool di nodi durante la rotazione potrebbe causare interruzioni dei carichi di lavoro in esecuzione.

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:

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

Controllare 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 principale del cluster.

Per controllare la durata delle credenziali per un singolo cluster, esegui il seguente 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

Se esegui questo comando dopo aver avviato una rotazione delle credenziali, l'output è la durata del certificato originale. Questo certificato rimane valido fino a quando non completa la rotazione. Al termine della rotazione, l'output è la durata del nuovo certificato.

Per controllare la durata delle credenziali per tutti i cluster di un progetto, esegui il seguente 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

Qualsiasi rotazione delle credenziali prevede i seguenti passaggi:

  1. Avvia la rotazione: il piano di controllo inizia a essere pubblicato su un nuovo indirizzo IP oltre all'indirizzo IP originale. Le nuove credenziali vengono rilasciate ai carichi di lavoro e al piano di controllo.
  2. Ri crea i nodi: GKE ricrea i nodi del cluster in modo che utilizzino il nuovo indirizzo IP e le nuove credenziali, rispettando la disponibilità delle finestre di manutenzione ed esclusioni. Puoi anche ricreare manualmente i nodi eseguendo un upgrade della versione del nodo alla stessa versione GKE già in esecuzione sui nodi.
  3. Aggiorna i client API: dopo aver avviato la rotazione, aggiorna i client API del cluster, ad esempio le macchine di sviluppo che utilizzano kubectl, in modo che comunichino 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 credenziali precedenti vengono revocate, incluse eventuali credenziali statiche esistenti per gli account di servizio Kubernetes.

Quando avvii una rotazione delle credenziali o quando GKE avvia automaticamente una rotazione, GKE esegue automaticamente questi passaggi, incluso il tentativo di completare la rotazione. A ogni passaggio, GKE rispetta la disponibilità per la manutenzione, anche se durante le rotazioni automatiche prima della scadenza del cluster, GKE si riserva il diritto di ignorare la disponibilità per la manutenzione per evitare che il cluster non sia recuperabile.

Se non completi una rotazione delle credenziali entro sette giorni dall'avvio, GKE tenta di completarla per te. Se alcuni nodi del tuo cluster utilizzano ancora le credenziali precedenti, l'operazione di completamento automatico non va a buon fine, ma GKE continua a tentare il completamento finché le credenziali non scadono e il cluster non diventa irrecuperabile. Dovresti pianificare di monitorare e completare manualmente le rotazioni delle credenziali che avvii. Per eseguire l'override dei blocchi della disponibilità per la manutenzione, esegui i comandi in ciascuna delle sezioni che seguono per attivare manualmente queste fasi del processo di rotazione. Non fare affidamento sul completamento automatico, che è una misura di tipo best effort.

Avvia la rotazione

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

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

Questo comando crea nuove credenziali, le emette al piano di controllo e configura il piano di controllo in modo che venga eseguito su due indirizzi IP: l'indirizzo IP originale e un nuovo indirizzo IP.

Ricrea i nodi

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

Per impostazione predefinita, GKE completa automaticamente le rotazioni delle credenziali sete giorni dopo l'avvio dell'operazione. Se un'esclusione o un'intervallo di manutenzione attivo nel cluster impedisce a GKE di ricreare alcuni nodi durante questo periodo di sette giorni, la rotazione delle credenziali non viene inizialmente completata. Tuttavia, GKE continua a provare a ricreare i nodi e completare la rotazione finché la disponibilità per la manutenzione non consente a GKE di procedere. Durante eventi importanti come Google Cloud Next, GKE potrebbe anche mettere in pausa le ricostruzioni automatiche dei nodi per evitare interruzioni.

  • Se utilizzi esclusioni o finestre di manutenzione che potrebbero comportare un fallimento della rotazione, 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 utilizzata già dal cluster.

    Per ulteriori informazioni, consulta le modifiche manuali che rispettano i criteri di manutenzione GKE.

Controllare l'avanzamento della ricreazione del pool di nodi

  1. Per monitorare l'operazione di rotazione, esegui il seguente 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 la propria operazione. Se hai più pool di nodi, segui queste istruzioni per eseguire il polling di ogni operazione.

Aggiorna i client API

Dopo aver avviato la rotazione delle credenziali, devi aggiornare tutti i client API esterni al cluster (ad esempio kubectl sulle macchine degli sviluppatori) in modo che utilizzino le nuove credenziali e puntino al nuovo indirizzo IP del piano di controllo.

Per aggiornare i client API, esegui il seguente comando per ogni client:

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

Aggiorna le credenziali dell'account di servizio Kubernetes

Se utilizzi credenziali statiche per gli account di servizio nel tuo cluster, passa alle credenziali a vita breve. Il completamento della rotazione rende non valide le credenziali dell'account di servizio 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 e le regole firewall hardcoded

Se hai impostato in modo hardcoded l'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 con il nuovo indirizzo IP. Se completi la rotazione senza aggiornare gli indirizzi IP nelle applicazioni e nelle regole del firewall, queste risorse potrebbero subire interruzioni quando GKE smette di funzionare sull'indirizzo IP del control plane 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 Errore 400: il pool di nodi richiede la ricostituzione:

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

GKE rispetta la disponibilità per la manutenzione quando completa automaticamente la rotazione, ma potrebbe ignorarla entro 30 giorni dalla scadenza per evitare che il cluster non sia recuperabile. Se il completamento della rotazione non va a buon fine inizialmente e la rotazione è stata avviata almeno sette giorni fa, GKE tenta di completarla fino alla data di scadenza delle credenziali, dopodiché il cluster diventa irrecuperabile.

Passaggi successivi