In diesem Thema wird die Aktivierung von Apigee Hybrid erläutert.
Übersicht
Workload Identity ermöglicht Anwendungen, die in GKE ausgeführt werden (Google Kubernetes Engine), auf Google Cloud-Dienste zuzugreifen. Eine gute Übersicht über Workload Identity finden Sie unter:
- Einführung in Workload Identity: Bessere Authentifizierung für Ihre GKE-Anwendungen
- Workload Identity verwenden
Ein Google Cloud IAM-Dienstkonto ist eine Identität, die eine Anwendung zum Senden von Anfragen an Google APIs verwenden kann. Diese Dienstkonten werden im Dokument als GSA (Google Service Accounts, Google-Dienstkonten) bezeichnet. Weitere Informationen zu GSAs finden Sie unter Dienstkonten.
Unabhängig davon verfügt Kubernetes auch über das Konzept von Dienstkonten. Ein Dienstkonto bietet eine Identität für Prozesse, die in einem Pod ausgeführt werden. Kubernetes-Dienstkonten sind Kubernetes-Ressourcen, während Google-Dienstkonten für Google Cloud spezifisch sind. Informationen zu Kubernetes-Dienstkonten finden Sie in der Kubernetes-Dokumentation unter Dienstkonten für Pods konfigurieren.
Mit Apigee Hybrid 1.4 und höher erstellt und verwendet Apigee ein Kubernetes-Dienstkonto für jeden Komponententyp. Wenn Sie Workload Identity aktivieren, können die Hybridkomponenten mit den Kubernetes-Dienstkonten interagieren.
Vorbereitung
Bevor Sie Workload Identity für Apigee Hybrid aktivieren können, muss Workload Identity für den GKE-Cluster aktiviert werden, auf dem Apigee ausgeführt wird.
Wenn Sie die Anleitung für Anthos Service Mesh (ASM) befolgt haben, ist Workload Identity bereits für den Cluster aktiviert.
Mit folgendem Befehl können Sie prüfen, ob Workload Identity aktiviert ist:
gcloud container clusters describe $CLUSTER_NAME
Die Ausgabe sollte in etwa so aussehen:
… … status: RUNNING subnetwork: default workloadIdentityConfig: workloadPool: PROJECT_ID.svc.id.goog
Wenn Sie Apigee Hybrid in GKE ausführen, werden standardmäßig private Schlüssel (.json
-Dateien) für jedes Dienstkonto erstellt und heruntergeladen. Wenn Sie Workload Identity verwenden, müssen Sie keine privaten Schlüssel für Dienstkonten herunterladen und zu den GKE-Clustern hinzufügen.
Workload Identity aktivieren
Diese Anleitung ist in drei Abschnitte unterteilt:
- Aktivieren von Workload Identity vorbereiten. Folgen Sie dieser Anleitung, um Knotenpools zu aktualisieren und Variablen zu initialisieren, bevor Sie Workload Identity aktivieren.
- Workload Identity für eine Neuinstallation aktivieren. Folgen Sie dieser Anleitung, um Apigee Hybrid neu zu installieren, oder wenn Sie ASM noch nicht in Ihre Hybrid-Installation eingebunden haben.
- Upgrade einer Installation, sodass Workload Identity verwendet werden kann. Folgen Sie dieser Anleitung, um Workload Identity in Ihrer vorhandenen Apigee Hybrid-Installation zu aktivieren.
Aktivieren von Workload Identity vorbereiten
In der folgenden Anleitung wird beschrieben, wie Sie Workload Identity für die Apigee Hybrid-Laufzeit aktivieren.
Knotenpools aktualisieren
Prüfen Sie mit dem folgenden Befehl, ob Workload Identity für alle Knotenpools aktiviert ist:
gcloud container node-pools update $NODE_POOL_NAME \ --cluster=$CLUSTER_NAME \ --workload-metadata=GKE_METADATA
Variablen initialisieren
Initialisieren Sie die folgenden Variablen:
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
Workload Identity für eine Neuinstallation aktivieren
- Fügen Sie der Datei
overrides.yaml
unter der Stanzagcp
die hervorgehobene Zeile hinzu:gcp: projectID: "my-project" name: "my-project" region: "us-west1" workloadIdentityEnabled: true
- Erstellen Sie Google-Dienstkonten. Dafür stehen zwei Methoden zur Verfügung:
- Verwenden Sie das
create-service-account
-Tool, um ein Google-Dienstkonto pro Komponente mit dem folgenden Befehl zu erstellen:$APIGEECTL_HOME/tools/create-service-account --env prod --dir $APIGEECTL_HOME/../service-accounts
Mit diesem Befehl werden die folgenden Dienstkonten erstellt:
apigee-logger
apigee-metrics
apigee-cassandra
apigee-udca
apigee-synchronizer
apigee-mart
apigee-watcher
apigee-distributed-trace
In der folgenden Anleitung wird davon ausgegangen, dass Sie das
create-service-account
-Tool zum Generieren der Dienstkonten verwendet haben. - Benutzerdefinierte Namenskonventionen und Dienstkonten pro Umgebung definieren (für fortgeschrittene Nutzer)
- Verwenden Sie das
- Erstellen Sie die Kubernetes-Dienstkonten.
Für Komponenten auf Organisationsebene:
- 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
Pro Umgebung:
- Laufzeit
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
- Fahren Sie wie gewohnt mit der Installation von Apigee Hybrid fort.
Upgrade einer Installation zur Verwendung von Workload Identity durchführen
Hier sehen Sie ein Beispiel für Google-Dienstkonten (GSA), die für Apigee erstellt wurden:
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
Hier sehen Sie ein Beispiel für Kubernetes-Dienstkonten (Kubernetes Service Accounts, KSA), die für Apigee erstellt wurden (sofern Apigee Hybrid 1.4 oder höher installiert ist):
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
- Fügen Sie jedem Dienstkonto die Rolle "Workload Identity" hinzu:
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
Wenn Sie beispielsweise die Berechtigungen für Apigee Synchronizer festlegen, führen Sie folgenden Befehl aus:
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
- Annotieren Sie jedes KSA mit den GSA-Details:
kubectl annotate serviceaccount \ --namespace $NAMESPACE \ $KSA_NAME \ iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Wenn Sie beispielsweise die Berechtigungen für Apigee Synchronizer festlegen, führen Sie folgenden Befehl aus:
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
- Prüfen Sie, ob die Schritte funktioniert haben:
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
Wenn Sie keine Eingabeaufforderung sehen, drücken Sie die Eingabetaste.
Wenn die Schritte korrekt ausgeführt wurden, wird eine Antwort wie diese angezeigt:
Credentialed Accounts ACTIVE ACCOUNT * GSA@PROJECT_ID.iam.gserviceaccount.com
- Wenn Sie ein Upgrade von einer früheren Installation durchführen, bereinigen Sie die Secrets, die die privaten Schlüssel des Dienstkontos enthielten:
kubectl delete secrets -n $NAMESPACE $(k get secrets -n $NAMESPACE | grep svc-account | awk '{print $1}')
- Prüfen Sie die Logs:
kubectl logs -n $NAMESPACE -l app=apigee=synchronizer,env=$ENV_NAME,org=$ORG_NAME apigee-synchronizer