Prerequisiti per i cluster GKE su Google Cloud

Se stai registrando un cluster GKE su Google Cloud, potresti dover eseguire una o più delle seguenti operazioni prima di registrarlo, a seconda dell'opzione di registrazione scelta. Questa guida presuppone che hai già completato prerequisiti generali per registrazione del cluster.

Abilita Workload Identity Federation per GKE

Ti consigliamo di registrare i tuoi cluster GKE con la federazione delle identità per i carichi di lavoro abilitata, che fornisce un modo coerente per l'autenticazione delle applicazioni sui cluster nei servizi e nelle API Google Cloud. Per saperne di più sui vantaggi dell'abilitazione della federazione delle identità per i carichi di lavoro del parco risorse, consulta Utilizzare la federazione delle identità per i carichi di lavoro del parco risorse.

Per utilizzare questa funzionalità, devi assicurarti che la Federazione delle identità per i carichi di lavoro per GKE sia abilitata sul cluster prima della registrazione. La registrazione di un cluster GKE con la federazione delle identità per i carichi di lavoro del parco risorse senza che la federazione delle identità per i carichi di lavoro per GKE sia abilitata sul cluster può portare a incoerenze nella modalità di affermazione dell'identità da parte dei carichi di lavoro nel cluster e non è una configurazione supportata. Nei cluster Autopilot è abilitata la federazione delle identità per i carichi di lavoro per GKE per impostazione predefinita.

gcloud

Per verificare se la federazione delle identità per i carichi di lavoro per GKE è abilitata nel tuo cluster, esegui il seguente comando per elencare il pool di identità per i carichi di lavoro del cluster. Se non hai già specificato una zona o una regione predefinite per gcloud, devi specificare un flag --region o --zone durante l'esecuzione di questo comando.

gcloud container clusters describe CLUSTER_NAME --format="value(workloadIdentityConfig.workloadPool)"

Sostituisci quanto segue:

  • CLUSTER_NAME: il name del cluster GKE.

Se vedi un risultato simile al seguente, significa che la federazione delle identità per i carichi di lavoro per GKE è già abilitata nel tuo cluster:

GKE_PROJECT_ID.svc.id.goog

Se non vengono visualizzati risultati, significa che Workload Identity Federation for GKE non è abilitato. Segui le istruzioni riportate in Abilitazione di Workload Identity Federation per GKE.

Console

Per verificare se nel tuo cluster è abilitata la federazione delle identità per i carichi di lavoro per GKE:

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    Vai a Google Kubernetes Engine

  2. Nell'elenco dei cluster, fai clic sul nome del cluster.

  3. Nella pagina dei dettagli del cluster, nella sezione Sicurezza, verifica che Workload Identity sia indicato come Attivato.

Se Workload Identity è Disattivato e vuoi attivare questa funzionalità:

  1. Nella pagina dei dettagli del cluster, fai clic su Modifica Workload Identity.
  2. Nella finestra di dialogo Modifica Workload Identity, seleziona la casella di controllo Abilita Workload Identity.
  3. Fai clic su Salva modifiche.

Concedi le autorizzazioni per registrare un cluster in un progetto diverso

La registrazione di un cluster GKE nel parco risorse all'interno del proprio progetto non richiede autorizzazioni speciali oltre a quelle descritte in Concedere autorizzazioni di accesso. Tuttavia, se vuoi registrare un cluster GKE dal relativo progetto (GKE_PROJECT) a un parco risorse in un progetto diverso (FLEET_HOST_PROJECT), l'account agente di servizio gcp-sa-gkehub di FLEET_HOST_PROJECT deve disporre del ruolo gkehub.serviceAgent nel progetto GKE_PROJECT. Questo ruolo concede all'account di servizio le autorizzazioni per gestire le risorse del cluster nel progetto.

Puoi verificare se l'account di servizio del progetto host del parco risorse gcp-sa-gkehub ha il ruolo richiesto nel progetto del cluster utilizzando gcloud CLI o la console Google Cloud, come segue.

gcloud

Esegui questo comando:

gcloud projects get-iam-policy GKE_PROJECT_ID | grep gcp-sa-gkehub

dove GKE_PROJECT_ID è l'ID del progetto del cluster.

Se il progetto host del parco risorse gcp-sa-gkehub dispone dei ruoli richiesti nel progetto del cluster, deve essere visualizzato nell'output come service-[FLEET_HOST-PROJECT-NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com. Ad esempio:

- members:
  - serviceAccount:service-1234567890@gcp-sa-gkehub.iam.gserviceaccount.com
  role: roles/gkehub.serviceAgent

Console

  1. Dopo aver selezionato il progetto del cluster, vai alla sezione IAM e pagina Amministrazione nella console Google Cloud.

    Vai alla pagina IAM e amministrazione

  2. Seleziona la casella di controllo Includi concessioni di ruoli fornite da Google per visualizzare le norme di autorizzazione complete, inclusi gli agenti di servizio.

Se l'account di servizio del progetto host del parco risorse gcp-sa-gkehub ha i ruoli richiesti nel progetto del cluster, dovrebbe essere visualizzato in questo elenco come service-[FLEET_HOST-PROJECT-NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com.

Se non vedi l'agente di servizio elencato nel criterio di autorizzazione IAM del progetto, aggiorna le autorizzazioni necessarie in questo modo:

gcloud

  1. Per concedere a gcp-sa-gkehub il ruolo gkehub.serviceAgent, assicurati innanzitutto che questo account di servizio esista nel progetto host del parco risorse. Se hai cluster registrati in questo progetto del parco risorse, questo account di servizio dovrebbe già esistere. Puoi controllare esaminando il criterio di autorizzazione IAM per il progetto host del parco risorse:

    gcloud projects get-iam-policy FLEET_HOST_PROJECT_ID | grep gcp-sa-gkehub
    
  2. Se devi creare l'account di servizio gcp-sa-gkehub, esegui questo comando:

    gcloud beta services identity create --service=gkehub.googleapis.com --project=FLEET_HOST_PROJECT_ID
    

    Questo comando dovrebbe restituire quanto segue:

    Service identity created: service-[FLEET_HOST_PROJECT_NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com
    
  3. Esegui il seguente comando per concedere all'account di servizio il ruolo roles/gkehub.serviceAgent in entrambi i progetti e roles/gkehub.crossProjectServiceAgent nel progetto del cluster:

    GKE_PROJECT_ID=GKE_PROJECT_ID
    FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
    FLEET_HOST_PROJECT_NUMBER=$(gcloud projects describe "${FLEET_HOST_PROJECT_ID}" --format "value(projectNumber)")
    gcloud projects add-iam-policy-binding "${FLEET_HOST_PROJECT_ID}" \
      --member "serviceAccount:service-${FLEET_HOST_PROJECT_NUMBER}@gcp-sa-gkehub.iam.gserviceaccount.com" \
      --role roles/gkehub.serviceAgent
    gcloud projects add-iam-policy-binding "${GKE_PROJECT_ID}" \
      --member "serviceAccount:service-${FLEET_HOST_PROJECT_NUMBER}@gcp-sa-gkehub.iam.gserviceaccount.com" \
      --role roles/gkehub.serviceAgent
    gcloud projects add-iam-policy-binding "${GKE_PROJECT_ID}" \
      --member "serviceAccount:service-${FLEET_HOST_PROJECT_NUMBER}@gcp-sa-gkehub.iam.gserviceaccount.com" \
      --role roles/gkehub.crossProjectServiceAgent
    

    dove:

    • GKE_PROJECT_ID è l'ID del progetto Google Cloud del cluster GKE.
    • FLEET_HOST_PROJECT_ID è l'ID progetto Google Cloud in cui vuoi registrare i cluster. Scopri come trovare questo valore.
  4. Per confermare che l'associazione dei ruoli è stata concessa, esegui di nuovo il comando seguente:

    gcloud projects get-iam-policy GKE_PROJECT_ID
    

    Se vedi il nome dell'account di servizio insieme ai ruoli gkehub.serviceAgent e gkehub.crossProjectServiceAgent, sono state concesse le associazioni di ruolo. Ad esempio:

    - members:
      - serviceAccount:service-[FLEET_HOST_PROJECT_NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com
      role: roles/gkehub.serviceAgent
    - members:
      - serviceAccount:service-[FLEET_HOST_PROJECT_NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com
      role: roles/gkehub.crossProjectServiceAgent
    

Configura un account di servizio per Terraform

Se vuoi utilizzare Terraform per registrare un cluster Google Kubernetes Engine, devi creare un account di servizio che Terraform possa utilizzare per accedere all'API Fleet al fine di creare un abbonamento.

gcloud

  1. Crea un account di servizio come segue:

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME --project=FLEET_HOST_PROJECT_ID
    
  2. Associa il ruolo IAM gkehub.admin all'account di servizio in modo che Terraform possa utilizzarlo con l'API Fleet:

    FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
    gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \
       --member="serviceAccount:SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \
       --role="roles/gkehub.admin"
    

    Se vuoi creare un nuovo cluster con Terraform e poi registrarlo, devi anche associare il ruolo roles/container.admin all'account di servizio in modo che Terraform può utilizzare questo account di servizio per accedere all'API GKE e creare un cluster.

    FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
    gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \
       --member="serviceAccount:SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \
       --role="roles/container.admin"
    

    Sostituisci quanto segue:

    • FLEET_HOST_PROJECT_ID è l'ID progetto Google Cloud in cui vuoi registrare i cluster. Scopri come trovare questo valore.
    • SERVICE_ACCOUNT_NAME è il nome visualizzato che scegli l'[account di servizio].
  3. Scarica il file JSON della chiave privata dell'account di servizio, come descritto in Creare un account di servizio Google Cloud utilizzando gcloud. Questo file è necessario per creare e registrare i cluster utilizzando Terraform.

Configura un account di servizio per Config Connector

Se vuoi utilizzare Config Connector per registrare un cluster GKE, segui questi passaggi:

gcloud

  1. Assicurati di aver installato il componente aggiuntivo Config Connector. Devi avere una versione di Config Connector successiva alla 1.47.0.

  2. Segui le istruzioni di Config Connector per creare un account di servizio.

  3. Associa il ruolo IAM gkehub.admin a questo account di servizio in modo che Config Connector possa utilizzarlo per accedere all'API Fleet:

    FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
    gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \
       --member="serviceAccount:SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \
       --role="roles/gkehub.admin"
    

    Se vuoi creare un nuovo cluster con Config Connector e poi registrarlo, devi anche associare il ruolo roles/container.admin all'account di servizio, in modo che il controller Config Connector possa utilizzare questo account di servizio per accedere all'API GKE e creare un cluster.

    FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
    gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \
       --member="serviceAccount:SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \
       --role="roles/container.admin"
    

    Sostituisci quanto segue:

    • FLEET_HOST_PROJECT_ID è l'ID progetto Google Cloud in cui vuoi registrare i cluster. Scopri come trovare questo valore.
    • SERVICE_ACCOUNT_NAME è il nome visualizzato che scegli per il [Service Account].
  4. Segui le istruzioni per Config Connector per configurare Config Connector con questo account di servizio.

Passaggi successivi

Segui le istruzioni per registrare un cluster.