במאמר הזה מוסבר איך להפעיל את Apigee Hybrid.
סקירה כללית
Workload Identity היא דרך לאפליקציות שפועלות ב-GKE (Google Kubernetes Engine) לגשת לשירותי Google Cloud. סקירה כללית טובה של Workload Identity זמינה במאמרים הבאים:
חשבון שירות ב-Cloud IAM של Google הוא זהות שאפליקציה יכולה להשתמש בה כדי לשלוח בקשות ל-Google APIs. במסמך הזה, חשבונות השירות האלה נקראים GSA (חשבונות שירות של Google). מידע נוסף על חשבונות שירות זמין במאמר חשבונות שירות.
בנוסף, ב-Kubernetes יש גם את המושג של חשבונות שירות. חשבון שירות מספק זהות לתהליכים שפועלים ב-Pod. חשבונות שירות ב-Kubernetes הם משאבים ב-Kubernetes, ואילו חשבונות שירות ב-Google הם ספציפיים ל-Google Cloud. מידע על חשבונות שירות של Kubernetes זמין במאמר הגדרת חשבונות שירות לקבוצות Pod במסמכי העזרה של Kubernetes.
ב-Apigee hybrid מגרסה 1.4 ואילך, מערכת Apigee יוצרת ומשתמשת בחשבון שירות של Kubernetes לכל סוג של רכיב. הפעלת Workload Identity מאפשרת לרכיבים ההיברידיים ליצור אינטראקציה עם חשבונות השירות של Kubernetes.
דרישות מוקדמות
לפני שמפעילים את Workload Identity ב-Apigee hybrid, צריך להפעיל את Workload Identity באשכול GKE שבו פועל Apigee.
אם פעלתם לפי ההוראות ל-Anthos Service Mesh (ASM), Workload Identity כבר מופעל באשכול.
כדי לוודא ש-Workload Identity מופעל, מריצים את הפקודה הבאה:
gcloud container clusters describe $CLUSTER_NAME
הפלט צריך לכלול משהו כזה:
… … status: RUNNING subnetwork: default workloadIdentityConfig: workloadPool: PROJECT_ID.svc.id.goog
כשמריצים את Apigee hybrid ב-GKE, הדרך המקובלת היא ליצור ולהוריד מפתחות פרטיים (קובצי .json) לכל אחד מחשבונות השירות. כשמשתמשים ב-Workload Identity, אין צורך להוריד מפתחות פרטיים של חשבונות שירות ולהוסיף אותם לאשכולות GKE.
הפעלה של Workload Identity
ההוראות האלה מחולקות לשלושה חלקים:
- הכנה להפעלת Workload Identity כדי להפעיל את התכונה 'זהויות של עומסי עבודה', צריך לפעול לפי ההוראות האלה כדי לעדכן את מאגרי הצמתים ולאתחל את המשתנים.
- הפעלה של Workload Identity בהתקנה חדשה. פועלים לפי ההוראות האלה להתקנה חדשה של Apigee Hybrid או אם עדיין לא התקנתם את ASM בהתקנה שלכם של Apigee Hybrid.
- שדרוג התקנה לשימוש ב-Workload Identity פועלים לפי ההוראות האלה כדי להפעיל את Workload Identity בהתקנה קיימת של Apigee Hybrid.
הכנות להפעלת Workload Identity
בהוראות הבאות מוסבר איך להפעיל את Workload Identity בסביבת זמן הריצה של Apigee Hybrid.
עדכון מאגרי צמתים
מוודאים שמאפיין Workload Identity מופעל לכל מאגר צמתים באמצעות הפקודה הבאה:
gcloud container node-pools update $NODE_POOL_NAME \ --cluster=$CLUSTER_NAME \ --workload-metadata=GKE_METADATA
הפעלת משתנים
מאתחלים את המשתנים הבאים:
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
הפעלה של Workload Identity בהתקנה חדשה
- מוסיפים את השורה המודגשת שלמטה לקובץ
overrides.yamlבקטעgcp:gcp: projectID: "my-project" name: "my-project" region: "us-west1" workloadIdentityEnabled: true
- יוצרים חשבונות שירות של Google. יש שתי שיטות שבהן אפשר להשתמש:
- משתמשים בכלי
create-service-accountכדי ליצור חשבון שירות של Google לכל רכיב באמצעות הפקודה הבאה:$APIGEECTL_HOME/tools/create-service-account --env prod --dir $APIGEECTL_HOME/../service-accounts
הפקודה הזו תיצור את חשבונות השירות הבאים:
apigee-loggerapigee-metricsapigee-cassandraapigee-udcaapigee-synchronizerapigee-martapigee-watcherapigee-distributed-trace
ההוראות הבאות מניחות שהשתמשתם בכלי
create-service-accountכדי ליצור את חשבונות השירות. - הגדרת מוסכמות שמות מותאמות אישית וחשבונות שירות לכל סביבה (למשתמשים מתקדמים)
- משתמשים בכלי
- יוצרים את חשבונות השירות של Kubernetes.
לרכיבים ברמת הארגון:
- 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
לכל סביבה:
- זמן ריצה
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
- ממשיכים בהתקנה של Apigee hybrid כרגיל.
שדרוג התקנה לשימוש ב-Workload Identity
הנה דוגמה שמציגה חשבונות שירות של Google (GSA) שנוצרו עבור 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
זו דוגמה לחשבונות שירות של Kubernetes (KSA) שנוצרו עבור Apigee (בהנחה שגרסה Apigee hybrid 1.4 ומעלה מותקנת):
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
- מוסיפים את התפקיד Workload Identity לכל חשבון שירות:
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
לדוגמה, אם מגדירים את ההרשאות של Apigee Synchronizer, מריצים את הפקודה:
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
- מוסיפים לכל KSA את פרטי ה-GSA:
kubectl annotate serviceaccount \ --namespace $NAMESPACE \ $KSA_NAME \ iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
לדוגמה, אם מגדירים את ההרשאות של Apigee Synchronizer, מריצים את הפקודה:
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
- כדי לוודא שהשלבים עבדו:
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
אם לא מופיעה שורת פקודה, נסו להקיש על Enter.
אם השלבים בוצעו בצורה נכונה, אמורה להתקבל תגובה כמו זו:
Credentialed Accounts ACTIVE ACCOUNT * GSA@PROJECT_ID.iam.gserviceaccount.com
- אם משדרגים מהתקנה קודמת, צריך לנקות סודות שהכילו מפתחות פרטיים של חשבונות שירות:
kubectl delete secrets -n $NAMESPACE $(k get secrets -n $NAMESPACE | grep svc-account | awk '{print $1}') - בדיקת היומנים:
kubectl logs -n $NAMESPACE -l app=apigee=synchronizer,env=$ENV_NAME,org=$ORG_NAME apigee-synchronizer