Attivazione di Workload Identity su GKE

Questo argomento spiega come attivare Workload Identity per Apigee hybrid su GKE.

Se utilizzi Apigee hybrid AKS o EKS, segui le istruzioni riportate in Attivare la federazione delle identità per i carichi di lavoro su AKS ed EKS.

Panoramica

Workload Identity consente alle applicazioni in esecuzione in GKE (Google Kubernetes Engine) di accedere ai servizi Google Cloud. Per panoramiche di Workload Identity, consulta:

Un account di servizio IAM di Google Cloud è un'identità che un'applicazione può utilizzare per inviare richieste alle API Google. Nel documento, questi account di servizio sono indicati come GSA (Google Service Account). Per saperne di più sui gruppi di account di servizio, consulta Account di servizio.

A parte, Kubernetes ha anche il concetto di account di servizio. Un account di servizio fornisce un'identità per i processi in esecuzione in un pod. Gli account di servizio Kubernetes sono risorse Kubernetes, mentre gli account di servizio Google sono specifici di Google Cloud. Per informazioni sugli account di servizio Kubernetes, consulta Configurare gli account di servizio per i pod nella documentazione di Kubernetes.

Apigee crea e utilizza un account di servizio Kubernetes per ogni tipo di componente quando installi per la prima volta i grafici Helm per questi componenti. L'attivazione di Workload Identity consente ai componenti hybrid di interagire con gli account di servizio Kubernetes.

Variabili di ambiente utilizzate in queste procedure

Queste procedure utilizzano le seguenti variabili di ambiente. Impostali nella shell dei comandi o sostituiscili negli esempi di codice con i valori effettivi:

  • CLUSTER_LOCATION: la regione o la zona del cluster Kubernetes, ad esempio: us-west1.
  • CLUSTER_NAME: il nome del cluster.
  • ENV_NAME: il nome dell'ambiente Apigee.
  • ORG_NAME: il nome della tua organizzazione Apigee.
  • PROJECT_ID: l'ID del tuo progetto Google Cloud.
  • NAMESPACE: il tuo spazio dei nomi Apigee (di solito "apigee").

Verifica le variabili di ambiente:

echo $PROJECT_ID
echo $ORG_NAME
echo $ENV_NAME
echo $NAMESPACE
echo $CLUSTER_LOCATION
echo $CLUSTER_NAME
CLUSTER_NAME

Inizializza le variabili necessarie:

export PROJECT_ID=my-project-id
export ORG_NAME=$PROJECT_ID
export ENV_NAME=my-environment-name
export NAMESPACE=apigee
export CLUSTER_LOCATION=my-cluster-location
export CLUSTER_NAME=hybrid-base-directory/apigeectl

File delle chiavi di Workload Identity e dell'account di servizio

Quando esegui Apigee Hybrid su GKE, la prassi standard è creare e scaricare le chiavi private (file .json) per ciascuno degli account di servizio. Quando utilizzi Workload Identity, non devi scaricare le chiavi private dell'account di servizio e aggiungerle ai cluster GKE.

Se hai scaricato i file delle chiavi dell'account di servizio nell'ambito dell'installazione di Apigee hybrid, puoi eliminarli dopo aver attivato Workload Identity. Nella maggior parte delle installazioni, si trovano nella directory per il carattere di ogni componente.

Attivare Workload Identity per Apigee hybrid

Segui queste istruzioni per configurare Workload Identity per il tuo progetto.

Installazione di cui è stata eseguita la migrazione e Workload Identity

Se hai eseguito la migrazione del cluster dalla gestione apigeectl con lo strumento di migrazione Helm di Apigee hybrid, la sintassi delle sostituzioni per Workload Identity sarà cambiata. Dovrai controllare le seguenti proprietà nel file delle sostituzioni:

  • namespace è obbligatorio. Ad esempio:
    instanceID: "hybrid-instance-1"
    namespace: "apigee"
    
  • La proprietà gcp.workloadIdentity.enabled sostituisce la proprietà gcp.workloadIdentityEnabled. Ad esempio:
    gcp:
      workloadIdentity:
        enabled: true
  • Per le installazioni di produzione, ogni componente ha una proprietà gsa. Il valore di queste proprietà è l'indirizzo email dell'account di servizio Google IAM per il componente corrispondente. Ad esempio:
    watcher
      gsa: apigee-watcher@my-hybrid-project.iam.gserviceaccount.com
    
  • Per le installazioni non di produzione, puoi fornire un singolo GSA nella proprietà gcp.workloadIdentity.gsa.
    gcp
      workloadIdentity
        gsa: apigee-watcher@my-hybrid-project.iam.gserviceaccount.com
    
  • Con i grafici Helm per Apigee hybrid, puoi combinare GSA di produzione e non di produzione per Workload Identity. Puoi specificare un singolo GSA per la proprietà gcp.workloadIdentity.gsa e specificare singoli GSA per componenti specifici. I valori specificati per i singoli componenti sostituiranno il valore specificato per gcp.workloadIdentity.gsa solo per quel componente.

Preparativi per la configurazione di Workload Identity

  1. Verifica che Workload Identity sia abilitato nel file delle sostituzioni. Deve essere attivato nel file delle sostituzioni e devi avere valori per le proprietà di configurazione seguenti:
  2. Verifica che la configurazione gcloud corrente sia impostata sull'ID progetto Google Cloud con il seguente comando:
    gcloud config get project
  3. Se necessario, imposta la configurazione attuale di gcloud:

    gcloud config set project $PROJECT_ID
  4. Verifica che Workload Identity sia abilitato per il tuo cluster GKE. Quando hai creato il cluster nel passaggio 1: crea un cluster, il passaggio 6 era Abilita Workload Identity. Puoi verificare se Workload Identity è abilitato eseguendo il seguente comando:

    Cluster a livello di regione

    gcloud container clusters describe $CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten 'workloadIdentityConfig'

    Cluster zonali

    gcloud container clusters describe $CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten 'workloadIdentityConfig'

    L'output dovrebbe avere l'aspetto seguente:

      ---
    workloadPool: PROJECT_ID.svc.id.goog

    Se nei risultati viene visualizzato null, esegui il seguente comando per abilitare Workload Identity per il cluster:

    Cluster a livello di regione

    gcloud container clusters update $CLUSTER_NAME \
      --workload-pool=$PROJECT_ID.svc.id.goog \
      --project $PROJECT_ID \
      --region $CLUSTER_LOCATION

    Cluster zonali

    gcloud container clusters update  $CLUSTER_NAME \
      --workload-pool=$PROJECT_ID.svc.id.goog \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID
  5. Abilita Workload Identity per ogni pool di nodi con i seguenti comandi. Questa operazione può richiedere fino a 30 minuti per ogni nodo:

    Cluster a livello di regione

    gcloud container node-pools update NODE_POOL_NAME \
      -cluster=$CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --workload-metadata=GKE_METADATA

    Cluster zonali

    gcloud container node-pools update NODE_POOL_NAME \
      --cluster=$CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --workload-metadata=GKE_METADATA

    dove NODE_POOL_NAME è il nome di ogni pool di nodi. Nella maggior parte delle installazioni di Apigee hybrid, i due pool di nodi predefiniti sono denominati apigee-data e apigee-runtime.

  6. Verifica che Workload Identity sia abilitato nei pool di nodi con i seguenti comandi:

    Cluster a livello di regione

    gcloud container node-pools describe apigee-data \
      --cluster $CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"
    gcloud container node-pools describe apigee-runtime \
      --cluster $CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"

    Cluster zonali

    gcloud container node-pools describe apigee-data \
      --cluster $CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"
    gcloud container node-pools describe apigee-runtime \
      --cluster $CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"

    L'output dovrebbe avere il seguente aspetto:

    ---
    diskSizeGb: 100
    diskType: pd-standard
    ...
    workloadMetadataConfig:
    mode: GKE_METADATA
      

Configurazione di Workload Identity

Utilizza la procedura seguente per abilitare Workload Identity per i seguenti componenti di Apigee Hybrid:

  • apigee-telemetry
  • apigee-org
  • apigee-env

Quando esegui helm upgrade con il flag --dry-run per i grafici apigee-datastore, apigee-env,apigee-org e apigee-telemetry, l'output includerà i comandi necessari per configurare Workload Identity con i nomi GSA e KSA corretti.

Ad esempio:

helm upgrade datastore apigee-datastore/ \
  --namespace $NAMESPACE \
  -f overrides.yaml \
  --dry-run
NAME: datastore
...
For C* backup GKE Workload Identity, please make sure to add the below membership to the IAM policy binding using the respective kubernetes SA (KSA).
gcloud iam service-accounts add-iam-policy-binding  \
      --role roles/iam.workloadIdentityUser \
      --member "serviceAccount:my-project.svc.id.goog[apigee/apigee-cassandra-backup-sa]" \
      --project :my-project
  1. Recupera il comando per configurare Workload Identity per apigee-datastore ed esegui il comando in NOTES: nell'output.
    helm upgrade datastore apigee-datastore/ \
      --namespace $NAMESPACE \
      -f overrides.yaml \
      --dry-run
  2. Recupera i comandi per configurare Workload Identity per apigee-telemetry ed esegui il comando in NOTES: nell'output.
    helm upgrade telemetry apigee-telemetry/ \
      --namespace $NAMESPACE \
      -f overrides.yaml \
      --dry-run
  3. Recupera i comandi per configurare Workload Identity per apigee-org ed esegui il comando in NOTES: nell'output.
    helm upgrade $ORG_NAME apigee-org/ \
      --namespace $NAMESPACE \
      -f overrides.yaml \
      --dry-run
  4. Recupera i comandi per configurare Workload Identity per apigee-env ed esegui il comando in NOTES: nell'output.
    helm upgrade $ENV_NAME apigee-env/ \
      --namespace $NAMESPACE \
      --set env=ENV_NAME \
      -f overrides.yaml \
      --dry-run

    Ripeti questo passaggio per ogni ambiente dell'installazione.

Verificare Workload Identity

  1. Verifica se i passaggi hanno funzionato:
    gcloud config set project $PROJECT_ID
    
    kubectl run --rm -it --image google/cloud-sdk:slim \
      --namespace $NAMESPACE workload-identity-test\
      -- gcloud auth list

    Se non vedi un prompt dei comandi, prova a premere Invio.

    Se i passaggi sono stati eseguiti correttamente, dovresti visualizzare una risposta simile alla seguente:

                       Credentialed Accounts
    ACTIVE  ACCOUNT
    *       GSA@PROJECT_ID.iam.gserviceaccount.com
  2. Se esegui l'upgrade da un'installazione precedente, ripulisci i secret che contenevano le chiavi private dell'account di servizio:
    kubectl delete secrets -n $NAMESPACE $(k get secrets -n $NAMESPACE | grep svc-account | awk '{print $1}')
    
  3. Controlla i log:
    kubectl logs -n $NAMESPACE -l app=apigee=synchronizer,env=$ENV_NAME,org=$ORG_NAME apigee-synchronizer
    
  4. (Facoltativo) Puoi visualizzare lo stato dei tuoi account di servizio Kubernetes nella pagina Kubernetes: Panoramica dei carichi di lavoro nella Google Cloud Console.

    Vai a Carichi di lavoro