Questo argomento spiega come attivare Apigee ibrido.
Panoramica
Workload Identity è un modo per consentire alle applicazioni in esecuzione all'interno di GKE (Google Kubernetes Engine) di accedere ai servizi Google Cloud. Per una buona panoramica di Workload Identity, vedi:
- Introduzione a Workload Identity: autenticazione migliore 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 nel documento come GSA (Account di servizio Google) Per ulteriori informazioni, vedi Account di servizio.
Separatamente, Kubernetes comprende anche il concetto di account di servizio. Un account di servizio fornisce un'identità per i processi in esecuzione in un pod. Gli account di servizio Kubernetes sono risorse Kubernetes, mentre quelli di Google sono specifici per Google Cloud. Per informazioni sugli account di servizio Kubernetes, consulta la sezione Configurare gli account di servizio per i pod nella documentazione di Kubernetes.
Con Apigee ibrida 1.4 e versioni successive, Apigee crea e utilizza un account di servizio Kubernetes per ogni tipo di componente. L'abilitazione di Workload Identity consente ai componenti ibridi di interagire con gli account di servizio Kubernetes.
Prerequisiti
Prima di abilitare Workload Identity per Apigee ibrido, Workload Identity deve essere abilitato per il cluster GKE che esegue Apigee.
Se hai seguito le istruzioni di Anthos Service Mesh (ASM), Workload Identity è già abilitato per il cluster.
Puoi confermare se Workload Identity è abilitato eseguendo questo comando:
gcloud container clusters describe $CLUSTER_NAME
L'output dovrebbe includere qualcosa di simile all'esempio seguente:
… … status: RUNNING subnetwork: default workloadIdentityConfig: workloadPool: PROJECT_ID.svc.id.goog
Quando esegui Apigee ibrida su GKE, la prassi 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.
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 ibrida di Apigee o se non hai già installato ASM nell'installazione ibrida.
- Esegui l'upgrade di un'installazione per utilizzare Workload Identity. Segui queste istruzioni per abilitare Workload Identity nella tua installazione ibrida esistente di Apigee.
Prepararsi per abilitare Workload Identity
Le seguenti istruzioni descrivono come abilitare Workload Identity per il runtime ibrido Apigee.
Aggiorna pool di nodi
Assicurati che Workload Identity sia abilitato per ogni pool di nodi con il comando seguente:
gcloud container node-pools update $NODE_POOL_NAME \ --cluster=$CLUSTER_NAME \ --workload-metadata=GKE_METADATA
Inizializza variabili
Inizializza le seguenti variabili:
export PROJECT_ID=my-project-idexport ORG_NAME=$PROJECT_ID
export ENV_NAME=my-environment-name
export NAMESPACE=apigee #the namespace where apigee is installed
gcloud config set project $PROJECT_ID
Abilitazione di Workload Identity per una nuova installazione
- Aggiungi la riga evidenziata di seguito al file
overrides.yaml
sotto la sezionegcp
:gcp: projectID: "my-project" name: "my-project" region: "us-west1" workloadIdentityEnabled: true
- Crea account di servizio Google. Puoi utilizzare due metodi:
- Utilizza lo strumento
create-service-account
per 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 account di servizio:
apigee-logger
apigee-metrics
apigee-cassandra
apigee-udca
apigee-synchronizer
apigee-mart
apigee-watcher
apigee-distributed-trace
Le seguenti istruzioni presuppongono che tu abbia utilizzato lo strumento
create-service-account
per generare gli account di servizio. - Definisci convenzioni di denominazione personalizzate e account di servizio per ambiente (per utenti esperti)
- Utilizza lo strumento
- crea gli account di servizio 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
- MAT
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
- Osservatore Apigee
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:
- Durata
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
- Sincronizzazione
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 ibrido come faresti normalmente.
Upgrade di un'installazione per l'utilizzo di Workload Identity
Ecco un esempio che mostra gli account di servizio 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 Account di servizio Kubernetes (KSA) creato per Apigee (presupponendo che sia installato Apigee ibrido 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 imposti le autorizzazioni per Apigee Synchronizer, viene eseguito:
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 di GSA:
kubectl annotate serviceaccount \ --namespace $NAMESPACE \ $KSA_NAME \ iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Ad esempio, se imposti le autorizzazioni per Apigee Synchronizer, viene eseguito:
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 vedere una risposta come la seguente:
Credentialed Accounts ACTIVE ACCOUNT * GSA@PROJECT_ID.iam.gserviceaccount.com
- Se esegui l'upgrade da un'installazione precedente, correggi 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