הגדרה של רישום ביומן במערכת מרובת דיירים

בדף הזה מוסבר איך להגדיר רישום ביומן של כמה דיירים באשכולות של Google Kubernetes Engine ‏ (GKE).

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

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

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

מומלץ ש_Default sinks בפרויקטים ראשיים של GKE יכללו מסנן החרגה. מסנן ההחרגה מונע את ההטמעה של יומני הדייר גם בפרויקט ה-GKE הראשי וגם בפרויקט הדייר.

דרישות מוקדמות

הגדרה של רישום ביומן במערכת מרובת דיירים

אפשר להגדיר רישום ביומן של כמה דיירים באמצעות Google Cloud CLI אוGoogle Cloud המסוף.

gcloud

כדי להגדיר רישום ביומן של כמה דיירים באשכולות GKE, מבצעים את השלבים הבאים:

  1. מגדירים את משתני הסביבה הבאים:

    export TENANT_NAMESPACE="TENANT_NAMESPACE"
    export MAIN_PROJECT="MAIN_PROJECT_ID"
    export TENANT_PROJECT="TENANT_PROJECT_ID"
    

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

    • TENANT_NAMESPACE: השם של מרחב השמות של פרויקט הדייר
    • MAIN_PROJECT_ID: מזהה הפרויקט הראשי
    • TENANT_PROJECT_ID: מזהה הפרויקט של פרויקט הדייר
  2. יוצרים מרחב שמות באשכול מרובה הדיירים:

    kubectl create namespace $TENANT_NAMESPACE
    
  3. יוצרים sink ביומן בפרויקט GKE הראשי:

    gcloud logging sinks create gke-$TENANT_NAMESPACE-sink \
    logging.googleapis.com/projects/$TENANT_PROJECT \
        --project=$MAIN_PROJECT \
        --log-filter=resource.labels.namespace_name="$TENANT_NAMESPACE" \
        --description="Log sink to $TENANT_PROJECT for $TENANT_NAMESPACE namespace"
    

    הפקודה הזו יוצרת sink ביומן ששולח את כל היומנים שקשורים למרחב השמות $TENANT_NAMESPACE לפרויקט דייר (tenant).

    יכול להיות שתצטרכו להשתמש ב---log-filter מגביל יותר. לדוגמה, אם לאשכול ולדייר יש את אותו מרחב שמות, צריך להוסיף מסנן אשכול.

    מידע נוסף על השדות האלה זמין במאמרי העזרה של gcloud logging sinks create API.

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

    export SERVICE_ACCOUNT=$(gcloud logging sinks describe gke-$TENANT_NAMESPACE-sink \
        --project=$MAIN_PROJECT \
        --format='value(writerIdentity)')
    
  5. מקצים לחשבון השירות שמשמש את יעד ההעברה את התפקיד כתיבה ביומן (logging.bucketWriter). הפקודה הבאה מעניקה לפרויקט הראשי הרשאות לכתוב יומנים לפרויקט הדייר:

     gcloud projects add-iam-policy-binding $TENANT_PROJECT \
         --member=$SERVICE_ACCOUNT --role='roles/logging.logWriter' \
         --condition="expression=resource.name.endsWith(\"projects/$TENANT_PROJECT\"),title=Log writer for $TENANT_NAMESPACE,description=Grants Logs Writer role to service account $SERVICE_ACCOUNT used by gke-$TENANT_NAMESPACE-sink"
    

    מידע נוסף על השדות האלה זמין במאמרי העזרה של gcloud projects add-iam-policy-binding API.

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

    gcloud logging sinks update _Default --project=$MAIN_PROJECT \
        --add-exclusion="name=gke-$TENANT_NAMESPACE-default-exclusion,description=\"Exclusion filter on the _Default bucket for $TENANT_NAMESPACE\",filter=resource.labels.namespace_name=\"$TENANT_NAMESPACE\""
    

    מידע נוסף על השדות האלה זמין במאמרי העזרה של gcloud logging sinks update API.

המסוף

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

  1. יוצרים את sink ביומן בפרויקט הראשי:

    1. משתמשים בכלי לבחירת פרויקטים במסוף Google Cloud כדי לבחור את פרויקט GKE הראשי.
    2. במסוף Google Cloud , עוברים לדף Log Router:

      כניסה אל Log Router

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

    3. בדף Log Router, לוחצים על Create sink.
    4. מזינים שם ותיאור ל-Sink ולוחצים על הבא.
    5. בתפריט Select sink service בוחרים באפשרות Other project.
    6. בשדה Sink destination (יעד להעברה), מוסיפים את היעד הבא:

      logging.googleapis.com/projects/TENANT_PROJECT_ID
      

      מחליפים את TENANT_PROJECT_ID במזהה הפרויקט של פרויקט הדייר.

    7. לוחצים על הבא.

    8. בקטע Build inclusion filter מוסיפים את המסנן הבא:

      resource.labels.namespace_name="TENANT_NAMESPACE"
      

      מחליפים את TENANT_NAMESPACE בשם של מרחב השמות של פרויקט הדייר.

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

    9. לוחצים על Create sink (יצירת יעד). היעד החדש יופיע ברשימה Log Router Sinks.

  2. מעתיקים את זהות הכתיבה של יעד הנתונים ללוח:

    1. בדף Log Router (הפניית יומנים), מאתרים את sink ביומן.
    2. במאגר הזה, לוחצים על סמל האפשרויות הנוספות ואז על הצגת פרטים על מאגר.
    3. בחלונית Sink details, מאתרים את השדה Writer identity ומעתיקים את הערך ללוח. השמטת serviceAccount: מהערך המועתק.
  3. בפרויקט הדייר, מעניקים לחשבון השירות שמשמש את יעד ה-sink של הפרויקט הראשי את התפקיד Logs Writer (roles/logging.logWriter). הפרויקט הראשי צריך את ההרשאה הזו כדי לכתוב יומנים לפרויקט הדייר.

    1. נכנסים לדף IAM במסוף Google Cloud :

      כניסה לדף IAM

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

    2. לוחצים על הענקת גישה.
    3. בשדה New principals, מוסיפים את חשבון השירות של יעד הנתונים.
    4. בתפריט הנפתח Select a role, בוחרים באפשרות Logging ואז בוחרים באפשרות Logs Writer.
    5. לוחצים על Save.
  4. אופציונלי: יוצרים מסנן החרגה בקטגוריית _Default של הפרויקט הראשי כדי למנוע כתיבה של יומנים שמועברים לפרויקט של הדייר לקטגוריית היומנים _Default בפרויקט הראשי:

    1. במסוף Google Cloud , עוברים לדף Log Router:

      כניסה אל Log Router

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

    2. לצד מאגר _Default, לוחצים על More ואז על Edit sink.
    3. בקטע Choose logs to filter out of sink, לוחצים על Add exclusion.
    4. מוסיפים שם מסנן.
    5. בתיבה Build an exclusion filter, מוסיפים את הפרטים הבאים:

      resource.labels.namespace_name="TENANT_NAMESPACE"
      
    6. לוחצים על עדכון יעד.

אימות יומני הדיירים

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

  1. בוחרים את פרויקט הדייר (tenant) באמצעות כלי לבחירת פרויקטים במסוף Google Cloud .
  2. במסוף Google Cloud , נכנסים לדף Logs Explorer:

    כניסה אל Logs Explorer

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

  3. בשדה עורך השאילתות, מריצים את השאילתה הבאה:

    resource.labels.namespace_name="TENANT_NAMESPACE"
    

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

שימוש ביומנים של הדייר

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

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

הסרת המשאבים

כדי להסיר את האובייקטים שיצרתם לרישום ביומן של כמה דיירים, אתם יכולים להשתמש ב-gcloud או במסוף Google Cloud .

gcloud

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

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

    export TENANT_NAMESPACE="TENANT_NAMESPACE"
    export MAIN_PROJECT="MAIN_PROJECT_ID"
    export TENANT_PROJECT="TENANT_PROJECT_ID"
    

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

    • TENANT_NAMESPACE: השם של מרחב השמות של פרויקט הדייר
    • MAIN-PROJECT-ID: מזהה הפרויקט הראשי
    • TENANT-PROJECT-ID: מזהה הפרויקט של פרויקט הדייר
  2. מסירים את התפקיד Logs Writer (roles/logging.logWriter) מחשבון השירות בפרויקט הדייר:

    export SERVICE_ACCOUNT=$(gcloud logging sinks describe gke-$TENANT_NAMESPACE-sink \
        --project=$MAIN_PROJECT | \
        --format='value(writerIdentity)'
    
    gcloud projects remove-iam-policy-binding $TENANT_PROJECT \
        --member=$SERVICE_ACCOUNT \
        --role='roles/logging.logWriter' \
        --all
    
  3. מוחקים את sink ביומן:

    gcloud logging sinks delete gke-$TENANT_NAMESPACE-sink \
        --project=$MAIN_PROJECT
    
  4. מוחקים את מרחב השמות:

    kubectl delete namespace $TENANT_NAMESPACE
    

המסוף

  1. בפרויקט הדייר, מסירים את התפקיד Logs Writer (roles/logging.logWriter) מחשבון השירות:

    1. נכנסים לדף IAM במסוף Google Cloud :

      כניסה לדף IAM

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

    2. לצד חשבון השירות שרוצים למחוק, לוחצים על Edit principal.
    3. בחלונית גישת עריכה לוחצים על Delete role ליד התפקיד Logs Writer ואז על Save.
  2. בפרויקט הראשי, מוחקים את יעד העברת היומן:

    1. משתמשים בכלי לבחירת פרויקטים במסוף Google Cloud כדי לבחור את פרויקט GKE של הדייר.
    2. במסוף Google Cloud , עוברים לדף Log Router:

      כניסה אל Log Router

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

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

מגבלות

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

  • המכסה של מספר יעד העברת היומנים לכל פרויקט היא 200. אם אתם צריכים יותר מ-200 דיירים, אתם יכולים לפתוח בקשת תמיכה כדי לבקש הגדלה של המכסה.
  • יש מגבלה של 50 מסנני החרגה לכל מאגר יומנים. אם אתם מתכוונים להשתמש ביותר מ-50 דיירים, צריך לשנות את הגישה של מסנן ההחרגה לדלי _Default. אפשר גם לבצע את הפעולות הבאות:

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

      gcloud logging sinks update _Default \
      --project=$MAIN_PROJECT \
      --add-exclusion="name=gke-all-tenant-default-exclusion,description=\"Exclusion filter on the _Default bucket for all tenants\",filter=resource.labels.namespace_name !~ \"kube\" AND resource.labels.namespace_name !~ \"system\ AND resource.labels.namespace_name != \"Default\""
      
    • שכפול יומנים בין פרויקט הדייר לבין הפרויקט הראשי בלי ליצור את מסנן ההחרגה.

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