Questo argomento spiega come attivare Apigee Hybrid.
Panoramica
Workload Identity è un modo per le applicazioni in esecuzione in GKE (Google Kubernetes Engine) di accedere ai servizi Google Cloud. Per una buona panoramica 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, vedi 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.
Con Apigee hybrid 1.4 e versioni successive, Apigee crea e utilizza un account di servizio Kubernetes per ogni tipo di componente. L'attivazione di Workload Identity consente ai componenti ibridi di interagire con i service account Kubernetes.
Prerequisiti
Prima di abilitare Workload Identity per Apigee hybrid, Workload Identity deve essere abilitato per il cluster GKE su cui è in esecuzione Apigee.
Se hai seguito le istruzioni per Anthos Service Mesh (ASM), Workload Identity è già abilitato per il cluster.
Puoi verificare se Workload Identity è abilitato eseguendo questo comando:
gcloud container clusters describe $CLUSTER_NAME
L'output dovrebbe includere quanto segue:
… … status: RUNNING subnetwork: default workloadIdentityConfig: workloadPool: PROJECT_ID.svc.id.goog
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.
Abilita Workload Identity
Queste istruzioni sono suddivise in tre sezioni:
- Preparati ad attivare Workload Identity. Segui queste istruzioni per aggiornare i pool di nodi e inizializzare le variabili prima di abilitare Workload Identity.
- Abilita Workload Identity per una nuova installazione. Segui queste istruzioni per una nuova installazione di Apigee hybrid o se non hai ancora installato ASM nell'installazione ibrida.
- Esegui l'upgrade di un'installazione per utilizzare Workload Identity. Segui queste istruzioni per abilitare Workload Identity nell'installazione esistente di Apigee hybrid.
Prepararsi ad attivare Workload Identity
Le istruzioni riportate di seguito descrivono come attivare Workload Identity per il runtime di Apigee hybrid.
Aggiorna i node pool
Assicurati che Workload Identity sia abilitata per ogni pool di nodi con il seguente comando:
gcloud container node-pools update $NODE_POOL_NAME \ --cluster=$CLUSTER_NAME \ --workload-metadata=GKE_METADATA
Inizializza le variabili
Inizializza le seguenti variabili:
export PROJECT_ID=my-project-idexport ORG_NAME=$PROJECT_IDexport ENV_NAME=my-environment-nameexport NAMESPACE=apigee #the namespace where apigee is installed
gcloud config set project $PROJECT_ID
Attivazione di Workload Identity per una nuova installazione
- Aggiungi la riga evidenziata di seguito al file
overrides.yamlnella sezionegcp:gcp: projectID: "my-project" name: "my-project" region: "us-west1" workloadIdentityEnabled: true
- Crea service account Google. Puoi utilizzare due metodi:
- Utilizza lo strumento
create-service-accountper creare un account di servizio Google per componente con il seguente comando:$APIGEECTL_HOME/tools/create-service-account --env prod --dir $APIGEECTL_HOME/../service-accounts
Questo comando creerà i seguenti service account:
apigee-loggerapigee-metricsapigee-cassandraapigee-udcaapigee-synchronizerapigee-martapigee-watcherapigee-distributed-trace
Le seguenti istruzioni presuppongono che tu abbia utilizzato lo strumento
create-service-accountper generare i service account. - Definisci convenzioni di denominazione e service account personalizzati per ambiente (per utenti avanzati)
- Utilizza lo strumento
- Crea i service account Kubernetes.
Per i componenti a livello di organizzazione:
- Cassandra
kubectl create sa -n $NAMESPACE apigee-cassandra-schema-setup-$(apigeectl encode --org $ORG_NAME)-sa \ && kubectl label sa -n $NAMESPACE -l app=apigee-cassandra,org=$ORG_NAME \ && kubectl annotate serviceaccount \ --namespace $NAMESPACE apigee-cassandra-schema-setup-$(apigeectl encode --org $ORG_NAME)-sa iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
kubectl create sa -n $NAMESPACE apigee-cassandra-user-setup-$(apigeectl encode --org $ORG_NAME)-sa \ && kubectl label sa -n $NAMESPACE -l app=apigee-cassandra,org=$ORG_NAME \ && kubectl annotate serviceaccount \ --namespace $NAMESPACE apigee-cassandra-user-setup-$(apigeectl encode --org $ORG_NAME)-sa iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- MART
kubectl create sa -n $NAMESPACE apigee-mart-$(apigeectl encode --org $ORG_NAME)-sa \ && kubectl label sa -n $NAMESPACE -l app=apigee-mart,org=$ORG_NAME \ && kubectl annotate serviceaccount \ --namespace $NAMESPACE apigee-mart-$(apigeectl encode --org $ORG_NAME)-sa iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Apigee Connect
kubectl create sa -n $NAMESPACE apigee-connect-$(apigeectl encode --org $ORG_NAME)-sa \ && kubectl label sa -n $NAMESPACE -l app=apigee-connect,org=$ORG_NAME \ && kubectl annotate serviceaccount \ --namespace $NAMESPACE apigee-connect-$(apigeectl encode --org $ORG_NAME)-sa iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Apigee Watcher
kubectl create sa -n $NAMESPACE apigee-watcher-$(apigeectl encode --org $ORG_NAME)-sa \ && kubectl label sa -n $NAMESPACE -l app=apigee-watcher,org=$ORG_NAME \ && kubectl annotate serviceaccount \ --namespace $NAMESPACE apigee-watcher-$(apigeectl encode --org $ORG_NAME)-sa iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Per ogni ambiente:
- Tempo di esecuzione
kubectl create sa -n $NAMESPACE apigee-runtime-$(apigeectl encode --org $ORG_NAME --env $ENV_NAME)-sa \ && kubectl label sa -n $NAMESPACE -l app=apigee-runtime,org=$ORG_NAME,env=$ENV_NAME \ && kubectl annotate serviceaccount \ --namespace $NAMESPACE apigee-runtime-$(apigeectl encode --org $ORG_NAME --env $ENV_NAME)-sa iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- UDCA
kubectl create sa -n $NAMESPACE apigee-udca-$(apigeectl encode --org $ORG_NAME --env $ENV_NAME)-sa \ && kubectl label sa -n $NAMESPACE -l app=apigee-udca,org=$ORG_NAME,emv=$ENV_NAME \ && kubectl annotate serviceaccount \ --namespace $NAMESPACE apigee-udca-$(apigeectl encode --org $ORG_NAME --env $ENV_NAME)-sa iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Synchronizer
kubectl create sa -n $NAMESPACE apigee-synchronizer-$(apigeectl encode --org $ORG_NAME --env $ENV_NAME)-sa \ && kubectl label sa -n $NAMESPACE -l app=apigee-synchronizer,org=$ORG_NAME,env=$ENV_NAME \ && kubectl annotate serviceaccount \ --namespace $NAMESPACE apigee-syncrhonizer-$(apigeectl encode --org $ORG_NAME --env $ENV_NAME)-sa iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Cassandra
- Continua a installare Apigee hybrid come faresti normalmente.
Eseguire l'upgrade di un'installazione per utilizzare Workload Identity
Ecco un esempio che mostra i service account Google (GSA) creati per Apigee:
gcloud iam service-accounts list | grep apigee
apigee-connect apigee-connect@$PROJECT_ID.iam.gserviceaccount.com False apigee-runtime apigee-runtime@$PROJECT_ID.iam.gserviceaccount.com False apigee-metrics apigee-metrics@$PROJECT_ID.iam.gserviceaccount.com False apigee-mart apigee-mart@$PROJECT_ID.iam.gserviceaccount.com False apigee-watcher apigee-watcher@$PROJECT_ID.iam.gserviceaccount.com False apigee-sync apigee-sync@$PROJECT_ID.iam.gserviceaccount.com False apigee-udca apigee-udca@$PROJECT_ID.iam.gserviceaccount.com False
Di seguito è riportato un esempio di service account Kubernetes (KSA) creato per Apigee (presuppone che sia installato Apigee hybrid 1.4 o versioni successive):
kubectl get sa -n $NAMESPACE
apigee-cassandra-schema-setup-ORG_NAME-cb84b88-sa 1 xxd apigee-cassandra-user-setup-ORG_NAME-cb84b88-sa 1 xxd apigee-connect-agent-ORG_NAME-cb84b88-sa 1 xxd apigee-init 1 xxd apigee-mart-ORG_NAME-cb84b88-sa 1 xxd apigee-metrics-apigee-telemetry 1 xxd apigee-runtime-ORG_NAME-ENV_NAME-1d0dc5e-sa 1 xxd apigee-synchronizer-ORG_NAME-ENV_NAME-1d0dc5e-sa 1 xxd apigee-udca-ORG_NAME-ENV_NAME-1d0dc5e-sa 1 xxd apigee-watcher-ORG_NAME-cb84b88 1 xxd
- Aggiungi il ruolo Workload Identity a ogni account di servizio:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Ad esempio, se stai impostando le autorizzazioni per Apigee Synchronizer, esegui:
export KSA_NAME=$(kubectl get sa -n apigee -l app=apigee-synchronizer,env=$ENV_NAME,org=$ORG_NAME --output=jsonpath={.items..metadata.name})gcloud iam service-accounts add-iam-policy-binding --role roles/iam.workloadIdentityUser --member "serviceAccount:$PROJECT_ID.svc.id.goog[apigee/$KSA_NAME]" apigee-sync@$PROJECT_ID.iam.gserviceaccount.com
- Annota ogni KSA con i dettagli della GSA:
kubectl annotate serviceaccount \ --namespace $NAMESPACE \ $KSA_NAME \ iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Ad esempio, se stai impostando le autorizzazioni per Apigee Synchronizer, esegui:
export KSA_NAME=$(kubectl get sa -n apigee -l app=apigee-synchronizer,env=$ENV_NAME,org=$ORG_NAME --output=jsonpath={.items..metadata.name})kubectl annotate serviceaccount --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-sync@$PROJECT_ID.iam.gserviceaccount.com
- Verifica se i passaggi hanno funzionato:
gcloud config set project $PROJECT_ID
kubectl run --rm -it --image google/cloud-sdk:slim --serviceaccount $KSA_NAME --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