Questo argomento spiega come abilitare Workload Identity per Apigee hybrid utilizzando i grafici Helm.
Se utilizzi apigeectl
per installare e gestire Apigee hybrid, consulta
Abilitazione di Workload Identity con apigeectl
.
Panoramica
Workload Identity è un modo per consentire alle applicazioni eseguite all'interno di GKE (Google Kubernetes Engine) di accedere ai servizi Google Cloud. Per una panoramica di Workload Identity, vedi:
- Introduzione a Workload Identity: migliore autenticazione per le applicazioni GKE
- Utilizzo di Workload Identity
Un account di servizio IAM di Google Cloud è un'identità che un'applicazione può utilizzare per effettuare richieste alle API di Google. Questi account di servizio sono indicati come "GSA (account di servizio Google)" nel documento. Per saperne di più sulle risorse di ricerca, 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 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 quando installi per la prima volta i grafici Helm per quei componenti. L'abilitazione di Workload Identity consente ai componenti ibridi di interagire con gli account di servizio 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 tuo cluster Kubernetes, ad esempio:us-west1
.CLUSTER_NAME
: il nome del cluster.ENV_NAME
: assegna il nome dell'ambiente Apigee.ORG_NAME
: il nome della tua organizzazione Apigee.PROJECT_ID
: l'ID del tuo progetto Google Cloud.NAMESPACE
: lo spazio dei nomi Apigee (di solito "apigee").
Verifica le variabili di ambiente:
echo $PROJECT_IDecho $ORG_NAME
echo $ENV_NAME
echo $NAMESPACE
echo $CLUSTER_LOCATION
echo $CLUSTER_NAME
CLUSTER_NAME
Inizializza tutte 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=hybrid-base-directory/apigeectl
File delle chiavi di Workload Identity e dell'account di servizio
Durante l'esecuzione di Apigee hybrid su GKE, la pratica standard consiste nel creare e scaricare chiavi
private (.json
file) per ciascuno degli account di servizio. Quando utilizzi Workload Identity,
non è necessario scaricare le chiavi private degli account di servizio e aggiungerle ai cluster GKE.
Se hai scaricato i file delle chiavi dell'account di servizio durante l'installazione di Apigee ibrida, puoi eliminarli dopo aver abilitato Workload Identity. Nella maggior parte delle installazioni, queste si trovano nella directory del carattere di ciascun componente.
Abilita Workload Identity per Apigee hybrid
Segui queste istruzioni per configurare Workload Identity per il tuo progetto.
Installazione e Workload Identity migrati
Se hai eseguito la migrazione del cluster dalla gestione apigeectl
con lo strumento di migrazione di Helm ibrido Apigee, la sintassi degli 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.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 IAM di Google per il componente corrispondente. Ad esempio:watcher gsa: apigee-watcher@my-hybrid-project.iam.gserviceaccount.com
- Per le installazioni non di produzione, puoi fornire una singola istanza nella proprietà
gcp.workloadIdentity.gsa
.gcp workloadIdentity gsa: apigee-watcher@my-hybrid-project.iam.gserviceaccount.com
- Con i grafici Helm per Apigee hybrid, combina Google Search Console di produzione e non di produzione per Workload Identity. Puoi
specificare un singolo elemento per la
proprietà
gcp.workloadIdentity.gsa
e indicare singole risorse per componenti specifici. I valori specificati per i singoli componenti sostituiranno il valore fornito pergcp.workloadIdentity.gsa
solo per quel componente.
Preparati a configurare Workload Identity
- Verifica che Workload Identity sia abilitato nel tuo file di override. Dovrebbe essere abilitata nel
file di override e dovresti avere valori per le seguenti proprietà di configurazione:
- Per tutte le installazioni:
gcp.workloadIdentityEnabled
deve esseretrue
. Ad esempio:gcp: workloadIdentity: enabled: true
- Per le installazioni di produzione:
- Per le installazioni non di produzione, fornisci l'indirizzo della Jamboard non di produzione (con tutti i ruoli IAM necessari) nella proprietà
gcp.workloadIdentity.gsa
.
- Per tutte le installazioni:
- Verifica che la configurazione
gcloud
attuale 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 prevedeva l'abilitazione di Workload Identity. Puoi verificare se Workload Identity è abilitato eseguendo questo
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 invece vedi
null
nei risultati, esegui il comando seguente per abilitare Workload Identity 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 Workload Identity per ogni pool di nodi con i seguenti comandi. Questa operazione può 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 delle installazioni ibride di Apigee, 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 essere simile al seguente:
--- 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
Usa la procedura seguente per abilitare Workload Identity per i seguenti componenti ibridi:
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 corretti di KMS e KSA.
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
- Ottieni il comando per configurare Workload Identity per
apigee-datastore
ed esegui il comando inNOTES:
nell'output.helm upgrade datastore apigee-datastore/ \ --namespace $NAMESPACE \ -f overrides.yaml \ --dry-run
- Ottieni i comandi per configurare Workload Identity per
apigee-telemetry
ed esegui il comando 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 il comando 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 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 Workload Identity
- Verifica che i passaggi abbiano 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, dovrebbe essere visualizzata 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 degli 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 nella Google Cloud Console.