שליטה בהוספה של עומסי עבודה עם הרשאות מיוחדות במצב Autopilot

כדי להריץ עומסי עבודה בעלי הרשאות במצב אוטומטי ב-Google Kubernetes Engine‏ (GKE), צריך להתקין באשכולות רשימות היתרים לעומסי העבודה האלה. במאמר הזה מוסבר איך לבצע את הפעולות הבאות:

  • להגדיר את GKE כך שיריץ רק עומסי עבודה ספציפיים עם הרשאות במצב אוטומטי.
  • התקנת רשימות היתרים לעומסי עבודה עם הרשאות.

המסמך הזה מיועד לבעלי התפקידים הבאים:

  • מהנדסי אבטחה שרוצים לוודא שעומסי עבודה של צד שלישי צריכים רשימת היתרים כדי לפעול באשכולות, ושהם מגיעים ממקורות שאושרו על ידי GKE.
  • מהנדסי פלטפורמה שרוצים להפעיל עומסי עבודה של צד שלישי באשכולות כדי לאפשר לצוותי האפליקציות להמשיך בעבודה.

אתם כבר אמורים להכיר את המושגים הבאים:

מידע על עומסי עבודה עם הרשאות ב-Autopilot

במצב אוטומטי, נאכפת קבוצת אילוצים שמוגדרת כברירת מחדל על עומסי העבודה כדי לשפר את מצב האבטחה. כדי להריץ עומסי עבודה ספציפיים עם הרשאות, אתם יכולים לשנות את האילוצים האלה על ידי התקנת רשימות היתרים שתואמות לעומסי העבודה האלה. כברירת מחדל, Autopilot מאפשר להתקין רשימות היתרים משותפים של Autopilot ומפרויקטים ספציפיים בקוד פתוח. לקוחות GKE שעומדים בדרישות יכולים גם ליצור רשימות היתרים לעומסי עבודה עם הרשאות בבעלות הלקוח, שהם מעלים לקטגוריות של Cloud Storage.

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

  1. מגדירים את האשכול כך שיאפשר התקנה של רשימות היתרים מנתיבים ספציפיים. כברירת מחדל, יש תמיכה בכל רשימות ההיתרים של שותפי Autopilot ושל פרויקטים מאושרים בקוד פתוח.
  2. יוצרים AllowlistSynchronizer באשכול שמתקין את רשימת ההיתרים ומעדכן אותה.

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

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

לפני שמתחילים

לפני שמתחילים, חשוב לוודא שביצעתם את המשימות הבאות:

  • מפעילים את Google Kubernetes Engine API.
  • הפעלת Google Kubernetes Engine API
  • כדי להשתמש ב-Google Cloud CLI למשימה הזו, מתקינים ואז מאתחלים את ה-CLI של gcloud. אם כבר התקנתם את ה-CLI של gcloud, הריצו את הפקודה gcloud components update כדי לקבל את הגרסה העדכנית. יכול להיות שבגרסאות קודמות של ה-CLI של gcloud אי אפשר להריץ את הפקודות שבמסמך הזה.

דרישות

  • כדי להשתמש במשאב המותאם אישית AllowlistSynchronizer, צריך את גרסה 1.32.2-gke.1652000 או גרסה חדשה יותר של GKE.
  • אתם צריכים לדעת איזה עומס עבודה עם הרשאות אתם רוצים להריץ באשכול.
  • כדי לשנות את הגדרת הנתיב של רשימת ההיתרים באשכול, צריך להפעיל באשכול את GKE בגרסה 1.35 ואילך.

הגדרת נתיבים לרשימת ההיתרים של אשכול

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

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

  2. כדי לשלוט במקורות המאושרים ברשימת ההיתרים של אשכול, משתמשים בדגל --autopilot-privileged-admission כשיוצרים או מעדכנים אשכול Autopilot או אשכול רגיל, כמו בפקודה הבאה:

    gcloud container clusters create-auto CLUSTER_NAME \
        --location=LOCATION \
        --autopilot-privileged-admission=ALLOWLIST1_PATH,ALLOWLIST2_PATH,...
    

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

    • ‫CLUSTER_NAME: שם לאשכול החדש.
    • ‫LOCATION: המיקום של מישור הבקרה של האשכול, למשל us-central1.
    • ‫ALLOWLIST1_PATH,ALLOWLIST2_PATH,...: רשימה מופרדת בפסיקים של נתיבים לקבצים או לספריות ברשימת ההיתרים. לדוגמה, gke://*,gs://my-agent/privileged-logging-agent.yaml. אפשר גם להשבית את ההתקנה של רשימת ההיתרים מכל מקור על ידי ציון מחרוזת ריקה ("").

אם מעדכנים אשכול קיים בלי לציין את הדגל --autopilot-privileged-admission, הגדרת הנתיב הקיימת של אותו אשכול לא משתנה. לא צריך לציין את הדגל הזה בכל פעם שמעדכנים אשכול.

אחרי שיוצרים או מעדכנים את האשכול, אפשר להתקין רשימות היתרים מהנתיבים שצוינו על ידי יצירת AllowlistSynchronizers.

יצירת AllowlistSynchronizer חדש

כדי להריץ עומס עבודה עם הרשאות, מוסיפים את הנתיב לקובץ רשימת ההיתרים המתאים למפרט AllowlistSynchronizer בקובץ YAML. לאחר מכן פורסים את AllowlistSynchronizer באשכול.

  1. בכלי לעריכת טקסט, יוצרים קובץ YAML חדש.
  2. מוסיפים את התוכן הבא לקובץ ה-YAML:

    apiVersion: auto.gke.io/v1
    kind: AllowlistSynchronizer
    metadata:
      name: ALLOWLIST_SYNCHRONIZER_NAME
    spec:
      allowlistPaths:
      - ALLOWLIST1_PATH
      - ALLOWLIST2_PATH
    

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

    • ‫ALLOWLIST_SYNCHRONIZER_NAME: השם של הסנכרון החדש. בוחרים שם תיאורי שמזהה את עומס העבודה או את הצוות שרשימת ההיתרים תומכת בהם.
    • ‫ALLOWLIST1_PATH, ALLOWLIST2_PATH, ...: רשימת נתיבים לקבצים או לספריות שרוצים להתקין, כמו בדוגמה הבאה לרשימות היתרים שאושרו על ידי GKE:

      allowlistPaths:
      - Gke-Org/accelerators/*
      - Wiz/wiz-sensor/v1/wiz-sensor-v1.yaml
      

      או בדוגמה הבאה לרשימות היתרים בבעלות הלקוח:

      allowlistPaths:
      - my-agent/log-collector/*
      - my-agent/privileged-logging-agent.yaml
      

      הגדרת האשכול צריכה לתמוך בנתיבים שציינתם, כמו שמתואר בקטע הגדרת נתיבים לרשימת ההיתרים של אשכול. בנוסף, כל AllowlistSynchronizer חייב להכיל רק רשימות היתרים שאושרו על ידי GKE, או רק רשימות היתרים בבעלות הלקוח.

  3. אם אתם מתקינים רשימות היתרים מ קטגוריה של Cloud Storage שבבעלות הלקוח, הוסיפו את השדות spec.projectNumber ו-spec.bucketName ל-AllowlistSynchronizer. לפרטים נוספים, ראו AllowlistSynchronizer CustomResourceDefinition.

  4. פורסים את קובץ ה-YAML באשכול:

    kubectl apply -f PATH_TO_YAML_FILE
    

    מחליפים את PATH_TO_YAML_FILE בנתיב לקובץ ה-YAML שיצרתם בשלב הקודם.

    הבקר AllowlistSynchronizer מתקין קובצי רשימת היתרים מהנתיבים שצוינו באשכול.

  5. מחכים עד שהסנכרון ידווח על סטטוס Ready:

    kubectl wait --for=condition=Ready allowlistsynchronizer/ALLOWLIST_SYNCHRONIZER_NAME \
        --timeout=60s
    

אפשר גם לשלב התקנה של רשימת היתרים ופריסה של עומסי עבודה עם הרשאות בצינור עיבוד הנתונים של אינטגרציה רציפה ופריסה רציפה (CI/CD). מגדירים את תהליך העבודה כך שימתין עד להתקנה של רשימת ההיתרים לפני פריסת עומס העבודה המתאים.

עדכון של AllowlistSynchronizer קיים

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

  • הבעלים של עומס העבודה מוסיפים קובץ רשימת היתרים חדש עם שם אחר.
  • אתם רוצים להוסיף רשימת היתרים חדשה של עומסי עבודה לסנכרון קיים שמקבץ רשימות היתרים קשורות.
  • אתם רוצים להסיר רשימת היתרים מסנכרן כי אתם לא רוצים יותר להשתמש בעומס העבודה המתאים.

כדי לעדכן אובייקט AllowlistSynchronizer קיים:

  1. מציגים את רשימת הסנכרונים הקיימים באשכול:

    kubectl get allowlistsynchronizer
    
  2. פותחים את המפרט של הסנכרון שרוצים לעדכן בכלי לעריכת טקסט.

  3. מעדכנים את השדה spec.allowlistPaths כדי להוסיף, לשנות או להסיר נתיבי קבצים מרשימת ההיתרים.

  4. שומרים וסוגרים את הכלי לעריכת טקסט.

  5. מחילים את ההגדרות המעודכנות על האשכול:

    kubectl apply -f PATH_TO_YAML_FILE
    

    מחליפים את PATH_TO_YAML_FILE בנתיב לקובץ ה-YAML שעדכנתם בשלב הקודם.

כשפורסים הגדרה מעודכנת של סנכרון, הערך בשדה managedAllowlistStatus.generation בסטטוס של האובייקט AllowlistSynchronizer גדל באחד. לאחר מכן, הבקר AllowlistSynchronizer מחיל את השינויים.

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

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

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

kubectl get allowlistsynchronizer ALLOWLIST_SYNCHRONIZER_NAME -o yaml

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

...
status:
  conditions:
  - type: Ready
    status: "False"
    reason: "SyncError"
    message: "some allowlists failed to sync: example-allowlist-1.yaml"
    lastTransitionTime: "2024-10-12T10:00:00Z"
    observedGeneration: 2
  managedAllowlistStatus:
    - filePath: "gs://path/to/example-allowlist-2.yaml"
      generation: 1
      phase: Installed
      lastSuccessfulSync: "2024-10-10T10:00:00Z"
    - filePath: "gs://path/to/example-allowlist-1.yaml"
      phase: Failed
      lastError: "Initial install failed: invalid contents"
      lastSuccessfulSync: "2024-10-08T10:00:00Z"

בפלט לדוגמה, הסנכרון של רשימת ההיתרים example-allowlist-1.yaml נכשל, ורשימת ההיתרים example-allowlist-2.yaml הותקנה בהצלחה. תיאור של השדות האלה מופיע בקטע הסטטוס של AllowlistSynchronizer.

איך בודקים אם יש רשימת היתרים באשכול

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

kubectl get workloadallowlist

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

פריסת עומס העבודה עם הרשאות היתר

אחרי שרשימת ההיתרים הותקנה בהצלחה, אפשר לפרוס את עומס העבודה התואם באשכול. הבעלים של עומס העבודה צריך גם לספק לכם הוראות להתקנה של עומס העבודה. רשימה של שותפי Autopilot וקישורים למסמכי התיעוד שלהם מופיעה במאמר שותפי Autopilot.

שימוש במאגרי תמונות פרטיים

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

  • תקציר ה-SHA-256 של קובץ האימג' המשוכפל צריך להתאים לתקציר קובץ האימג' של עומס העבודה שזמין באופן ציבורי.
  • תקציר התמונה SHA-256 שאתם מציינים חייב להיות קיים באובייקט WorkloadAllowlist שמסונכרן עם האשכול.

אם עומס העבודה תומך בתמונות מראה, המפרט של רשימת ההיתרים של עומס העבודה הזה מכיל רשימה של תקצירי תמונות בשדה containers.imageDigests במפרט של רשימת ההיתרים של עומס העבודה הזה. בדרך כלל, בשדה הזה יש תקציר נפרד לכל גרסה זמינה של קובץ האימג' של הקונטיינר. כדי לראות את רשימת תקצירי התמונות:

  1. מוודאים שרשימת ההיתרים קיימת באשכול.
  2. מקבלים את המפרט של רשימת ההיתרים המותקנת:

    kubectl get workloadallowlist ALLOWLIST_NAME -o yaml
    

    מחליפים את ALLOWLIST_NAME בשם של רשימת ההיתרים המותקנת. לדוגמה, company-name-solution-v1.0.0.

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

    # lines omitted for clarity
    - containerName: pause-container1
      imageDigests:
      - cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
      - 932ea160d395f3d7f76c0c17a52a63c4cfe1836a900f1058b6bc20b16fd10d23
    

    אם הפלט לא כולל שדה imageDigests, או אם התקציר של הגרסה שבה אתם רוצים להשתמש לא מופיע ברשימה, פנו ישירות לבעלים של עומס העבודה ובקשו ממנו לעדכן את רשימת ההיתרים שלו. אחרי שהבעלים של עומס העבודה מוסיפים תקצירי תמונות לרשימת ההיתרים, מסנכרן רשימת ההיתרים באשכול מתקין באופן אוטומטי את רשימת ההיתרים המעודכנת.

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

לדוגמה, שימו לב לתמונה הבאה במפרט של Pod שזמין באופן ציבורי של שותף:

...
  containers:
  - name: pause-container1
    image: partner-repo/pause1@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
    securityContext:
      privileged: true

אפשר להשתמש בתמונת מראה אם התקציר תואם לתקציר שזמין לכולם, כמו בדוגמה הבאה:

...
  containers:
  - name: pause-container1
    image: my-private-repo/pause1@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
    securityContext:
      privileged: true

אתם צריכים לכלול את תקציר SHA-256 בשדה התמונה, בדומה לדוגמה הקודמת. אם התקצירים לא תואמים, התמונה המועתקת לא תפעל. כדי לשמור על תקצירי התמונות כשאתם משכפלים תמונות של שותפים, כדאי להשתמש בכלים כמו crane,‏ ORAS או skopeo.

מחיקת עומס עבודה עם הרשאות

כדי להפסיק לאפשר לעומס עבודה עם הרשאות לפעול באשכולות, מסירים את הנתיב לרשימת ההיתרים המתאימה מ-AllowlistSynchronizer. הסנכרון מסיר את רשימת ההיתרים.

אם מוחקים אובייקט WorkloadAllowlist מהאשכול במקום לעדכן את הסנכרון, הסנכרון מתקין מחדש את רשימת ההיתרים. חשוב לוודא שהנתיב הוסר מ-AllowlistSynchronizer.

כדי להסיר רשימת היתרים:

  1. במניפסט ה-YAML של AllowlistSynchronizer שמנהל את רשימת ההיתרים, מסירים את הנתיב לרשימת ההיתרים שרוצים להסיר. הוראות מפורטות זמינות בקטע עדכון של AllowlistSynchronizer קיים.
  2. כדי לוודא שרשימת ההיתרים הוסרה, צריך לקבל רשימה של אובייקטים מסוג WorkloadAllowlist באשכול:

    kubectl get workloadallowlist
    

    מוודאים שרשימת ההיתרים שרציתם להסיר לא מופיעה בפלט.

  3. מוחקים את עומס העבודה מהאשכול. הוראות מפורטות מופיעות במאמרי העזרה של ספק עומס העבודה.

מניעת התקנה של רשימת היתרים באשכולות

כדי למנוע התקנה של רשימות היתרים של עומסי עבודה עם הרשאות באשכולות ספציפיים, מציינים מחרוזת ריקה ("") בדגל --autopilot-privileged-admission כשיוצרים או מעדכנים אשכול.

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

    gcloud container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --autopilot-privileged-admission=ALLOWLIST1_PATH,ALLOWLIST2_PATH,...
    

    מחליפים את ALLOWLIST1_PATH,ALLOWLIST2_PATH,... ברשימה מופרדת בפסיקים של נתיבים למקורות ברשימת ההיתרים. משמיטים את הנתיבים שרוצים להשבית.

  • כדי להשבית את כל רשימות ההיתרים באשכול קיים, מציינים מחרוזת ריקה בתור הנתיב המאושר:

    gcloud container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --autopilot-allowlist-paths=""
    

פתרון בעיות

אם הסנכרון או פריסת עומס העבודה נכשלים, עיינו במאמר פתרון בעיות בפריסת עומסי עבודה עם הרשאות ב-Autopilot.

המאמרים הבאים