ניהול משאבי GKE באמצעות תגים

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

מידע על תגים

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

תרחישים לדוגמה לשימוש בתגים ב-GKE

אפשר להשתמש בתגים ב-GKE במצבים כמו הבאים:

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

איך זה עובד

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

אחרי שיוצרים את התג, מצרפים אותו למשאבים ב-GKE כצמד מפתח/ערך. אופן צירוף התג תלוי במשאב היעד:

  • משאבי אשכול: כדי לצרף תגים שאינם חומת אש ישירות למשאב של אשכול GKE, משתמשים ב-Tags API. אפשר לצרף עד 50 תגיות שאינן חומת אש לכל משאב באשכול. תגים שמצורפים ישירות למשאב של אשכול לא מועברים למכונות הווירטואליות הבסיסיות של Compute Engine.
  • מאגרי צמתים וצמתים: כדי לצרף תגים למאגרי צמתים של GKE (ולהפיץ אותם באופן אוטומטי למכונות הווירטואליות הבסיסיות של Compute Engine), משתמשים ב-GKE API. אפשר לצרף תגים של חומת אש ותגים שאינם של חומת אש למאגרי צמתים באמצעות GKE API, עד למקסימום של חמישה תגים (משולבים של חומת אש ותגים שאינם של חומת אש) לכל מאגר צמתים.

לכל מפתח אפשר לצרף ערך אחד למשאב. לדוגמה, אם צירפתם את env:dev לאשכול GKE או למאגר צמתים, לא תוכלו לצרף גם את env:prod או env:test.

שיטות להוספת הערות למשאבים ב-GKE

ב-GKE, יש כמה שיטות להוספת הערות למשאבים, כמו שמתואר בטבלה הבאה:

סוג הערה תיאור דוגמה
תגים (לא חומת אש)
  • החלה ישירה על משאב של אשכול באמצעות Tags API (עד 50 תגים שאינם תגי חומת אש)
  • הוספה למאגרי צמתים ולמכונות הווירטואליות הבסיסיות שלהם ב-Compute Engine באמצעות GKE API (עד חמישה תגים בסך הכול לכל מאגר צמתים, בשילוב עם תגי חומת אש)
  • ארגון משאבים כדי לעקוב אחרי השימוש והחיוב
  • החלה מותנית של מדיניות IAM
  • שליטה בגישה לתגים ספציפיים באמצעות IAM

מידע נוסף זמין במאמר סקירה כללית על התגים.

התניית מתן תפקידים ב-IAM כדי לשלוט בגישה למשאבים עם תגים ספציפיים
תגים (חומת אש)
  • הגשת בקשה לאשכול או למאגר צמתים באמצעות GKE API (עד חמישה תגים בסך הכול לכל מאגר צמתים, בשילוב עם תגים שאינם תגי חומת אש)
  • החלה מותנית של מדיניות חומת אש ברשת Cloud Next Generation Firewall.
  • שליטה בגישה לתגים ספציפיים באמצעות IAM
  • ‫GKE מצרף את צמדי המפתח/ערך למכונות הווירטואליות הבסיסיות של Compute Engine.

מידע נוסף זמין במאמר בנושא החלה סלקטיבית של מדיניות חומת אש ברשת ב-GKE.

דחייה אוטומטית של תעבורת נתונים נכנסת (ingress) מהאינטרנט הציבורי לכל סביבות הבמה או הבדיקה
תגים של רשתות
  • הגשת בקשה לאשכול או למאגר צמתים באמצעות GKE API
  • מחרוזות פשוטות ללא בקרת גישה ב-IAM
  • משמש להחלה מותנית של כללי חומת אש של VPC
  • ‫GKE מצרף את צמדי המפתח/ערך למכונות הווירטואליות הבסיסיות של Compute Engine

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

דחייה אוטומטית של תעבורת נתונים נכנסת (ingress) מהאינטרנט הציבורי לכל סביבות הבמה או הבדיקה
תוויות של אשכולות GKE
  • הגשת בקשה לאשכול או למאגר צמתים באמצעות GKE API
  • ארגון משאבים כדי לעקוב אחרי השימוש והחיוב

מידע נוסף זמין במאמר בנושא תוויות של אשכולות.

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

מידע נוסף זמין במאמר בנושא תוויות וסלקטורים ב-Kubernetes.

הגדרת דרישה לתזמון עומסי עבודה בצמתים עם תוויות ספציפיות.

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

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

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

צירוף תגים לאשכול

אם יש לכם את ההרשאות המתאימות, אתם יכולים לצרף תגים לאשכול קיים באמצעות Google Cloud CLI, ‏ מסוף Google Cloud , ‏ Tags API או Terraform.

gcloud

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

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

gcloud resource-manager tags bindings create \
    --tag-value=TAG_VALUE_ID \
    --parent=RESOURCE_ID \
    --location=CLUSTER_LOCATION

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

  • ‫TAG_VALUE_ID: המזהה הקבוע או השם במרחב השמות של ערך התג לצירוף. לדוגמה, tagValues/4567890123. פרטים על מזהי תגים זמינים במאמר בנושא הגדרות ומזהים של תגים.
  • ‫CLUSTER_LOCATION: המיקום של Compute Engine. במקרה של אשכולות אזוריים, צריך לציין את אזור החישוב.
  • ‫RESOURCE_ID: שם המשאב המלא של האשכול, למשל //container.googleapis.com/projects/PROJECT_ID/locations/CLUSTER_LOCATION/clusters/CLUSTER_NAME.

    במזהה המשאב:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
    • ‫CLUSTER_NAME: השם של האשכול.

המסוף

כדי לצרף תג למשאבי GKE באמצעות מסוףGoogle Cloud , צריך ליצור את התג ולהגדיר את הערכים שלו. במאמרים יצירת תג והוספת ערכי תגים מוסבר איך יוצרים מפתחות וערכים של תגים.

  1. נכנסים לדף Google Kubernetes Engine במסוף Google Cloud .

    מעבר אל Google Kubernetes Engine

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

  3. בקטע Metadata, לצד Tags, לוחצים על Edit tags.

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

  5. בחלונית Tags (תגים), לוחצים על Add tag (הוספת תג).

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

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

  8. לוחצים על Save.

  9. בתיבת הדו-שיח אישור, לוחצים על אישור כדי לצרף את התג.

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

API

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

משתמשים בשיטת tagBindings.create עם נקודת הקצה האזורית או האזורית שבה נמצא האשכול.

POST https://LOCATION-cloudresourcemanager.googleapis.com/v3/tagBindings

מחליפים את LOCATION באזור או בתחום שבו נמצא האשכול.

תוכן בקשת JSON:

{
  "parent": "RESOURCE_ID",
  "tagValue": "TAG_VALUE_ID"
}

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

  • ‫RESOURCE_ID: שם המשאב המלא של האשכול, למשל //container.googleapis.com/projects/PROJECT_ID/locations/CLUSTER_LOCATION/clusters/CLUSTER_NAME.

    במזהה המשאב:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
    • ‫CLUSTER_NAME: השם של האשכול.
  • ‫TAG_VALUE_ID: המזהה הקבוע או השם במרחב השמות של ערך התג לצירוף. לדוגמה, tagValues/4567890123. פרטים על מזהי תגים זמינים במאמר בנושא הגדרות ומזהים של תגים.

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

{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.resourcemanager.v3.TagBinding",
    "name": "tagBindings///container.googleapis.com/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_NAME/tagValues/TAG_VALUE_ID",
    "parent": "//container.googleapis.com/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_NAME",
    "tagValue": "TAG_VALUE_ID"
  }
}

Terraform

כדי ליצור תג, להגדיר את הערכים שלו ולצרף תג למשאב באמצעות Terraform, אפשר להיעזר בדוגמה הבאה:

resource "google_container_cluster" "default" {
  name     = "gke-autopilot-tag"
  location = "us-central1"

  enable_autopilot = true
}

data "google_project" "default" {}

resource "google_tags_tag_key" "default" {
  parent      = "projects/${data.google_project.default.project_id}"
  short_name  = "env"
  description = "Environment tag key"
}

resource "google_tags_tag_value" "default" {
  parent      = "tagKeys/${google_tags_tag_key.default.name}"
  short_name  = "dev"
  description = "Development environment tag value."
}

resource "google_tags_location_tag_binding" "default" {
  parent    = "//container.googleapis.com/${google_container_cluster.default.id}"
  location  = google_container_cluster.default.location
  tag_value = "tagValues/${google_tags_tag_value.default.name}"
}

מידע נוסף על שימוש ב-Terraform זמין במאמר תמיכה ב-Terraform ב-GKE.

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

אפשר להציג את רשימת התגים שמצורפים לאשכול באמצעות ה-CLI של gcloud,‏ Google Cloud המסוף או Tags API.

gcloud

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

gcloud resource-manager tags bindings list \
    --parent=RESOURCE_ID \
    --location=CLUSTER_LOCATION

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

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

  • ‫RESOURCE_ID: שם המשאב המלא של האשכול, למשל //container.googleapis.com/projects/PROJECT_ID/locations/CLUSTER_LOCATION/clusters/CLUSTER_NAME.

    במזהה המשאב:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .

    • ‫CLUSTER_NAME: השם של האשכול.

המסוף

  1. נכנסים לדף Google Kubernetes Engine במסוף Google Cloud .

    עוברים אל Google Kubernetes Engine

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

  3. בקטע Metadata (מטא נתונים), לצד Tags (תגים), מחפשים את ערכי התגים המצורפים.

API

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

GET https://LOCATION-cloudresourcemanager.googleapis.com/v3/tagBindings

תוכן בקשת JSON:

{
  "parent": RESOURCE_ID,
}

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

  • ‫RESOURCE_ID: שם המשאב המלא של האשכול, למשל //container.googleapis.com/projects/PROJECT_ID/locations/CLUSTER_LOCATION/clusters/CLUSTER_NAME.

    במזהה המשאב:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
    • ‫CLUSTER_NAME: השם של האשכול.

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

"tagBindings": [
  {
    "name": "tagBindings/%2F%2Fcontainer.googleapis.com%2Fprojects%2Ftags-bugbash-project%2Flocations%2LOCATION%2Fclusters%2Ftestcluster/tagValues/758072120217",
    "parent": "//container.googleapis.com/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_NAME",
    "tagValue": "TAG_VALUE_ID"
  }
]

ניתוק תגים מאשכול

כדי לבטל את הקישור של תג לאשכול, צריך למחוק את משאב קישור התגים שמצורף לאשכול באמצעות ה-CLI של gcloud, ‏Google Cloud המסוף או Tags API. אם אתם צריכים למחוק תג, קודם צריך לבטל את הצירוף שלו מכל המשאבים שהוא מצורף אליהם.

gcloud

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

gcloud resource-manager tags bindings delete \
    --tag-value=TAG_VALUE_ID \
    --parent=RESOURCE_ID \
    --location=CLUSTER_LOCATION

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

  • ‫TAG_VALUE_ID: המזהה הקבוע או השם ממרחב השמות של ערך התג לניתוק. לדוגמה, tagValues/4567890123. פרטים על מזהי תגים זמינים במאמר הגדרות ומזהים של תגים.

  • ‫CLUSTER_LOCATION: באשכולות אזוריים, מציינים את אזור המחשוב. לגבי אשכולות אזוריים, מציינים את אזור החישוב.

  • ‫RESOURCE_ID: שם המשאב המלא של האשכול, למשל //container.googleapis.com/projects/PROJECT_ID/locations/CLUSTER_LOCATION/clusters/CLUSTER_NAME.

    במזהה המשאב:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .

    • ‫CLUSTER_NAME: השם של האשכול.

המסוף

  1. נכנסים לדף Google Kubernetes Engine במסוף Google Cloud .

    מעבר אל Google Kubernetes Engine

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

  3. בקטע Metadata, לצד Tags, לוחצים על Edit tags.

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

  5. לוחצים על Save.

  6. בתיבת הדו-שיח אישור, לוחצים על אישור כדי לבטל את הקישור של התג.

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

API

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

DELETE https://LOCATION-cloudresourcemanager.googleapis.com/v3/TAG_BINDING_NAME

מחליפים את TAG_BINDING_NAME בשם המשאב המלא של האובייקט tagBinding שרוצים לנתק. לדוגמה, tagBindings/container.googleapis.com/projects/PROJECT_ID/locations/LOCATION/tagValues/TAG_VALUE_ID.

צירוף תגים למאגר צמתים

אפשר לצרף תגי חומת אש ותגים שאינם חומת אש למאגרי צמתים ב-GKE באמצעות GKE API. כשמצרפים תגים למאגר צמתים, GKE מעביר את התגים האלה באופן אוטומטי למכונות הווירטואליות הבסיסיות של Compute Engine במאגר הצמתים הזה.

  • תגים שאינם חומת אש במאגרי צמתים נתמכים ב-GKE מגרסה 1.34 ואילך.
  • תגים שאינם חומת אש עם ComputeClasses בהתאמה אישית נתמכים ב-GKE החל מגרסה 1.35.0-gke.2398000.

צירוף תגים למאגר צמתים רגיל

אפשר לצרף תגים כשיוצרים מאגר צמתים חדש או מעדכנים מאגר צמתים קיים באמצעות הדגל --resource-manager-tags:

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

    gcloud container node-pools create NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --location=CLUSTER_LOCATION \
        --resource-manager-tags=TAG1,TAG2,...
    
  • כדי לצרף תגים למאגר צמתים קיים או להחליף את התגים הקיימים, מריצים את הפקודה הבאה:

    gcloud container node-pools update NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --location=CLUSTER_LOCATION \
        --resource-manager-tags=TAG1,TAG2,...
    

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

  • ‫NODE_POOL_NAME: השם של מאגר הצמתים.
  • ‫CLUSTER_NAME: שם האשכול.
  • ‫CLUSTER_LOCATION: האזור או התחום של Compute Engine שבו נמצא האשכול.
  • ‫TAG1,TAG2,...: רשימה מופרדת בפסיקים של עד חמישה צמדי מפתח/ערך לצירוף. בכל צמד מפתח/ערך אפשר להשתמש במזהים קבועים (לדוגמה, tagKeys/123456789012=tagValues/987654321098) או בשמות עם מרחב שמות (לדוגמה, example-project/env=dev,123456789012/team=sre).

צירוף תגים לאשכולות Autopilot או למאגרי צמתים שהוקצו אוטומטית

כדי לצרף תגים לצמתים באשכול במצב Autopilot או למאגרי צמתים חדשים שהוקצו אוטומטית באשכול רגיל עם Node Auto Provisioning מופעל, משתמשים בדגל --autoprovisioning-resource-manager-tags:

gcloud container clusters update CLUSTER_NAME \
    --location=CLUSTER_LOCATION \
    --autoprovisioning-resource-manager-tags=TAG1,TAG2,...

כדי להסיר את כל התגים שמצורפים למאגר צמתים באמצעות GKE API, צריך להעביר ערך ריק לדגל (לדוגמה, --resource-manager-tags="" או --autoprovisioning-resource-manager-tags=""). מידע נוסף על תחביר וירושה של תגים במאגר צמתים זמין במאמר אכיפה סלקטיבית של מדיניות חומת אש ברשת ב-GKE.

מחיקת מפתחות תגים וערכי תגים

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

תנאים ותגים בניהול זהויות והרשאות גישה (IAM)

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

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

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