בדף הזה מוסבר איך להגדיר רישום ביומן של כמה דיירים באשכולות של Google Kubernetes Engine (GKE).
בדרך כלל כמה צוותים משתפים אשכול GKE אחד. לשיתוף אשכול יש כמה יתרונות, כולל גילוי שירותים קל יותר, אבטחה פשוטה יותר ופחות אשכולות לניהול עבור אדמינים של אשכולות. עם זאת, לצוותים של אפליקציות ספציפיות יש לעיתים קרובות פרויקט נפרד משלהם. המבנה הזה, שכולל אשכול GKE ראשי אבל מרחבי שמות נפרדים לכל צוות אפליקציות, נקרא ריבוי דיירים. הפרויקט של צוות האפליקציה נקרא דייר.
בעזרת Google Cloud, אדמינים של אשכולות GKE יכולים ליצור מערכת שבה היומנים של האשכול נשארים בפרויקט הראשי של GKE, והיומנים של הדיירים מופצים לפרויקטים של הדיירים. כדי להגדיר את היומנים בדרך הזו, משתמשים בLog Router. הכלי Log Router מאפשר לכם לשלוט באופן הזרימה של היומנים ב Google Cloud פרויקט שלכם ובאופן הניתוב של היומנים ליעדים נתמכים.
כדי ליצור יומנים ספציפיים לדייר, אדמין האשכול יוצר sink כדי לנתב רשומות ביומן לפרויקט של כל דייר. בכל פרויקט של דייר, צוותים נפרדים יכולים לקבוע איך היומנים מאוחסנים ואיך משתמשים בהם, למשל לעקוב אחרי היומנים על ידי הגדרת מדדים מבוססי-יומן והתראות מבוססות-יומן.
מומלץ שאובייקטים מסוג sink _Default בפרויקטים ראשיים של GKE יכללו מסנן החרגה. מסנן ההחרגה מונע את הטמעת היומנים של הדייר גם בפרויקט הראשי של GKE וגם בפרויקט הדייר.
דרישות מוקדמות
- כדאי להכיר את המסמכים הבאים בנושא ריבוי דיירים וניתוב:
- מוודאים שיש לכם פרויקט דייר (tenant) קיים ופרויקט ראשי.
הגדרת רישום ביומן של דירות שותפים
אפשר להגדיר רישום ביומן של כמה דיירים באמצעות Google Cloud CLI אוGoogle Cloud המסוף.
gcloud
כדי להגדיר רישום ביומן של כמה דיירים באשכולות GKE, מבצעים את השלבים הבאים:
מגדירים את משתני הסביבה הבאים:
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: מזהה הפרויקט של פרויקט הדייר (tenant)
-
יוצרים מרחב שמות באשכול מרובה הדיירים:
kubectl create namespace $TENANT_NAMESPACEיוצרים 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) את כל היומנים שקשורים למרחב השמות
$TENANT_NAMESPACE.יכול להיות שתצטרכו להשתמש ב-
--log-filterמגביל יותר. לדוגמה, אם לאשכול ולדייר יש את אותו מרחב שמות, צריך להוסיף מסנן אשכול.מידע נוסף על השדות האלה זמין במאמרי העזרה של ה-API של
gcloud logging sinks create.מקבלים את זהות הכותב מהיעד בפרויקט הראשי ומקצים אותה למשתנה סביבה.
export SERVICE_ACCOUNT=$(gcloud logging sinks describe gke-$TENANT_NAMESPACE-sink \ --project=$MAIN_PROJECT \ --format='value(writerIdentity)')מקצים לחשבון השירות שמשמש את יעד ההעברה את התפקיד כתיבה ביומן (
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-bindingAPI.אפשר ליצור מסנן החרגה לכיור שמעביר את היומנים לקטגוריה
_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 updateAPI.
המסוף
כדי להטמיע רישום ביומן של כמה דיירים ב-GKE, מבצעים את השלבים הבאים:
יוצרים את sink ביומן בפרויקט הראשי:
- בכלי לבחירת פרויקטים במסוף Google Cloud , בוחרים את הפרויקט הראשי ב-GKE.
-
במסוף Google Cloud , עוברים לדף Log Router:
אם משתמשים בשורת החיפוש כדי למצוא את הדף הזה, בוחרים בתוצאה שכותרת המשנה שלה היא Logging.
- בדף Log Router, לוחצים על Create sink.
- מזינים שם ותיאור ל-Sink ולוחצים על הבא.
- בתפריט Select sink service (בחירת שירות יעד), בוחרים באפשרות Other project (פרויקט אחר).
בשדה Sink destination (יעד להעברה), מוסיפים את היעד הבא:
logging.googleapis.com/projects/TENANT_PROJECT_IDמחליפים את
TENANT_PROJECT_IDבמזהה הפרויקט של פרויקט הדייר.לוחצים על הבא.
בקטע Build inclusion filter מוסיפים את מסנן ההכללה הבא:
resource.labels.namespace_name="TENANT_NAMESPACE"מחליפים את TENANT_NAMESPACE בשם של מרחב השמות של פרויקט הדייר.
יכול להיות שתרצו מסנן הכללה מגביל יותר. לדוגמה, אם לאשכול ולדייר יש את אותו מרחב שמות, כדאי להוסיף סעיף שיכלול רק רשומות יומן של אשכול ספציפי.
לוחצים על Create sink (יצירת יעד). היעד החדש יופיע ברשימה Log Router Sinks.
מעתיקים את זהות הכתיבה של יעד הנתונים ללוח:
- בדף Log Router (הכלי להעברת יומנים), מאתרים את sink ביומן.
- לוחצים על More ואז על View sink details.
- בחלונית Sink details, מאתרים את השדה Writer identity ומעתיקים את הערך ללוח. צריך להשמיט את
serviceAccount:מהערך שהועתק.
בפרויקט הדייר, מעניקים לחשבון השירות שמשמש את יעד ה-sink של הפרויקט הראשי את התפקיד Logs Writer (
roles/logging.logWriter). הפרויקט הראשי צריך את ההרשאה הזו כדי לכתוב יומנים לפרויקט הדייר.-
נכנסים לדף IAM במסוף Google Cloud :
אם משתמשים בסרגל החיפוש כדי למצוא את הדף הזה, בוחרים בתוצאה שמופיע בה הכותרת המשנית IAM & Admin.
- לוחצים על הענקת גישה.
- בשדה New principals, מוסיפים את חשבון השירות של הכיור.
- בתפריט הנפתח Select a role, בוחרים באפשרות Logging ואז בוחרים באפשרות Logs Writer.
- לוחצים על Save.
-
אופציונלי: יוצרים מסנן החרגה בקטגוריה
_Defaultשל הפרויקט הראשי, כדי למנוע כתיבה של יומנים שמנותבים לפרויקט דייר (tenant) בקטגוריית היומנים_Defaultבפרויקט הראשי:-
במסוף Google Cloud , עוברים לדף Log Router:
אם משתמשים בשורת החיפוש כדי למצוא את הדף הזה, בוחרים בתוצאה שכותרת המשנה שלה היא Logging.
- לצד
_Defaultbucket, לוחצים על More ואז על Edit sink. - בקטע Choose logs to filter out of sink, לוחצים על Add exclusion.
- מוסיפים שם למסנן.
בתיבה Build an exclusion filter, מוסיפים את הפרטים הבאים:
resource.labels.namespace_name="TENANT_NAMESPACE"לוחצים על Update sink.
-
אימות יומני הדייר
אחרי שמתחילים להשתמש בעומסי עבודה שמשתמשים ב-TENANT_NAMESPACE, אפשר לוודא שפרויקט הדייר מקבל יומנים ספציפיים לדייר:
- בוחרים את הפרויקט של הדייר באמצעות הכלי לבחירת פרויקטים במסוף Google Cloud .
-
במסוף Google Cloud , נכנסים לדף Logs Explorer:
אם משתמשים בשורת החיפוש כדי למצוא את הדף הזה, בוחרים בתוצאה שכותרת המשנה שלה היא Logging.
בשדה של עורך השאילתות, מריצים את השאילתה הבאה:
resource.labels.namespace_name="TENANT_NAMESPACE"בחלונית Query results, אמורים להופיע יומנים ספציפיים לדייר שהועברו מהפרויקט הראשי.
שימוש ביומנים של דיירים
בפרויקטים של הדייר, כל צוות יכול לשלוט באופן הניתוב, האחסון והניתוח של היומנים. אחרי שהיומנים מנותבים לפרויקטים של הדיירים, צוותי האפליקציות השונים יכולים לבחור אם לנתב את היומנים שלהם ליעדים נתמכים כמו קטגוריות של Logging, או ליעדים של צד שלישי באמצעות Pub/Sub. מידע על ניתוב רשומות ביומן מופיע במאמר ניתוב יומנים ליעדים נתמכים.
צוותים של אפליקציות ספציפיות יכולים גם להגדיר התראות על סמך התוכן של יומנים או מדדים שנגזרים מיומנים. מידע נוסף מופיע במאמר בנושא מעקב אחרי היומנים.
הסרת המשאבים
כדי להסיר את האובייקטים שיצרתם לרישום ביומן של כמה דיירים, אתם יכולים להשתמש ב-gcloud או במסוף Google Cloud .
gcloud
כדי להסיר את האובייקטים שיצרתם לרישום ביומן של כמה דיירים, מבצעים את השלבים הבאים:
מגדירים משתנים כדי לפשט את הפקודות הבאות:
export TENANT_NAMESPACE="TENANT_NAMESPACE" export MAIN_PROJECT="MAIN_PROJECT_ID" export TENANT_PROJECT="TENANT_PROJECT_ID"מחליפים את מה שכתוב בשדות הבאים:
-
TENANT_NAMESPACE: השם של מרחב השמות של פרויקט הדייר (tenant) -
MAIN-PROJECT-ID: מזהה הפרויקט הראשי -
TENANT-PROJECT-ID: מזהה הפרויקט של פרויקט הדייר (tenant)
-
מסירים את התפקיד כתיבת יומנים (
roles/logging.logWriter) מחשבון השירות בפרויקט הדייר (tenant):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מוחקים את sink ביומן:
gcloud logging sinks delete gke-$TENANT_NAMESPACE-sink \ --project=$MAIN_PROJECTמוחקים את מרחב השמות:
kubectl delete namespace $TENANT_NAMESPACE
המסוף
בפרויקט הדייר (tenant), מסירים את התפקיד כתיבת יומנים (
roles/logging.logWriter) מחשבון השירות:-
נכנסים לדף IAM במסוף Google Cloud :
אם אתם משתמשים בשורת החיפוש כדי למצוא את הדף הזה, בחרו בתוצאה שכותרת המשנה שלה היא IAM & Admin.
- לצד חשבון השירות שרוצים למחוק, לוחצים על edit Edit principal.
- בחלונית גישת עריכה לוחצים על Delete role ליד התפקיד Logs Writer ואז על Save.
-
בפרויקט הראשי, מוחקים את sink ביומן:
- בכלי לבחירת פרויקטים במסוף Google Cloud , בוחרים את פרויקט GKE של הדייר.
-
נכנסים לדף Log Router במסוף Google Cloud :
אם משתמשים בשורת החיפוש כדי למצוא את הדף הזה, בוחרים בתוצאה שכותרת המשנה שלה היא Logging.
- לצד הכיור שרוצים למחוק, לוחצים על more_vert אפשרויות נוספות.
- בוחרים באפשרות Delete sink.
- בחלונית האישור, לוחצים על מחיקה.
מגבלות
יש כמה מגבלות ביומן רישום של כמה דיירים:
- המכסה למספר sink ביומן לכל פרויקט היא 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\""כדי לשכפל את היומנים בין פרויקט הדייר (tenant) לפרויקט הראשי, אל תיצרו את מסנן ההחרגה.
המאמרים הבאים
- מידע ולמידה על שיטות מומלצות לשימוש ב-GKE בסביבת מולטי-טנאנסי בארגונים