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

במאמר הבא מוסבר איך לאמת את שירותי Knative Serving באמצעות איחוד זהויות של עומסי עבודה ל-GKE כדי לגשת אל ממשקי API שלGoogle Cloud כמו Compute APIs,‏ Storage and Database APIs או Machine Learning APIs.

כדי לאמת את שירותי Knative serving, צריך:

  1. הפעלת איחוד זהויות של עומסי עבודה ל-GKE באשכול
  2. הגדרת ההרשאות
  3. קישור של חשבון שירות ב-Kubernetes (KSA) אל חשבון שירות ב-Google (GSA)

אחרי שמבצעים את השלבים האלה, אפשר לפרוס שירות חדש של Knative Serving שמשתמש בזהות שיצרתם.

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

כדי להגדיר איחוד שירותי אימות הזהות של עומסי עבודה ל-GKE עם Knative serving, אפשר להגדיר איחוד שירותי אימות הזהויות של עומסי עבודה ב-Fleet במקום להשתמש בקובץ JSON של חשבון שירות Google Cloud .

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

כדי להפעיל מדדים, כמו דיווח על מספר הבקשות או על זמן האחזור של הבקשות ב-Google Cloud Observability, צריך להעניק הרשאות כתיבה ל-Cloud Monitoring. לדוגמה, אפשר להעניק את התפקיד 'כותב מדדים של Monitoring' (roles/monitoring.metricWriter) לחשבון השירות של Google שמשויך ל-Knative serving, כי הוא כולל את ההרשאות הנדרשות לכתיבת נתוני מעקב. מידע נוסף על יצירת חשבונות שירות של Google זמין במאמר שימוש בחשבונות שירות.

קישור חשבונות שירות

צריך להגדיר קשר בין חשבון שירות של Kubernetes‏ (KSA) לבין חשבון שירות של Google‏ (GSA), כדי שחשבון ה-KSA יפעל כחשבון GSA. כל עומס עבודה שפועל בתור KSA שאתם מקשרים, מאומת אוטומטית בתור GSA כשניגשים ל-APIs. Google Cloud ה-KSA שאתם מקשרים צריך להיות קיים באשכול ובמרחב השמות של שירות Knative serving שבו אתם רוצים להשתמש באיחוד זהויות של עומסי עבודה ל-GKE. ה-GSA יכול להיות שייך ל Google Cloud פרויקט שונה מGoogle Cloud הפרויקט שבו נמצא האשכול.

  1. אם אין GSA, יוצרים אחד. אחרת, מדלגים לשלב הבא. אתם יכולים ליצור GSA לשימוש ב-Knative serving בכל פרויקט Google Cloud בארגון שלכם, ואז להשתמש בו מתוךGoogle Cloud הפרויקט שבו פועלים שירותי Knative serving.

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

    gcloud iam service-accounts create GSA_NAME

    מחליפים את GSA_NAME בשם של חשבון השירות החדש ב-Google.

    מידע נוסף על שימוש בחשבונות שירות של Google עם שירותי Knative זמין במאמר שימוש בחשבונות שירות.

  2. מוודאים שלחשבון GSA שלכם יש את תפקידי ה-IAM שאתם צריכים. אתם יכולים להקצות תפקידים נוספים באמצעות הפקודה הבאה:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com" \
        --role "ROLE_NAME"

    מחליפים את:

    • PROJECT_ID: עם Google Cloud מזהה הפרויקט שבו נמצא חשבון השירות של Google.
    • GSA_NAME בשם של חשבון השירות שלכם ב-Google.
    • ROLE_NAME עם תפקיד ה-IAM שרוצים להקצות ל-GSA, כמו roles/monitoring.metricWriter.
  3. אם לא קיים חשבון שירות של Kubernetes, יוצרים אחד באותו מרחב שמות של Kubernetes כמו שירות Knative Serving. אחרת, מדלגים לשלב הבא:

    kubectl create serviceaccount --namespace K8S_NAMESPACE KSA_NAME
  4. מקשרים את חשבונות השירות של Kubernetes ושל Google כדי ליצור את הזהות, ואז פורסים אותה באשכול:

    1. כדי לאפשר ל-KSA להתחזות ל-GSA, צריך ליצור קישור של מדיניות IAM בין השניים.

      gcloud iam service-accounts add-iam-policy-binding \
      --role roles/iam.workloadIdentityUser \
      --member "serviceAccount:PROJECT_ID.svc.id.goog[K8S_NAMESPACE/KSA_NAME]" \
      GSA_NAME@GSA_PROJECT_ID.iam.gserviceaccount.com

      מחליפים את:

      • PROJECT_ID עם המזהה של הפרויקט Google Cloud של האשכול שבו נמצאים חשבון השירות של Kubernetes והשירותים של Knative serving.
      • K8S_NAMESPACE/KSA_NAME עם מרחב השמות והשם של חשבון השירות של Kubernetes.
      • GSA_NAME@GSA_PROJECT_ID עם השם של חשבון השירות של Google והמזהה של הפרויקט. Google Cloud אתם יכולים להשתמש בכל חשבון שירות של Google בארגון שלכם. במאמר הצגת רשימה של חשבונות שירות מוסבר איך לראות את חשבונות השירות של Google.
    2. מוסיפים את ההערה iam.gke.io/gcp-service-account=GSA_NAME@GSA_PROJECT_ID ל-KSA, באמצעות כתובת האימייל של GSA.

      kubectl annotate serviceaccount \
      --namespace K8S_NAMESPACE KSA_NAME \
       iam.gke.io/gcp-service-account=GSA_NAME@GSA_PROJECT_ID.iam.gserviceaccount.com

      מחליפים את:

      • K8S_NAMESPACE/KSA_NAME עם מרחב השמות והשם של חשבון השירות של Kubernetes שעבורו יצרתם קישור.
      • GSA_NAME@GSA_PROJECT_ID עם השם של חשבון השירות של Google והמזהה של Google Cloud הפרויקט שעבורו יצרתם את הקישור.

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

פורסים שירות חדש של Knative serving שמשתמש באיחוד זהויות של עומסי עבודה ל-GKE שיצרתם.

המסוף

  1. נכנסים אל Knative serving במסוף Google Cloud :

    מעבר אל Knative serving

  2. אם אתם מגדירים שירות חדש שאתם פורסים, לוחצים על יצירת שירות. אם אתם מגדירים שירות קיים, לוחצים על השירות ואז על Edit & Deploy New Revision (עריכה ופריסה של עדכון חדש).

  3. בקטע הגדרות מתקדמות, לוחצים על מאגר תגים.

  4. לוחצים על התפריט הנפתח Service account ובוחרים את חשבון השירות הרצוי.

  5. לוחצים על הבא כדי להמשיך לקטע הבא.

  6. בקטע Configure how this service is triggered (הגדרה של אופן הפעלת השירות), בוחרים את סוג הקישוריות שרוצים להשתמש בו כדי להפעיל את השירות.

  7. לוחצים על יצירה כדי לפרוס את התמונה ב-Knative serving ומחכים עד שהפריסה תסתיים.

שורת הפקודה

  • בשירותים קיימים, מגדירים את חשבון השירות של Kubernetes על ידי הרצת הפקודה gcloud run services update עם הפרמטרים הבאים:

    gcloud run services update SERVICE --service-account KSA_NAME

    מחליפים את:

    • SERVICE בשם של השירות שלכם ב-Knative serving.
    • KSA_NAME עם חשבון השירות של Kubernetes שבו השתמשתם כדי ליצור את זהות עומס העבודה.
  • בשירותים חדשים, מגדירים את חשבון השירות של Kubernetes על ידי הרצת הפקודה gcloud run deploy עם הפרמטר --service-account:

    gcloud run deploy --image IMAGE_URL --service-account KSA_NAME

    מחליפים את:

    • IMAGE_URL עם הפניה לקובץ אימג' של קונטיינר, לדוגמה, gcr.io/cloudrun/hello.
    • KSA_NAME עם חשבון השירות של Kubernetes שבו השתמשתם כדי ליצור את זהות עומס העבודה.

YAML

אפשר להוריד את ההגדרה של שירות קיים לקובץ YAML באמצעות הפקודה gcloud run services describe והדגל --format=export. אחר כך תוכלו לשנות את קובץ ה-YAML ולפרוס את השינויים האלה באמצעות הפקודה gcloud run services replace. חשוב לוודא שמשנים רק את המאפיינים שצוינו.

  1. מורידים את ההגדרה של השירות לקובץ בשם service.yaml בסביבת העבודה המקומית:

    gcloud run services describe SERVICE --format export > service.yaml

    מחליפים את SERVICE בשם של שירות Knative serving.

  2. מעדכנים את המאפיין serviceAccountName: בקובץ המקומי:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          serviceAccountName: KSA_NAME

    החלפה

    • SERVICE בשם של השירות שלכם ב-Knative serving.
    • KSA_NAME עם חשבון השירות של Kubernetes שבו השתמשתם כדי ליצור את זהות עומס העבודה.
  3. מריצים את הפקודה הבאה כדי לפרוס את ההגדרה לשירות Knative Serving:

    gcloud run services replace service.yaml

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

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

השלבים הבאים

איך מנהלים את הגישה לשירותים.