במאמר הזה מוסבר איך להפעיל את איחוד הזהויות של עומסי עבודה ל-GKE ב-Apigee Hybrid.
אם אתם משתמשים ב-AKS או ב-EKS ב-Apigee Hybrid, פועלים לפי ההוראות במאמר הפעלת איחוד שירותי אימות הזהות של עומסי עבודה ב-AKS וב-EKS.
סקירה כללית
איחוד זהויות של עומסי עבודה ל-GKE מאפשר לאפליקציות שפועלות ב-GKE (Google Kubernetes Engine) לגשת לשירותי Google Cloud . סקירות כלליות על איחוד זהויות של עומסי עבודה ל-GKE:
חשבון שירות ב-Google Cloud IAM הוא זהות שאפליקציה יכולה להשתמש בה כדי לשלוח בקשות ל-Google APIs. במסמך הזה, חשבונות השירות האלה נקראים GSA (Google Service Accounts). מידע נוסף על חשבונות שירות של Google זמין במאמר חשבונות שירות.
בנפרד, גם ל-Kubernetes יש קונספט של חשבונות שירות. חשבון שירות מספק זהות לתהליכים שפועלים ב-Pod. חשבונות שירות ב-Kubernetes הם משאבים ב-Kubernetes, וחשבונות שירות ב-Google הם ספציפיים ל-Google Cloud. למידע על חשבונות שירות של Kubernetes, קראו את המאמר הגדרת חשבונות שירות לפודים במסמכי התיעוד של Kubernetes.
כשמתקינים בפעם הראשונה את תרשימי Helm של הרכיבים, Apigee יוצרת חשבון שירות של Kubernetes לכל סוג של רכיב ומשתמשת בו. הפעלת איחוד זהויות של עומסי עבודה ל-GKE מאפשרת לרכיבים ההיברידיים לתקשר עם חשבונות השירות של Kubernetes.
משתני סביבה שמשמשים בתהליכים האלה
בפעולות האלה משתמשים במשתני הסביבה הבאים. אפשר להגדיר אותם במעטפת הפקודות או להחליף אותם בדוגמאות הקוד בערכים בפועל:
-
PROJECT_ID: המזהה של הפרויקט בענן ב-Google Cloud. -
ORG_NAME: השם של הארגון ב-Apigee. -
ENV_NAME: השם של סביבת Apigee. -
NAMESPACE: מרחב השמות של Apigee (בדרך כללapigee). -
CLUSTER_LOCATION: האזור או התחום של אשכול Kubernetes, לדוגמה:us-west1. -
CLUSTER_NAME: שם האשכול.
מאמתים את משתני הסביבה:
echo $PROJECT_IDecho $ORG_NAMEecho $ENV_NAMEecho $NAMESPACEecho $CLUSTER_LOCATIONecho $CLUSTER_NAME
מאתחלים את המשתנים שצריך:
export PROJECT_ID=MY_PROJECT_IDexport ORG_NAME=MY_ORG_NAMEexport ENV_NAME=MY_ENV_NAMEexport NAMESPACE=APIGEE_NAMESPACEexport CLUSTER_LOCATION=MY_CLUSTER_LOCATIONexport CLUSTER_NAME=MY_CLUSTER_NAME
איחוד זהויות של עומסי עבודה ל-GKE וקובצי מפתחות של חשבונות שירות
כשמריצים את Apigee Hybrid ב-GKE, הנוהג המקובל הוא ליצור ולהוריד מפתחות פרטיים (קובצי .json) לכל אחד מחשבונות השירות. כשמשתמשים באיחוד זהויות של עומסי עבודה ל-GKE, לא צריך להוריד מפתחות פרטיים של חשבונות שירות ולהוסיף אותם לאשכולות של GKE.
אם הורדתם קובצי מפתחות של חשבונות שירות כחלק מההתקנה של Apigee hybrid, אתם יכולים למחוק אותם אחרי שתפעילו את איחוד הזהויות של עומסי עבודה ל-GKE. ברוב ההתקנות, הם נמצאים בספרייה של התרשים של כל רכיב.
הפעלת איחוד זהויות של עומסי עבודה ל-GKE ב-Apigee Hybrid
כדי להגדיר את הפרויקט לשימוש באיחוד זהויות של עומסי עבודה ל-GKE, פועלים לפי ההוראות הבאות.
הכנות להגדרת איחוד זהויות של עומסי עבודה ל-GKE
- מוודאים שאיחוד זהויות של עומסי עבודה ל-GKE מופעל בקובץ השינויים. צריך להפעיל אותו בקובץ השינויים, וצריכים להיות ערכים במאפייני ההגדרות הבאים:
- בכל ההתקנות:
gcp.workloadIdentity.enabledצריך להיותtrue. לדוגמה:gcp: workloadIdentity: enabled: true - להתקנות בסביבת ייצור:
- בהתקנות שהן לא בסביבת ייצור, צריך לציין את הכתובת של חשבון השירות של Google (עם כל תפקידי ה-IAM הנדרשים) במאפיין
gcp.workloadIdentity.gsa.
- בכל ההתקנות:
- מריצים את הפקודה הבאה כדי לוודא שההגדרה הנוכחית של
gcloudהיא מזהה הפרויקט ב-Google Cloud:gcloud config get project
- מוודאים שאיחוד זהויות של עומסי עבודה ל-GKE מופעל באשכול GKE. כשיוצרים את האשכול בשלב 1: יצירת אשכול, שלב 6 הוא להפעיל את איחוד הזהויות של עומסי עבודה ל-GKE. כדי לוודא שאיחוד הזהויות של עומסי העבודה ל-GKE מופעל, מריצים את הפקודה הבאה:
אשכולות אזוריים
gcloud container clusters describe $CLUSTER_NAME \ --region $CLUSTER_LOCATION \ --project $PROJECT_ID \ --flatten 'workloadIdentityConfig'
אשכולות של תחום מוגדר
gcloud container clusters describe $CLUSTER_NAME \ --zone $CLUSTER_LOCATION \ --project $PROJECT_ID \ --flatten 'workloadIdentityConfig'
הפלט אמור להיראות כך:
--- workloadPool: PROJECT_ID.svc.id.goog
אם מופיע
nullבתוצאות, מריצים את הפקודה הבאה כדי להפעיל את איחוד זהויות של עומסי עבודה ל-GKE באשכול:אשכולות אזוריים
gcloud container clusters update $CLUSTER_NAME \ --workload-pool=$PROJECT_ID.svc.id.goog \ --project $PROJECT_ID \ --region $CLUSTER_LOCATION
אשכולות של תחום מוגדר
gcloud container clusters update $CLUSTER_NAME \ --workload-pool=$PROJECT_ID.svc.id.goog \ --zone $CLUSTER_LOCATION \ --project $PROJECT_ID
-
מפעילים את איחוד זהויות של עומסי עבודה ל-GKE לכל מאגר צמתים באמצעות הפקודות הבאות. הפעולה הזו יכולה להימשך עד 30 דקות לכל צומת:
אשכולות אזוריים
gcloud container node-pools update NODE_POOL_NAME \ --cluster=$CLUSTER_NAME \ --region $CLUSTER_LOCATION \ --project $PROJECT_ID \ --workload-metadata=GKE_METADATA
אשכולות של תחום מוגדר
gcloud container node-pools update NODE_POOL_NAME \ --cluster=$CLUSTER_NAME \ --zone $CLUSTER_LOCATION \ --project $PROJECT_ID \ --workload-metadata=GKE_METADATA
כאשר NODE_POOL_NAME הוא השם של כל מאגר צמתים. ברוב ההתקנות של Apigee Hybrid, שני מאגרי הצמתים שמוגדרים כברירת מחדל נקראים
apigee-dataו-apigee-runtime. - כדי לוודא שאיחוד זהויות של עומסי עבודה ל-GKE מופעל במאגרי הצמתים, מריצים את הפקודות הבאות:
אשכולות אזוריים
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:"
אשכולות של תחום מוגדר
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:"
הפלט אמור להיראות ככה:
--- diskSizeGb: 100 diskType: pd-standard ... workloadMetadataConfig: mode: GKE_METADATA
אם צריך, מגדירים את ההגדרות הנוכחיות של gcloud:
gcloud config set project $PROJECT_ID
הגדרת ההתקנה לשימוש באיחוד זהויות של עומסי עבודה ל-GKE
כדי להפעיל את איחוד הזהויות של עומסי עבודה ל-GKE ברכיבים ההיברידיים הבאים, צריך לבצע את הפעולות הבאות:
apigee-datastoreapigee-telemetryapigee-orgapigee-env
כשמריצים את helm upgrade עם הדגלים --dry-run או --dry-run=server לתרשימים apigee-datastore, apigee-env, apigee-org ו-apigee-telemetry, הפלט יכלול את הפקודות שצריך כדי להגדיר את איחוד זהויות של עומסי עבודה ל-GKE עם השמות הנכונים של GSA ו-KSA.
לדוגמה:
helm upgrade datastore apigee-datastore/ \ --namespace $NAMESPACE \ -f OVERRIDES_FILE \ --dry-run=server
הפלט יהיה בערך כזה:
NAME: datastore
...
For Cassandra backup, please make sure to add the following membership to the IAM policy binding using the respective kubernetes SA (KSA).
gcloud iam service-accounts add-iam-policy-binding apigee-cassandra@PROJECT_ID.iam.gserviceaccount.com \
--role roles/iam.workloadIdentityUser \
--member "serviceAccount:PROJECT_ID.svc.id.goog[APIGEE_NAMESPACE/apigee-cassandra-default]" \
--project PROJECT_ID
kubectl annotate serviceaccount apigee-cassandra-default \
iam.gke.io/gcp-service-account=apigee-cassandra@PROJECT_ID.iam.gserviceaccount.com \
--namespace APIGEE_NAMESPACE
כאשר:
-
apigee-cassandraהוא השם של חשבון השירות של Google (GSA) ל-Cassandra. מידע על חשבונות שירות -
PROJECT_IDמוחלף במזהה הפרויקט ב-Google Cloud. - הערך
APIGEE_NAMESPACEמוחלף במרחב השמות של Apigee, כברירת מחדלapigee. -
apigee-cassandra-defaultהוא השם של חשבון השירות ב-Kubernetes של קבוצות ה-Pod של Cassandra שנוצרו על ידי תרשיםapigee-datastore.
- משיגים את הפקודה להגדרת איחוד זהויות של עומסי עבודה ל-GKE בשביל
apigee-datastoreומריצים את הפקודות בקטעNOTES:בפלט.helm upgrade datastore apigee-datastore/ \ --namespace $NAMESPACE \ -f OVERRIDES_FILE \ --dry-run=server
- משיגים את הפקודות להגדרת איחוד זהויות של עומסי עבודה ל-GKE בשביל
apigee-telemetryומריצים את הפקודות בקטעNOTES:בפלט.helm upgrade telemetry apigee-telemetry/ \ --namespace $NAMESPACE \ -f OVERRIDES_FILE \ --dry-run
- משיגים את הפקודות להגדרת איחוד זהויות של עומסי עבודה ל-GKE בשביל
apigee-orgומריצים את הפקודות בקטעNOTES:בפלט.helm upgrade $ORG_NAME apigee-org/ \ --namespace $NAMESPACE \ -f OVERRIDES_FILE \ --dry-run
- משיגים את הפקודות להגדרת איחוד זהויות של עומסי עבודה ל-GKE בשביל
apigee-envומריצים את הפקודות בקטעNOTES:בפלט.helm upgrade $ENV_NAME apigee-env/ \ --namespace $NAMESPACE \ --set env=$ENV_NAME \ -f OVERRIDES_FILE \ --dry-run
חוזרים על השלב הזה בכל סביבה בהתקנה.
אימות של איחוד זהויות של עומסי עבודה ל-GKE
- כדי לבדוק אם השלבים עבדו:
gcloud config set project $PROJECT_ID
kubectl run --rm -it --image google/cloud-sdk:slim \ --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
- (אופציונלי) אפשר לראות את הסטטוס של חשבונות השירות של Kubernetes בדף Kubernetes: Workloads Overview ב- Google Cloud console.