Questo argomento spiega come abilitare Workload Identity per Apigee hybrid su GKE.
Se utilizzi Apigee hybrid AKS o EKS, segui le istruzioni in Abilitare la federazione delle identità per i carichi di lavoro su AKS ed EKS.
Panoramica
Workload Identity è un modo per consentire alle applicazioni in esecuzione all'interno di GKE (Google Kubernetes Engine) di per accedere ai servizi Google Cloud. Per una panoramica di Workload Identity, vedi:
- Ti presentiamo Workload Identity: una migliore autenticazione per le tue applicazioni GKE
- Utilizzare Workload Identity
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 ulteriori informazioni sulle sessioni di autenticazione, consulta Account di servizio.
A parte, Kubernetes ha anche il concetto di account di servizio. Un account di servizio fornisce 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 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 la prima volta installare 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:
PROJECT_ID
: l'ID del tuo progetto Google Cloud.ORG_NAME
: il nome della tua organizzazione Apigee.ENV_NAME
: nome dell'ambiente Apigee.NAMESPACE
: il tuo namespace 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=$PROJECT_ID
export ENV_NAME=my-environment-name
export NAMESPACE=apigee
export CLUSTER_LOCATION=my-cluster-location
export CLUSTER_NAME=my-cluster-name
File delle chiavi di Workload Identity e dell'account di servizio
Quando si esegue Apigee hybrid su GKE, la prassi standard è creare e scaricare
(.json
file) 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 degli account di servizio nell'ambito dell'installazione ibrida di Apigee, puoi eliminarli dopo aver abilitato Workload Identity. Nella maggior parte delle installazioni, risiedono nel per il carattere di ogni componente.
Abilita Workload Identity per Apigee ibrido
Segui queste istruzioni per configurare Workload Identity per il tuo progetto.
Preparati a configurare Workload Identity
- Verifica che Workload Identity sia abilitato nel file delle sostituzioni. Dovrebbe essere attivato
il file di override e dovresti avere valori per le seguenti proprietà di configurazione:
- Per tutte le installazioni:
gcp.workloadIdentity.enabled
dovrebbe esseretrue
. Ad esempio:gcp: workloadIdentity: enabled: true
- Per le installazioni di produzione:
- Per le installazioni non di produzione, fornisci l'indirizzo del server delle applicazioni non di produzione (con tutte le informazioni necessarie
ruoli IAM) nel
gcp.workloadIdentity.gsa
proprietà.
- Per tutte le installazioni:
- Verifica che la configurazione
gcloud
corrente sia impostata sull'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 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 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 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 comandi seguenti. Questa operazione può possono richiedere fino a 30 minuti per ciascun 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 dei casi, di Compute Engine, i due pool di nodi predefiniti sono denominati
apigee-data
eapigee-runtime
. - 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 avere il seguente aspetto:
--- diskSizeGb: 100 diskType: pd-standard ... workloadMetadataConfig: mode: GKE_METADATA
Se necessario, imposta la configurazione attuale di gcloud
:
gcloud config set project $PROJECT_ID
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
Contrassegni --dry-run
o --dry-run=server
per apigee-datastore
, apigee-env
,
apigee-org
e apigee-telemetry
, l'output includerà
devi configurare Workload Identity con i nomi corretti per l'Arabia Saudita.
Ad esempio:
helm upgrade datastore apigee-datastore/ \ --namespace $NAMESPACE \ -f overrides.yaml \ --dry-run=server
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 my-gsa@my-project-id.iam.gserviceaccount.com \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:my-project-id.svc.id.goog[apigee/apigee-cassandra-default]" \ --project my-project-id kubectl annotate serviceaccount apigee-cassandra-default \ iam.gke.io/gcp-service-account=my-gsa@my-project-id.iam.gserviceaccount.com \ --namespace apigee
- Recupera il comando per configurare Workload Identity per
apigee-datastore
ed esegui i comandi inNOTES:
nell'output.helm upgrade datastore apigee-datastore/ \ --namespace $NAMESPACE \ -f overrides.yaml \ --dry-run=server
- Ottieni i comandi per configurare Workload Identity per
apigee-telemetry
ed esegui quelli inNOTES:
nell'output.helm upgrade telemetry apigee-telemetry/ \ --namespace $NAMESPACE \ -f overrides.yaml \ --dry-run
- Ottieni i comandi per configurare Workload Identity per
apigee-org
ed esegui quelli inNOTES:
nell'output.helm upgrade $ORG_NAME apigee-org/ \ --namespace $NAMESPACE \ -f overrides.yaml \ --dry-run
- Ottieni i comandi per configurare Workload Identity per
apigee-env
ed esegui quelli 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 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 chiavi private dell'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 account di servizio Kubernetes nella pagina Kubernetes: Panoramica dei carichi di lavoro della console Google Cloud.