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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

דרישות

  • המשאב המותאם אישית AllowlistSynchronizer דורש GKE מגרסה 1.32.2-gke.1652000 ואילך.
  • צריך לדעת איזה עומס עבודה עם הרשאות רוצים להריץ באשכול.
  • כדי לשנות את הגדרת הנתיב של רשימת ההיתרים באשכול, האשכול צריך להריץ 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, ...: רשימת נתיבים לקבצים או לספריות ברשימת ההיתרים שרוצים להתקין, כמו בדוגמה הבאה:

      allowlistPaths:
      - gke://*
      - gs://my-agent/privileged-logging-agent.yaml
      

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

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

    kubectl apply -f PATH_TO_YAML_FILE
    

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

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

  4. ממתינים עד שהכלי לסנכרון ידווח על סטטוס 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 גדל ב-1. לאחר מכן, בקר 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 הרשימה של כתובות ה-IP המותרות נכשל, וההתקנה של example-allowlist-2.yaml הרשימה של כתובות ה-IP המותרות הצליחה. תיאור של השדות האלה מופיע בקטע סטטוס של AllowlistSynchronizer.

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

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

kubectl get workloadallowlist

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

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

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

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

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

  • תקציר הגיבוב (digest) של 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

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

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

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

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

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

  1. במניפסט ה-YAML של 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.

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