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 Attivazione di Workload Identity Federation su AKS ed EKS.

Panoramica

Workload Identity è un modo per le applicazioni in esecuzione in GKE (Google Kubernetes Engine) di accedere ai servizi Google Cloud. Per le panoramiche di Workload Identity, consulta:

Un account di servizio Google Cloud IAM è un'identità che un'applicazione può utilizzare per effettuare richieste alle API di Google. Questi service account sono denominati GSA (Google Service Accounts) nel documento. Per ulteriori informazioni sui service account, consulta Service account.

Kubernetes ha anche il concetto di service account. Un account di servizio fornisce un'identità per i processi eseguiti in un pod. Gli account di servizio Kubernetes sono risorse Kubernetes, mentre gli account di servizio Google sono specifici di Google Cloud. Per informazioni sui service account Kubernetes, consulta Configurare i service account 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 ibridi di interagire con i service account Kubernetes.

Variabili di ambiente utilizzate in queste procedure

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

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

Verifica le variabili di ambiente:

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

Inizializza le variabili necessarie:

export PROJECT_ID=MY_PROJECT_ID
export ORG_NAME=MY_ORG_NAME
export ENV_NAME=MY_ENV_NAME
export NAMESPACE=APIGEE_NAMESPACE
export CLUSTER_LOCATION=MY_CLUSTER_LOCATION
export CLUSTER_NAME=MY_CLUSTER_NAME

Workload Identity e file delle chiavi del account di servizio

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

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

Abilita Workload Identity per Apigee hybrid

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

Prepararsi a configurare Workload Identity

  1. Verifica che Workload Identity sia abilitato nel file di override. Deve essere abilitato nel file di override e devi avere valori per le seguenti proprietà di configurazione:
  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 gcloud attuale:

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

    Cluster a livello di regione

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

    Cluster di zona

    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 visualizzi 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 di zona

    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 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 di zona

    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 sui tuoi 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 di zona

    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 essere simile a questo:

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

Configurazione di Workload Identity

Utilizza la seguente procedura per abilitare Workload Identity per i seguenti componenti ibridi:

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

Quando esegui helm upgrade con i flag --dry-run o --dry-run=server 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_FILE \
  --dry-run=server

Verrà visualizzato un output simile al seguente:

NAME: datastore
...
For Cassandra 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 apigee-cassandra@PROJECT_ID.iam.gserviceaccount.com \
      --role roles/iam.workloadIdentityUser \
      --member "serviceAccount:PROJECT_ID.svc.id.goog[APIGEE_NAMESPACE/apigee-cassandra-default]" \
      --project PROJECT_ID

kubectl annotate serviceaccount apigee-cassandra-default \
      iam.gke.io/gcp-service-account=apigee-cassandra@PROJECT_ID.iam.gserviceaccount.com \
      --namespace APIGEE_NAMESPACE

Dove:

  • apigee-cassandra è il nome dell'account di servizio Google (GSA) per Cassandra. Consulta Informazioni sui service account.
  • PROJECT_ID viene sostituito con l'ID progetto Google Cloud.
  • APIGEE_NAMESPACE viene sostituito con il tuo spazio dei nomi Apigee, apigee per impostazione predefinita.
  • apigee-cassandra-default è il nome dell'account di servizio Kubernetes per i pod Cassandra creati dal grafico apigee-datastore.
  1. Recupera il comando per configurare Workload Identity per apigee-datastore ed esegui i comandi in NOTES: nell'output.
    helm upgrade datastore apigee-datastore/ \
      --namespace $NAMESPACE \
      -f OVERRIDES_FILE \
      --dry-run=server
  2. Recupera i comandi per configurare Workload Identity per apigee-telemetry ed esegui i comandi in NOTES: nell'output.
    helm upgrade telemetry apigee-telemetry/ \
      --namespace $NAMESPACE \
      -f OVERRIDES_FILE \
      --dry-run
  3. Recupera i comandi per configurare Workload Identity per apigee-org ed esegui i comandi in NOTES: nell'output.
    helm upgrade $ORG_NAME apigee-org/ \
      --namespace $NAMESPACE \
      -f OVERRIDES_FILE \
      --dry-run
  4. Recupera i comandi per configurare Workload Identity per apigee-env ed esegui i comandi in NOTES: nell'output.
    helm upgrade $ENV_NAME apigee-env/ \
      --namespace $NAMESPACE \
      --set env=$ENV_NAME \
      -f OVERRIDES_FILE \
      --dry-run

    Ripeti questo passaggio per ogni ambiente dell'installazione.

Verifica 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, pulisci i secret che contenevano le chiavi private del 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 service account Kubernetes nella pagina Kubernetes: Panoramica dei carichi di lavoro in Google Cloud console.

    Vai a Carichi di lavoro