שלב 10 (אופציונלי): הגדרת Workload Identity ב-GKE

‫GKE עם Workload Identity בלבד: הגדרת Workload Identity

אם הגדרתם את קובץ ההחלפות של Workload Identity ב-GKE בשלב 6: הגדרת האשכול, אתם צריכים לבצע את השלבים הבאים.

אם אתם לא משתמשים ב-Workload Identity ב-GKE, עוברים אל חלק 3, שלב 1: חשיפת שער הכניסה של Apigee.

חשבונות שירות ב-Google Cloud וחשבונות שירות ב-Kubernetes

חשבון שירות ב-Google Cloud הוא סוג מיוחד של חשבון שאפשר להשתמש בו כדי לבצע קריאות מורשות ל-API על ידי אימות כחשבון השירות עצמו. אפשר להקצות לחשבונות שירות ב-Google Cloud תפקידים והרשאות בדומה למשתמשים פרטיים. כשאפליקציה מבצעת אימות כחשבון שירות, יש לה גישה לכל המשאבים שחשבון השירות מורשה לגשת אליהם. מידע נוסף על חשבונות שירות ב-Google Cloud זמין במאמר סקירה כללית על חשבונות שירות.

יצרתם חשבונות שירות ב-Google Cloud להתקנת Apigee Hybrid בשלב 4: יצירת חשבונות שירות. ‫Apigee משתמש בחשבונות השירות האלה כדי לאמת את הרכיבים ההיברידיים.

חשבונות שירות של Kubernetes דומים לחשבונות שירות של Google Cloud. חשבון שירות של Kubernetes מספק זהות לתהליכים שפועלים ב-Pod, ומאפשר לו לבצע אימות לשרת ה-API באופן דומה למשתמש. מידע נוסף על חשבונות שירות ב-Kubernetes זמין במאמר הגדרת חשבונות שירות לקבוצות Pod.

הכלי apigeectl יצר את רוב חשבונות השירות של Kubernetes שנדרשים ל-Apigee Hybrid כשמריצים את הפקודה apigeectl apply בתהליך הקודם.

כשמגדירים Workload Identity ב-GKE, משייכים את חשבונות השירות של Google Cloud לחשבונות השירות של Kubernetes באשכול Kubernetes. כך, חשבונות השירות של Kubernetes יכולים להתחזות לחשבונות השירות של Google Cloud ולהשתמש בתפקידים ובהרשאות שהוקצו להם כדי לבצע אימות מול הרכיבים ההיברידיים.

כדי להגדיר את Workload Identity בפרויקט, פועלים לפי ההוראות האלה.

הכנות להגדרת Workload Identity

בנהלים האלה נעשה שימוש במשתני הסביבה הבאים. בודקים אם הם מוגדרים, ואם לא, מגדירים אותם:

echo $APIGEECTL_HOME
echo $CLUSTER_LOCATION
echo $ENV_NAME
echo $HYBRID_FILES
echo $NAMESPACE
echo $PROJECT_ID
echo $ORG_NAME

כאשר:

  • ‫APIGEECTL_HOME היא הספרייה שבה התקנתם את apigeectl.
  • ‫CLUSTER_LOCATION הוא האזור (או התחום) של האשכול, לדוגמה us-central1.
  • ‫ENV_NAME הוא השם של הסביבה.
  • ‫HYBRID_FILES היא הספרייה שבה יצרתם את הספריות overrides ו-certs.
  • ‫NAMESPACE הוא מרחב השמות של Apigee.
  • ‫PROJECT_ID הוא הפרויקט שלכם ב-Google Cloud.
  • ‫ORG_NAME הוא השם של הארגון שלכם ב-Apigee.

  1. בודקים שההגדרה הנוכחית של gcloud מוגדרת למזהה הפרויקט ב-Google Cloud באמצעות הפקודה הבאה:
    gcloud config get project
  2. אם צריך, מגדירים את ההגדרות של gcloud:

    gcloud config set project $PROJECT_ID
  3. יוצרים את חשבון השירות של apigee-cassandra-restore Kubernetes.

    כשמחילים את ההגדרות על ידי הפעלת הפקודה apigeectl apply, הפקודה יוצרת את רוב חשבונות השירות של Kubernetes שנדרשים ל-Workload Identity.

    כדי ליצור את חשבון השירות apigee-cassandra-restore ב-Kubernetes, מריצים את הפקודה apigeectl apply עם הדגל --restore:

    $APIGEECTL_HOME/apigeectl apply -f $HYBRID_FILES/overrides/overrides.yaml --restore
  4. מוודאים ש-Workload Identity מופעל באשכול GKE. כשיוצרים את האשכול בשלב 1: יצירת אשכול, השלב השישי הוא הפעלת Workload Identity. כדי לוודא ש-Workload Identity מופעל, מריצים את הפקודה הבאה:

    אשכולות אזוריים

    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 בתוצאות, מריצים את הפקודה הבאה כדי להפעיל את Workload Identity באשכול:

    אשכולות אזוריים

    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
  5. מפעילים את התכונה Workload Identity לכל מאגר צמתים באמצעות הפקודות הבאות. הפעולה הזו יכולה להימשך עד 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.

  6. מריצים את הפקודות הבאות כדי לוודא שהתכונה Workload Identity מופעלת במאגרי הצמתים:

    אשכולות אזוריים

    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
        
  7. קבלת רשימה של שמות חשבונות השירות ב-Google Cloud שמשויכים לפרויקט. תצטרכו את השמות האלה כדי לשייך את חשבונות השירות של Kubernetes להגדרת Workload Identity. במקרים של התקנות שאינן בסביבת ייצור, צריך להיות רק חשבון שירות אחד של Google. בגרסת הייצור צריכות להיות שמונה התקנות.

    כדי לקבל את רשימת השמות, משתמשים בפקודה הבאה:

    gcloud iam service-accounts list --project $PROJECT_ID

    הפלט אמור להיראות כך:

    Non-prod

    לסביבות שאינן סביבות ייצור:

    DISPLAY NAME         EMAIL                                                      DISABLED
    apigee-non-prod      apigee-non-prod@my_project_id.iam.gserviceaccount.com      False
    

    ייצור

    לסביבות שאינן סביבות ייצור:

    DISPLAY NAME         EMAIL                                                      DISABLED
    apigee-cassandra     apigee-cassandra@my_project_id.iam.gserviceaccount.com     False
    apigee-logger        apigee-logger@my_project_id.iam.gserviceaccount.com        False
    apigee-mart          apigee-mart@my_project_id.iam.gserviceaccount.com          False
    apigee-metrics       apigee-metrics@my_project_id.iam.gserviceaccount.com       False
    apigee-runtime       apigee-runtime@my_project_id.iam.gserviceaccount.com       False
    apigee-synchronizer  apigee-synchronizer@my_project_id.iam.gserviceaccount.com  False
    apigee-udca          apigee-udca@my_project_id.iam.gserviceaccount.com          False
    apigee-watcher       apigee-watcher@my_project_id.iam.gserviceaccount.com       False
    
  8. מקבלים רשימה של שמות חשבונות השירות של Kubernetes. תצטרכו את רשימת השמות הזו כדי לשייך אותם לחשבונות השירות שלכם ב-Google Cloud בהמשך התהליך הזה. משתמשים בפקודה הבאה:
    kubectl get sa -n $NAMESPACE

    הפלט אמור להיראות כך: חשבונות השירות של Kubernetes שמופיעים בהדגשה הם אלה שתצטרכו לשייך לחשבונות השירות שלכם ב-Google Cloud:

    NAME                                                         SECRETS   AGE
    apigee-cassandra-backup                                      1         11m
    apigee-cassandra-restore                                     1         11m
    apigee-cassandra-schema-setup-my-project-id-123abcd-sa       1         11m
    apigee-cassandra-schema-val-my-project-id-123abcd            1         11m
    apigee-cassandra-user-setup-my-project-id-123abcd-sa         1         11m
    apigee-connect-agent-my-project-id-123abcd-sa                1         11m
    apigee-datastore-default-sa                                  1         11m
    apigee-ingressgateway                                        1         11m
    apigee-ingressgateway-my-project-id-123abcd                  1         11m
    apigee-ingressgateway-manager                                1         11m
    apigee-init                                                  1         11m
    apigee-mart-my-project-id-123abcd-sa                         1         11m
    apigee-metrics-sa                                            1         11m
    apigee-mint-task-scheduler-my-project-id-123abcd-sa          1         11m
    apigee-redis-default-sa                                      1         11m
    apigee-redis-envoy-default-sa                                1         11m
    apigee-runtime-my-project-id-env-name-234bcde-sa             1         11m
    apigee-synchronizer-my-project-id-env-name-234bcde-sa        1         11m
    apigee-udca-my-project-id-123abcd-sa                         1         11m
    apigee-udca-my-project-id-env-name-234bcde-sa                1         11m
    apigee-watcher-my-project-id-123abcd-sa                      1         11m
    default                                                      1         11m
        

הגדרת Workload Identity

כדי להפעיל את Workload Identity בהתקנה היברידית, מבצעים את הפעולות הבאות:

  1. לכל רכיב של Apigee, מוסיפים הערה לחשבונות השירות המתאימים של Kubernetes עם חשבון השירות של Google לרכיב.

    בשלבים הבאים נעשה שימוש בשני משתני סביבה. תאפסו את הערכים של המשתנים האלה לפני כל קבוצת פקודות:

    • ‫GSA_NAME: השם של חשבון שירות של Google. אלה חשבונות השירות שיצרתם באמצעות הכלי create-service-account בשלב 4: יצירת חשבונות שירות.
    • ‫KSA_NAME: השם של חשבון שירות ב-Kubernetes. אלה החשבונות שרשמתם למעלה באמצעות הפקודה kubectl get sa -n $NAMESPACE, לדוגמה: apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa.
    • Cassandra

      מגדירים את Workload Identity לרכיב Cassandra.

      לרכיב Cassandra יש שישה חשבונות שירות משויכים ב-Kubernetes:

      • apigee-cassandra-backup
      • apigee-cassandra-restore
      • apigee-cassandra-schema-setup
      • apigee-cassandra-schema-val (val = אימות)
      • apigee-cassandra-user-setup
      • apigee-datastore-default

      Non-prod

      הגדרת apigee-cassandra-backup חשבון שירות של Kubernetes

      1. מגדירים את משתני הסביבה KSA_NAME ו-GSA_NAME:
        GSA_NAME="apigee-non-prod"
        KSA_NAME="apigee-cassandra-backup"
      2. קישור תפקיד IAM:
        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 \
          --project $PROJECT_ID
      3. מוסיפים הערה לחשבון השירות:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. אימות ההערה:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

        הפלט צריך לכלול שורה עם תיאור ההערה, בדומה ל:

        Annotations:         iam.gke.io/gcp-service-account: apigee-non-prod@my-project-id.iam.gserviceaccount.com

      הגדרת apigee-cassandra-restore חשבון שירות של Kubernetes

      1. מגדירים מחדש את משתנה הסביבה KSA_NAME:

        KSA_NAME="apigee-cassandra-restore"
      2. קישור תפקיד IAM:
        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 \
          --project $PROJECT_ID
      3. מוסיפים הערה לחשבון השירות:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. אימות ההערה:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      הגדרת apigee-cassandra-schema-setup חשבון שירות של Kubernetes

      1. מגדירים מחדש את משתנה הסביבה KSA_NAME:

        KSA_NAME="apigee-cassandra-schema-setup-service-account-name-sa"
        לדוגמה: apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa.
      2. קישור תפקיד IAM:
        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 \
          --project $PROJECT_ID
      3. מוסיפים הערה לחשבון השירות:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. אימות ההערה:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      הגדרת apigee-cassandra-schema-val חשבון שירות של Kubernetes

      1. מגדירים מחדש את משתנה הסביבה KSA_NAME:

        KSA_NAME="apigee-cassandra-schema-val-service-account-name"
        לדוגמה: apigee-cassandra-schema-val-hybrid-example-project-123abcd.
      2. קישור תפקיד IAM:
        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 \
          --project $PROJECT_ID
      3. מוסיפים הערה לחשבון השירות:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. אימות ההערה:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      הגדרת apigee-cassandra-user-setup חשבון שירות של Kubernetes

      1. מגדירים מחדש את משתנה הסביבה KSA_NAME:

        KSA_NAME="apigee-cassandra-user-setup-service-account-name-sa"
        לדוגמה: apigee-cassandra-user-setup-hybrid-example-project-123abcd-sa.
      2. קישור תפקיד IAM:
        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 \
          --project $PROJECT_ID
      3. מוסיפים הערה לחשבון השירות:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. אימות ההערה:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      הגדרת apigee-datastore-default-sa חשבון שירות של Kubernetes

      1. מגדירים מחדש את משתנה הסביבה KSA_NAME:

        KSA_NAME="apigee-datastore-default-sa"
      2. קישור תפקיד IAM:
        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 \
          --project $PROJECT_ID
      3. מוסיפים הערה לחשבון השירות:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. אימות ההערה:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      ייצור

      הגדרת apigee-cassandra-backup חשבון שירות של Kubernetes

      1. מגדירים את משתני הסביבה KSA_NAME ו-GSA_NAME:
        GSA_NAME="apigee-cassandra"
        KSA_NAME="apigee-cassandra-backup"
      2. קישור תפקיד IAM:
        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 \
          --project $PROJECT_ID
      3. מוסיפים הערה לחשבון השירות:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. אימות ההערה:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
      5. הפלט צריך לכלול שורה עם תיאור ההערה, בדומה ל:

        Annotations:         iam.gke.io/gcp-service-account: apigee-cassandra@my-project-id.iam.gserviceaccount.com
      6. אימות ההערה:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      הגדרת apigee-cassandra-restore חשבון שירות של Kubernetes

      1. מגדירים מחדש את משתנה הסביבה KSA_NAME:

        KSA_NAME="apigee-cassandra-restore"
      2. קישור תפקיד IAM:
        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 \
          --project $PROJECT_ID
      3. מוסיפים הערה לחשבון השירות:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com

      הגדרת apigee-cassandra-schema-setup חשבון שירות של Kubernetes

      1. מגדירים מחדש את משתנה הסביבה KSA_NAME:

        KSA_NAME="apigee-cassandra-schema-setup-service-account-name-sa"
        לדוגמה: apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa.
      2. קישור תפקיד IAM:

        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 \
          --project $PROJECT_ID
      3. מוסיפים הערה לחשבון השירות:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. אימות ההערה:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      הגדרת apigee-cassandra-schema-val חשבון שירות של Kubernetes

      1. מגדירים מחדש את משתנה הסביבה KSA_NAME:

        KSA_NAME="apigee-cassandra-schema-val-service-account-name"
        לדוגמה: apigee-cassandra-schema-val-hybrid-example-project-123abcd.
      2. קישור תפקיד IAM:
        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 \
          --project $PROJECT_ID
      3. מוסיפים הערה לחשבון השירות:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. אימות ההערה:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      הגדרת apigee-cassandra-user-setup חשבון שירות של Kubernetes

      1. מגדירים מחדש את משתנה הסביבה KSA_NAME:

        KSA_NAME="apigee-cassandra-user-setup-service-account-name-sa"
        לדוגמה: apigee-cassandra-user-setup-hybrid-example-project-123abcd-sa.
      2. קישור תפקיד IAM:
        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 \
          --project $PROJECT_ID
      3. מוסיפים הערה לחשבון השירות:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. אימות ההערה:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      הגדרת apigee-datastore-default-sa חשבון שירות של Kubernetes

      1. מגדירים מחדש את משתנה הסביבה KSA_NAME:

        KSA_NAME="apigee-datastore-default-sa"
      2. קישור תפקיד IAM:
        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 \
          --project $PROJECT_ID
      3. מוסיפים הערה לחשבון השירות:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. אימות ההערה:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Apigee Connect

      מגדירים את Workload Identity לרכיב Apigee Connect.

      Non-prod

      1. מגדירים את משתנה הסביבה KSA_NAME:

        KSA_NAME="apigee-connect-agent-service-account-name-sa"
        לדוגמה: apigee-connect-agent-hybrid-example-project-123abcd-sa.
      2. קישור תפקיד IAM:
        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 \
          --project $PROJECT_ID
      3. מוסיפים הערה לחשבון השירות:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. אימות ההערה:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      ייצור

      1. מגדירים את משתני הסביבה KSA_NAME ו-GSA_NAME:
        GSA_NAME="apigee-mart"
        KSA_NAME="apigee-connect-agent-service-account-name-sa"
        לדוגמה: apigee-connect-agent-hybrid-example-project-123abcd-sa.
      2. קישור תפקיד IAM:
        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 \
          --project $PROJECT_ID
      3. מוסיפים הערה לחשבון השירות:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. אימות ההערה:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • MART

      מגדירים את Workload Identity לרכיב MART.

      Non-prod

      1. מגדירים את משתנה הסביבה KSA_NAME:

        KSA_NAME="apigee-mart-service-account-name-sa"
        לדוגמה: apigee-mart-hybrid-example-project-123abcd-sa.
      2. קישור תפקיד IAM:
        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 \
          --project $PROJECT_ID
      3. מוסיפים הערה לחשבון השירות:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. אימות ההערה:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      ייצור

      1. מגדירים את משתני הסביבה KSA_NAME ו-GSA_NAME:

        GSA_NAME="apigee-mart"
        KSA_NAME="apigee-mart-service-account-name-sa"
        לדוגמה: apigee-mart-hybrid-example-project-123abcd-sa.
      2. קישור תפקיד IAM:
        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 \
          --project $PROJECT_ID
      3. מוסיפים הערה לחשבון השירות:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. אימות ההערה:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • מדדים של Apigee

      מגדירים את Workload Identity לרכיב המדדים של Apigee.

      Non-prod

      1. מגדירים את משתני הסביבה KSA_NAME:

        KSA_NAME="apigee-metrics-sa"
      2. קישור תפקיד IAM:
        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 \
          --project $PROJECT_ID
      3. מוסיפים הערה לחשבון השירות:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. אימות ההערה:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      ייצור

      1. מגדירים את משתני הסביבה KSA_NAME ו-GSA_NAME:

        GSA_NAME="apigee-metrics"
        KSA_NAME="apigee-metrics-sa"
      2. קישור תפקיד IAM:
        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 \
        --project $PROJECT_ID
      3. מוסיפים הערה לחשבון השירות:
        kubectl annotate serviceaccount \
        --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. אימות ההערה:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • UDCA (org-level)

      מגדירים את Workload Identity לרכיב UDCA ברמת הארגון.

      ה-UDCA מיושם בהיקפים של רמת הארגון ורמת הסביבה. לכן, יש שני חשבונות שירות נפרדים של Kubernetes ל-UDCA, אחד לכל היקף. אפשר להבחין ביניהם לפי שם החשבון. החשבון env-scope כולל את שם הסביבה בשם של חשבון השירות. לדוגמה:

      • ברמת הארגון: apigee-udca-my-project-id-123abcd-sa כאשר my-project-id הוא מזהה הפרויקט.
      • ברמת הסביבה: apigee-udca-my-project-id-my-env-234bcde-sa כאשר my-env הוא שם הסביבה.

      Non-prod

      1. מגדירים את משתני הסביבה KSA_NAME:

        KSA_NAME="apigee-udca-service-account-name-sa"
        לדוגמה: apigee-udca-hybrid-example-project-123abcd-sa.
      2. קישור תפקיד IAM:
          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 \
            --project $PROJECT_ID
      3. מוסיפים הערה לחשבון השירות:
          kubectl annotate serviceaccount \
            --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. אימות ההערה:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      ייצור

      1. מגדירים את משתני הסביבה KSA_NAME ו-GSA_NAME:

        GSA_NAME="apigee-udca"
        KSA_NAME="apigee-udca-service-account-name-sa"
        לדוגמה: apigee-udca-hybrid-example-project-123abcd-sa.
      2. קישור תפקיד IAM:
        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 \
          --project $PROJECT_ID
      3. מוסיפים הערה לחשבון השירות:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. אימות ההערה:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Apigee Watcher

      מגדירים את Workload Identity לרכיב Apigee Watcher.

      Non-prod

      1. מגדירים את משתני הסביבה KSA_NAME:

        KSA_NAME="apigee-watcher-service-account-name-sa"
        לדוגמה: apigee-watcher-hybrid-example-project-123abcd-sa.
      2. קישור תפקיד IAM:
        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 \
          --project $PROJECT_ID
      3. מוסיפים הערה לחשבון השירות:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. אימות ההערה:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      ייצור

      1. מגדירים את משתני הסביבה KSA_NAME ו-GSA_NAME:

        GSA_NAME="apigee-watcher"
        KSA_NAME="apigee-watcher-service-account-name-sa"
        לדוגמה: apigee-watcher-hybrid-example-project-123abcd-sa.
      2. קישור תפקיד IAM:
        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 \
          --project $PROJECT_ID
      3. מוסיפים הערה לחשבון השירות:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. אימות ההערה:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • זמן ריצה

      מגדירים את Workload Identity לרכיב Apigee Runtime.

      Non-prod

      1. מגדירים את משתני הסביבה KSA_NAME:

        KSA_NAME="apigee-runtime-env-level-service-account-name-sa"
        לדוגמה: apigee-runtime-hybrid-example-project-example-env-234bcde-sa.
      2. קישור תפקיד IAM:
        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 \
          --project $PROJECT_ID
      3. מוסיפים הערה לחשבון השירות:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. אימות ההערה:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      ייצור

      1. מגדירים את משתני הסביבה KSA_NAME ו-GSA_NAME:

        GSA_NAME="apigee-runtime"
        KSA_NAME="apigee-runtime-env-level-service-account-name-sa"
        לדוגמה: apigee-runtime-hybrid-example-project-example-env-234bcde-sa.
      2. קישור תפקיד IAM:
        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 \
          --project $PROJECT_ID
      3. מוסיפים הערה לחשבון השירות:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. אימות ההערה:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Synchronizer

      מגדירים את Workload Identity לרכיב Synchronizer.

      Non-prod

      1. מגדירים את משתני הסביבה KSA_NAME:

        KSA_NAME="apigee-synchronizer-env-level-service-account-name-sa"
        לדוגמה: apigee-synchronizer-hybrid-example-project-example-env-234bcde-sa.
      2. קישור תפקיד IAM:
        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 \
          --project $PROJECT_ID
      3. מוסיפים הערה לחשבון השירות:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. אימות ההערה:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      ייצור

      1. מגדירים את משתני הסביבה KSA_NAME ו-GSA_NAME:

        GSA_NAME="apigee-synchronizer"
        KSA_NAME="apigee-synchronizer-env-level-service-account-name-sa"
        לדוגמה: apigee-synchronizer-hybrid-example-project-example-env-234bcde-sa.
      2. קישור תפקיד IAM:
        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 \
          --project $PROJECT_ID
      3. מוסיפים הערה לחשבון השירות:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. אימות ההערה:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • UDCA (env-level)

      מגדירים את Workload Identity לרכיב UDCA ברמת הסביבה.

      Non-prod

      1. מגדירים את משתני הסביבה KSA_NAME:

        KSA_NAME="apigee-udca-env-level-service-account-name-sa"
        לדוגמה: apigee-udca-hybrid-example-project-example-env-234bcde-sa.
      2. קישור תפקיד IAM:
        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 \
          --project $PROJECT_ID
      3. מוסיפים הערה לחשבון השירות:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. אימות ההערה:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      ייצור

      1. מגדירים את משתני הסביבה KSA_NAME ו-GSA_NAME:

        GSA_NAME="apigee-udca"
        KSA_NAME="apigee-udca-env-level-service-account-name-sa"
        לדוגמה: apigee-udca-hybrid-example-project-example-env-234bcde-sa.
      2. קישור תפקיד IAM:
        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 \
          --project $PROJECT_ID
      3. מוסיפים הערה לחשבון השירות:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. אימות ההערה:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
  2. אופציונלי: מוחקים את קובצי המפתח של חשבון השירות שהורדו.

    אם יצרתם את חשבונות השירות של Google באמצעות הכלי create-service-account, יכול להיות שהכלי יצר מפתחות של חשבונות שירות והוריד את קובצי המפתחות .json. כשמשתמשים ב-Workload Identity ב-GKE, לא צריך את קובצי המפתח האלה.

    כדי למחוק את קובצי המפתחות, מריצים את הפקודה הבאה:

    rm $HYBRID_FILES/service-accounts/*.json

אימות של Workload Identity

  1. (אופציונלי) אפשר לראות את הסטטוס של חשבונות השירות של Kubernetes בדף Kubernetes: Workloads Overview ב- Google Cloud console.

    כניסה לדף Workloads

  2. כדי לבדוק שוב את סטטוס הפריסה באמצעות apigeectl check-ready:
    ${APIGEECTL_HOME}/apigeectl check-ready -f ${HYBRID_FILES}/overrides/overrides.yaml
(הבא) שלב 1: חשיפת Apigee ingress 2