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:
- Introduzione di Workload Identity: migliore autenticazione per le applicazioni GKE
- Utilizzo di Workload Identity
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 saperne di più 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:
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_IDecho $ORG_NAMEecho $ENV_NAMEecho $NAMESPACEecho $CLUSTER_LOCATIONecho $CLUSTER_NAMECLUSTER_NAME
Inizializza le variabili che ti servono:
export PROJECT_ID=my-project-idexport ORG_NAME=$PROJECT_IDexport ENV_NAME=my-environment-nameexport NAMESPACE=apigeeexport CLUSTER_LOCATION=my-cluster-locationexport CLUSTER_NAME=hybrid-base-directory/apigeectl
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.
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 di override per Workload Identity sarà cambiata. Devi controllare le seguenti proprietà nel file di override:
namespaceè obbligatorio. Ad esempio:instanceID: "hybrid-instance-1" namespace: "apigee"
- La proprietà
gcp.workloadIdentity.enabledsostituisce 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 del 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, combina gli account di servizio Google di produzione e non di produzione per Workload Identity. Puoi specificare un singolo valore per la proprietà
gcp.workloadIdentity.gsae specificare GSA individuali per componenti specifici. I valori che fornisci per i singoli componenti sostituiranno il valore che fornisci pergcp.workloadIdentity.gsasolo per quel componente.
Prepararsi a configurare Workload Identity
- 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:
- Per tutte le installazioni:
gcp.workloadIdentity.enableddeve esseretrue. Ad esempio:gcp: workloadIdentity: enabled: true - Per le installazioni di produzione:
- Per le installazioni non di produzione, fornisci l'indirizzo del service agent GSA non di produzione (con tutti i ruoli IAM necessari) nella proprietà
gcp.workloadIdentity.gsa.
- Per tutte le installazioni:
- Verifica che la configurazione
gcloudcorrente sia impostata sul tuo ID progetto Google Cloud con il seguente comando:gcloud config get project
- 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 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 questo 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
-
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-dataeapigee-runtime. - 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 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
Se necessario, imposta la configurazione gcloud attuale:
gcloud config set project $PROJECT_ID
Configurazione di Workload Identity
Utilizza la seguente procedura per abilitare Workload Identity per i seguenti componenti ibridi:
apigee-telemetryapigee-orgapigee-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
- Recupera il comando per configurare Workload Identity per
apigee-datastoreed eseguilo inNOTES:nell'output.helm upgrade datastore apigee-datastore/ \ --namespace $NAMESPACE \ -f overrides.yaml \ --dry-run
- Recupera i comandi per configurare Workload Identity per
apigee-telemetryed esegui il comando inNOTES:nell'output.helm upgrade telemetry apigee-telemetry/ \ --namespace $NAMESPACE \ -f overrides.yaml \ --dry-run
- Recupera i comandi per configurare Workload Identity per
apigee-orged esegui il comando inNOTES:nell'output.helm upgrade $ORG_NAME apigee-org/ \ --namespace $NAMESPACE \ -f overrides.yaml \ --dry-run
- Recupera i comandi per configurare Workload Identity per
apigee-enved esegui il comando inNOTES: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.
Verifica di Workload Identity
- 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 - 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}') - Controlla i log:
kubectl logs -n $NAMESPACE -l app=apigee=synchronizer,env=$ENV_NAME,org=$ORG_NAME apigee-synchronizer
- (Facoltativo) Puoi visualizzare lo stato dei tuoi service account Kubernetes nella pagina Kubernetes: Panoramica dei workload in Google Cloud console.