דרישות מוקדמות לאשכולות GKE ב-Google Cloud

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

הפעלת איחוד זהויות של עומסי עבודה ל-GKE

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

כדי להשתמש בתכונה הזו, צריך לוודא שאיחוד שירותי אימות הזהות של עומסי עבודה ב-GKE מופעל באשכול לפני הרישום. רישום של אשכול GKE ב-Workload Identity Federation של Fleet בלי להפעיל את Workload Identity Federation ל-GKE באשכול עלול לגרום לחוסר עקביות באופן שבו עומסי עבודה באשכול מאמתים את הזהות, וההגדרה הזו לא נתמכת. בקטרי Autopilot, איחוד זהויות של עומסי עבודה ל-GKE מופעל כברירת מחדל.

gcloud

כדי לבדוק אם איחוד זהויות של עומסי עבודה ל-GKE מופעל באשכול, מריצים את הפקודה הבאה כדי להציג את מאגר הזהויות של עומסי העבודה באשכול. אם עדיין לא ציינתם אזור או אזור ברירת מחדל ל-gcloud, אתם צריכים לציין את הדגל --region או --zone כשאתם מריצים את הפקודה הזו.

gcloud container clusters describe CLUSTER_NAME --format="value(workloadIdentityConfig.workloadPool)"

מחליפים את מה שכתוב בשדות הבאים:

  • CLUSTER_NAME: name של אשכול GKE.

אם אתם רואים תוצאה שדומה לתוצאה הבאה, סימן שאיחוד זהויות של עומסי עבודה ל-GKE כבר מופעל באשכול:

GKE_PROJECT_ID.svc.id.goog

אם לא מוצגות תוצאות, סימן שאיחוד זהויות של עומסי עבודה ל-GKE לא מופעל. פועלים לפי ההוראות במאמר בנושא הפעלת איחוד זהויות של עומסי עבודה ל-GKE.

המסוף

כדי לבדוק אם איחוד זהויות של עומסי עבודה ל-GKE מופעל באשכול:

  1. עוברים לדף Google Kubernetes Engine במסוף Google Cloud .

    מעבר אל Google Kubernetes Engine

  2. ברשימת האשכולות, לוחצים על שם האשכול.

  3. בדף פרטי האשכול, בקטע Security, מוודאים שWorkload Identity מופיע כEnabled.

אם Workload Identity מושבת ואתם רוצים להפעיל את התכונה הזו:

  1. בדף הפרטים של האשכול, לוחצים על עריכת Workload Identity.
  2. בתיבת הדו-שיח Edit Workload Identity, מסמנים את התיבה Enable Workload Identity.
  3. לוחצים על שמירת השינויים.

מתן הרשאות לרישום אשכול בפרויקט אחר

כדי לרשום אשכול GKE לצי בתוך הפרויקט שלו, לא נדרשות הרשאות מיוחדות מעבר לאלה שמתוארות במאמר הענקת הרשאות גישה. עם זאת, אם רוצים לרשום אשכול GKE מפרויקט משלו (GKE_PROJECT) ל-Fleet בפרויקט אחר (FLEET_HOST_PROJECT), לחשבון סוכן השירות gcp-sa-gkehub בפרויקט FLEET_HOST_PROJECT צריך להיות התפקיד gkehub.serviceAgent בפרויקט GKE_PROJECT. התפקיד הזה מעניק לחשבון השירות את ההרשאות לניהול משאבי האשכול באותו פרויקט.

כדי לבדוק אם לחשבון השירות של פרויקט המארח של צי הרכבים gcp-sa-gkehub יש את התפקיד הנדרש בפרויקט של האשכול, אפשר להשתמש ב-CLI של gcloud או במסוף Google Cloud , באופן הבא.

gcloud

מריצים את הפקודה הבאה:

gcloud projects get-iam-policy GKE_PROJECT_ID | grep gcp-sa-gkehub

כאשר GKE_PROJECT_ID הוא מזהה הפרויקט של האשכול.

אם לפרויקט המארח של ה-Fleet‏ gcp-sa-gkehub יש את התפקידים הנדרשים בפרויקט של האשכול, הוא אמור להופיע בפלט בפורמט service-[FLEET_HOST-PROJECT-NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com. לדוגמה:

- members:
  - serviceAccount:service-1234567890@gcp-sa-gkehub.iam.gserviceaccount.com
  role: roles/gkehub.serviceAgent

המסוף

  1. אחרי שבוחרים את הפרויקט של האשכול, עוברים לדף IAM & Admin במסוף Google Cloud .

    כניסה לדף IAM & ניהול חשבון ארגוני

  2. כדי לראות את כללי המדיניות המלאים של ההרשאות, כולל סוכני שירות, מסמנים את התיבה Include Google-provided role grants.

אם לחשבון השירות של פרויקט המארח של ה-Fleet‏ gcp-sa-gkehub יש את התפקידים הנדרשים בפרויקט של האשכול, הוא אמור להופיע ברשימה הזו בתבנית service-[FLEET_HOST-PROJECT-NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com.

אם סוכן השירות לא מופיע במדיניות ההרשאה של הפרויקט ב-IAM, צריך לבצע את הפעולות הבאות כדי לעדכן את ההרשאות הנדרשות:

gcloud

  1. כדי להקצות gcp-sa-gkehub את התפקיד gkehub.serviceAgent, קודם צריך לוודא שחשבון השירות הזה קיים בפרויקט המארח של צי הרכבים. אם רשמתם אשכולות בפרויקט הזה של Fleet בעבר, חשבון השירות הזה כבר אמור להתקיים. אפשר לבדוק את זה במדיניות ההרשאות של IAM בפרויקט המארח של צי המכונות:

    gcloud projects get-iam-policy FLEET_HOST_PROJECT_ID | grep gcp-sa-gkehub
    
  2. אם אתם צריכים ליצור את חשבון השירות gcp-sa-gkehub, מריצים את הפקודה הבאה:

    gcloud beta services identity create --service=gkehub.googleapis.com --project=FLEET_HOST_PROJECT_ID
    

    הפלט של הפקודה הזו צריך להיות:

    Service identity created: service-[FLEET_HOST_PROJECT_NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com
    
  3. מריצים את הפקודה הבאה כדי להעניק לחשבון השירות את התפקיד roles/gkehub.serviceAgent בשני הפרויקטים ואת התפקיד roles/gkehub.crossProjectServiceAgent בפרויקט של האשכול:

    GKE_PROJECT_ID=GKE_PROJECT_ID
    FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
    FLEET_HOST_PROJECT_NUMBER=$(gcloud projects describe "${FLEET_HOST_PROJECT_ID}" --format "value(projectNumber)")
    gcloud projects add-iam-policy-binding "${FLEET_HOST_PROJECT_ID}" \
      --member "serviceAccount:service-${FLEET_HOST_PROJECT_NUMBER}@gcp-sa-gkehub.iam.gserviceaccount.com" \
      --role roles/gkehub.serviceAgent
    gcloud projects add-iam-policy-binding "${GKE_PROJECT_ID}" \
      --member "serviceAccount:service-${FLEET_HOST_PROJECT_NUMBER}@gcp-sa-gkehub.iam.gserviceaccount.com" \
      --role roles/gkehub.serviceAgent
    gcloud projects add-iam-policy-binding "${GKE_PROJECT_ID}" \
      --member "serviceAccount:service-${FLEET_HOST_PROJECT_NUMBER}@gcp-sa-gkehub.iam.gserviceaccount.com" \
      --role roles/gkehub.crossProjectServiceAgent
    

    where:

    • GKE_PROJECT_ID הוא Google Cloud מזהה הפרויקט של אשכול GKE.
    • FLEET_HOST_PROJECT_ID הוא מזהה הפרויקט ב- Google Cloud שבו רוצים לרשום את האשכולות. איך מוצאים את הערך הזה
  4. כדי לוודא שהתפקיד הוקצה, מריצים שוב את הפקודה הבאה:

    gcloud projects get-iam-policy GKE_PROJECT_ID
    

    אם אתם רואים את שם חשבון השירות יחד עם התפקידים gkehub.serviceAgent ו-gkehub.crossProjectServiceAgent, סימן שהוקצו קישורי התפקידים. לדוגמה:

    - members:
      - serviceAccount:service-[FLEET_HOST_PROJECT_NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com
      role: roles/gkehub.serviceAgent
    - members:
      - serviceAccount:service-[FLEET_HOST_PROJECT_NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com
      role: roles/gkehub.crossProjectServiceAgent
    

הגדרת חשבון שירות ל-Terraform

אם רוצים להשתמש ב-Terraform כדי לרשום אשכול Google Kubernetes Engine, צריך ליצור חשבון שירות ש-Terraform יכול להשתמש בו כדי לגשת אל Fleet API וליצור חברות.

gcloud

  1. יוצרים חשבון שירות באופן הבא:

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME --project=FLEET_HOST_PROJECT_ID
    
  2. מקשרים את תפקיד gkehub.admin ב-IAM לחשבון השירות כדי ש-Terraform יוכל להשתמש בו עם Fleet API:

    FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
    gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \
       --member="serviceAccount:SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \
       --role="roles/gkehub.admin"
    

    אם רוצים ליצור אשכול חדש באמצעות Terraform ואז לרשום אותו, צריך גם לקשר את התפקיד roles/container.admin לחשבון השירות כדי ש-Terraform יוכל להשתמש בחשבון השירות הזה כדי לגשת ל-GKE API וליצור אשכול.

    FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
    gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \
       --member="serviceAccount:SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \
       --role="roles/container.admin"
    

    מחליפים את מה שכתוב בשדות הבאים:

    • FLEET_HOST_PROJECT_ID הוא מזהה הפרויקט ב- Google Cloud שבו רוצים לרשום את האשכולות. איך מוצאים את הערך הזה
    • SERVICE_ACCOUNT_NAME הוא השם המוצג שבחרתם עבור [חשבון השירות].
  3. מורידים את קובץ ה-JSON של המפתח הפרטי של חשבון השירות, כמו שמתואר במאמר יצירת חשבון שירות באמצעות gcloud. Google Cloud תצטרכו את הקובץ הזה כדי ליצור ולא לרשום אשכולות באמצעות Terraform.

הגדרת חשבון שירות ל-Config Connector

כדי להשתמש ב-Config Connector כדי לרשום אשכול GKE:

gcloud

  1. מוודאים שהתקנתם את התוסף Config Connector. צריכה להיות לכם גרסה של Config Connector מעל 1.47.0.

  2. פועלים לפי ההוראות של Config Connector כדי ליצור חשבון שירות.

  3. מבצעים קישור של תפקיד gkehub.admin ב-IAM לחשבון השירות הזה, כדי ש-Config Connector יוכל להשתמש בחשבון השירות הזה כדי לגשת ל-Fleet API:

    FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
    gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \
       --member="serviceAccount:SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \
       --role="roles/gkehub.admin"
    

    אם רוצים ליצור אשכול חדש באמצעות Config Connector ואז לרשום אותו, צריך גם לקשר את התפקיד roles/container.admin לחשבון השירות, כדי שבקר Config Connector יוכל להשתמש בחשבון השירות הזה כדי לגשת ל-GKE API וליצור אשכול.

    FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
    gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \
       --member="serviceAccount:SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \
       --role="roles/container.admin"
    

    מחליפים את מה שכתוב בשדות הבאים:

    • FLEET_HOST_PROJECT_ID הוא מזהה הפרויקט ב- Google Cloud שבו רוצים לרשום את האשכולות. איך מוצאים את הערך הזה
    • SERVICE_ACCOUNT_NAME הוא השם המוצג שבחרתם עבור [חשבון השירות].
  4. פועלים לפי ההוראות להגדרת Config Connector כדי להגדיר את Config Connector עם חשבון השירות הזה.

מה השלב הבא?

פועלים לפי ההוראות כדי לרשום אשכול.