Prerequisiti per i cluster GKE su Google Cloud

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

Abilita federazione di Workload Identity per GKE

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

Per utilizzare questa funzionalità, devi assicurarti che l'opzione Federazione delle identità 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 aver abilitato la federazione delle identità per i carichi di lavoro per GKE nel cluster può causare incongruenze nella modalità di asserzione 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 nel cluster è abilitata la federazione delle identità per i carichi di lavoro per GKE, esegui questo comando per elencare il pool di identità per i carichi di lavoro del cluster. Se non hai ancora specificato una zona o una regione predefinita per gcloud, devi specificare un flag --region o --zone quando esegui questo comando.

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

Sostituisci quanto segue:

  • CLUSTER_NAME: name del cluster GKE.

Se vedi un risultato simile al seguente, la federazione di Workload Identity per GKE è già abilitata sul tuo cluster:

GKE_PROJECT_ID.svc.id.goog

Se non viene restituito alcun risultato, la federazione di Workload Identity per GKE non è abilitata. Segui le istruzioni in Abilitazione della federazione di Workload Identity per GKE.

Console

Per verificare se nel cluster è abilitata la federazione di Workload Identity 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 sezione Sicurezza della pagina dei dettagli del cluster, verifica che Workload Identity sia elencato come Enabled (Abilitata).

Se Workload Identity è Disattivato e vuoi abilitare 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 la registrazione di un cluster in un progetto diverso

La registrazione di un cluster GKE nel parco risorse nel proprio progetto non richiede autorizzazioni speciali oltre a quelle descritte in Concedere le autorizzazioni di accesso. Tuttavia, se vuoi registrare un cluster GKE dal proprio progetto (GKE_PROJECT) a un parco risorse in un progetto diverso (FLEET_HOST_PROJECT), l'account agente di servizio gcp-sa-gkehub FLEET_HOST_PROJECT deve avere il gkehub.serviceAgent ruolo nel progetto GKE_PROJECT. Questo ruolo concede all'account di servizio le autorizzazioni per gestire le risorse del cluster in quel 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, questo dovrebbe apparire nell'output nel formato 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. Con il progetto del cluster selezionato, vai alla pagina IAM e amministrazione nella console Google Cloud.

    Vai alla pagina IAM e amministrazione

  2. Seleziona la casella di controllo Includi concessioni dei ruoli fornite da Google per visualizzare il criterio completo, inclusi gli agenti di servizio.

Se l'account di servizio del progetto host del parco risorse gcp-sa-gkehub dispone dei ruoli richiesti nel progetto del cluster, questo dovrebbe apparire in questo elenco nel formato service-[FLEET_HOST-PROJECT-NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com.

Se l'agente di servizio non è elencato nel criterio IAM del progetto, aggiorna le autorizzazioni necessarie:

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 già registrato cluster in questo progetto del parco risorse, questo account di servizio dovrebbe già esistere. Puoi verificarlo esaminando il criterio 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 questo comando per concedere all'account di servizio il ruolo roles/gkehub.serviceAgent sia nei progetti sia in 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 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 del ruolo sia 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 al ruolo gkehub.serviceAgent e gkehub.crossProjectServiceAgent, le associazioni di ruoli sono state concesse. 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 e 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 associare anche il ruolo roles/container.admin all'account di servizio in modo che Terraform possa usare 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 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 cluster utilizzando Terraform.

Configura un account di servizio per Config Connector

Se vuoi utilizzare Config Connector per registrare un cluster GKE:

gcloud

  1. Assicurati di aver installato il componente aggiuntivo Config Connector. Dovresti avere una versione di Config Connector superiore 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 associare anche il ruolo roles/container.admin all'account di servizio in modo che il controller Config Connector possa utilizzarlo 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 l'account di servizio.
  4. Segui l'istruzione di Config Connector per configurare Config Connector con questo account di servizio.

Che cosa succede dopo?

Segui le istruzioni per registrare un cluster.