Questo argomento spiega come attivare Workload Identity Federation for GKE per Apigee hybrid.
Se utilizzi Apigee hybrid AKS o EKS, segui le istruzioni riportate in Attivazione di Workload Identity Federation su AKS ed EKS.
Panoramica
Workload Identity Federation for GKE è un modo per le applicazioni in esecuzione in GKE (Google Kubernetes Engine) di accedere ai servizi Google Cloud . Per le panoramiche di Workload Identity Federation for GKE, consulta:
- Informazioni su Workload Identity Federation for GKE
- Autenticarsi nelle API Google Cloud dai carichi di lavoro GKE
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 Federation for GKE 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 solitoapigee
).CLUSTER_LOCATION
: la regione o la zona del cluster Kubernetes, ad esempious-west1
.CLUSTER_NAME
: il nome del cluster.
Verifica le variabili di ambiente:
echo $PROJECT_IDecho $ORG_NAME
echo $ENV_NAME
echo $NAMESPACE
echo $CLUSTER_LOCATION
echo $CLUSTER_NAME
Inizializza le variabili necessarie:
export PROJECT_ID=MY_PROJECT_IDexport 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 Federation for GKE e file di chiavi dell'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 Federation for GKE,
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 Federation for GKE. Nella maggior parte delle installazioni, si trovano nella directory del grafico di ogni componente.
Abilita la federazione delle identità per i carichi di lavoro per GKE per Apigee hybrid
Segui queste istruzioni per configurare il progetto in modo da utilizzare Workload Identity Federation for GKE.
Preparati a configurare Workload Identity Federation for GKE
- Verifica che Workload Identity Federation for GKE 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.enabled
deve esseretrue
. Ad esempio:gcp: workloadIdentity: enabled: true
- Per le installazioni di produzione:
connectAgent.gsa
envs.gsa.runtime
envs.gsa.synchronizer
envs.gsa.udca
logger.gsa
mart.gsa
metrics.gsa
mintTaskscheduler.gsa
(se utilizzi Monetizzazione per Apigee hybrid sulla v1.15.1 e versioni successive)udca.gsa
watcher.gsa
- 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
gcloud
corrente sia impostata sul tuo ID progetto Google Cloud con il seguente comando:gcloud config get project
- Verifica che Workload Identity Federation for GKE sia abilitata per il tuo cluster GKE. Quando hai creato il cluster
nel passaggio 1: crea un cluster, il passaggio 6 consisteva nell'abilitare
la federazione delle identità per i carichi di lavoro per GKE. Verifica che la federazione delle identità per i carichi di lavoro per GKE sia abilitata con 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 viene visualizzato
null
, esegui il seguente comando per abilitare la federazione delle identità per i carichi di lavoro per GKE per il tuo 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 la federazione delle identità per i carichi di lavoro per GKE 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
eapigee-runtime
. - Verifica che la federazione delle identità per i carichi di lavoro per GKE sia abilitata nei 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
Se necessario, imposta la configurazione gcloud
attuale:
gcloud config set project $PROJECT_ID
Configura l'installazione in modo che utilizzi Workload Identity Federation for GKE
Utilizza la seguente procedura per abilitare la federazione delle identità per i carichi di lavoro per GKE 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 Federation for GKE con i nomi corretti di GSA e KSA.
Ad esempio:
helm upgrade datastore apigee-datastore/ \ --namespace $NAMESPACE \ -f OVERRIDES_FILE \ --dry-run=server
L'output sarà simile al seguente:
NAME: datastore ... For Cassandra backup, please make sure to add the following 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 del account di servizio Google (GSA) per Cassandra. Consulta Informazioni sui service account.PROJECT_ID
viene sostituito con l'ID del tuo 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 graficoapigee-datastore
.
- Recupera il comando per configurare Workload Identity Federation for GKE per
apigee-datastore
ed esegui i comandi inNOTES:
nell'output.helm upgrade datastore apigee-datastore/ \ --namespace $NAMESPACE \ -f OVERRIDES_FILE \ --dry-run=server
- Recupera i comandi per configurare la federazione delle identità per i carichi di lavoro per GKE per
apigee-telemetry
ed esegui i comandi inNOTES:
nell'output.helm upgrade telemetry apigee-telemetry/ \ --namespace $NAMESPACE \ -f OVERRIDES_FILE \ --dry-run
- Recupera i comandi per configurare la federazione delle identità per i carichi di lavoro per GKE per
apigee-org
ed esegui i comandi inNOTES:
nell'output.helm upgrade $ORG_NAME apigee-org/ \ --namespace $NAMESPACE \ -f OVERRIDES_FILE \ --dry-run
- Recupera i comandi per configurare la federazione delle identità per i carichi di lavoro per GKE per
apigee-env
ed esegui i comandi inNOTES:
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 di Workload Identity Federation per GKE
- 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 carichi di lavoro in Google Cloud console.