הסבר על סטטוס הלקוח של Cloud Service Mesh
כשמשתמשים ב-Cloud Service Mesh כדי לטפל ברשת האפליקציה, חשוב להכיר את שני הרכיבים העיקריים הבאים:
- שכבת התשתית. שכבת התשתית, כמו שרתי proxy של Envoy sidecar או ספריות gRPC בלי שרת Proxy, מוגדרת לטיפול ברישות בשם האפליקציות שלכם.
- מישור הבקרה, Cloud Service Mesh. מישור הבקרה יוצר הגדרה עבור שכבת התשתית ומפיץ את ההגדרה לשכבת התשתית.
כשמפעילים שרת proxy של Envoy או את ספריית gRPC, הם משתמשים בממשקי xDS API כדי להתחבר ל-Cloud Service Mesh. הפרוקסי או הספרייה פועלים כלקוח של Cloud Service Mesh. אחרי שנוצר חיבור בין הלקוח ל-Cloud Service Mesh, Cloud Service Mesh שולח בחזרה ללקוח פרטי הגדרה ומעדכן את ההגדרה לפי הצורך.
לפעמים כדאי להבין אילו לקוחות מחוברים ל-Cloud Service Mesh או לבדוק את ההגדרה ש-Cloud Service Mesh יוצרת עבור הלקוחות שלה. לדוגמה, יכול להיות שתרצו לנפות באגים בבעיה מסוימת, או להבין איך הפעולות שביצעתם כשקבעתם את ההגדרות של Cloud Service Mesh משפיעות על ההגדרות שהלקוחות שלכם רואים.
Cloud Service Mesh תומך ב-API של Client Status Discovery Service (CSDS). משתמשים בלקוח CSDS כדי לשלוח שאילתות ל-API הזה. כך תוכלו לראות אילו לקוחות מחוברים ל-Cloud Service Mesh ולבדוק את ההגדרה ש-Cloud Service Mesh יוצר עבור הלקוחות שלו.
לקוח ה-CSDS הוא כלי בקוד פתוח שאפשר להשיג ממאגר Envoy. הדיאגרמה הבאה ממחישה כיצד לקוח CSDS שולח שאילתות אל Cloud Service Mesh לקבלת מידע על CSDS API של Cloud Service Mesh.
לקוח ה-CSDS מתחבר ל-Cloud Service Mesh ומציג מספר פרויקט ושם רשת, יחד עם קבוצת פרטי כניסה. לאחר מכן, Cloud Service Mesh יכול להגיב עם מידע על הלקוחות השונים של Cloud Service Mesh שאליו הוא מחובר.
מידע נוסף על לקוח CSDS זמין בקובץ ה-README.
דרישות מוקדמות
כדי להתחבר ל-CSDS API, צריך לקוח CSDS. אפשר לקבל את הלקוח באחת משתי דרכים:
- אפשר ליצור את הלקוח באמצעות Cloud Shell.
- אפשר ליצור את הלקוח במחשב פיתוח מקומי.
איך בונים את לקוח CSDS באמצעות Cloud Shell
כדי להשתמש ב-Cloud Shell כדי ליצור את לקוח CSDS:
- מאפסים את Cloud Shell לפי ההוראות במאמר השבתה או איפוס של Cloud Shell. כך אפשר לוודא שההגדרות הקיימות לא יפריעו לבנייה.
- במסוף Google Cloud , פותחים סשן חדש של Cloud Shell.
מריצים את הפקודה הבאה כדי לקבל את קוד המקור שמשמש לבניית לקוח CSDS:
git clone https://github.com/envoyproxy/envoy-tools.git
עוברים לספריית הלקוח של CSDS ומריצים את הפקודות הבאות:
cd envoy-tools/csds-client/ make init make build
אחרי שה-build מסתיים, בודקים אותו באמצעות הפקודה הבאה:
csds-client -help
אם הבנייה הושלמה בהצלחה, יוצג טקסט העזרה של הלקוח.
פיתוח לקוח CSDS במחשב פיתוח מקומי
אפשר להוריד ולבנות לקוח CSDS במחשב מקומי באמצעות ההוראות בקובץ ה-README במאגר הקוד הפתוח. כדי לעשות זאת, צריך גם להגדיר את Go ואת הכלי make בסביבה. אם אתם לא רוצים לעשות את זה, תוכלו להשתמש בהוראות הקודמות ל-Cloud Shell, שבהן Go וכלי make מסופקים לכם.
דרישות מוקדמות נוספות
חשוב לוודא שמזהה הצומת של כל לקוח הוא ייחודי בתוך Service mesh. אם כמה לקוחות חולקים את אותו מזהה צומת, רק הגדרה אחת מוחזרת – ההגדרה של הלקוח שהתחבר לאחרונה ל-Cloud Service Mesh.
אם אתם משתמשים בחבילות ההפניה של Google, אתם לא צריכים להגדיר ידנית את מזהה הצומת בקובצי האתחול. מזהה הצומת נוצר בשבילכם. אם לא משתמשים בחבילות ההפניה, צריך להגדיר ידנית את מזהה הצומת בכל אחד מקובצי האתחול.
מוודאים שיש לכם גישה לחשבון משתמש עם הרשאות ניהול זהויות והרשאות גישה (IAM) שנדרשות להגדרת Cloud Service Mesh. בהוראות הבאות נעשה שימוש ב-Google Cloud CLI כדי ליצור את פרטי הכניסה שנדרשים ללקוח CSDS ולספק אותם באופן אוטומטי. לחלופין, אפשר להשתמש בלקוח CSDS ולספק את פרטי הכניסה ישירות.
איך קובעים אילו לקוחות מחוברים כרגע ל-Cloud Service Mesh
אתם יכולים להשתמש בלקוח CSDS כדי לדעת אילו לקוחות מחוברים להגדרת Cloud Service Mesh שלכם.
כדי לקבל את המידע הזה, צריך לספק את הפרטים הבאים:
מזהה הפרויקט שממנו נוצרו פרטי הכניסה.
אם אתם משתמשים בממשקי ה-API לניתוב שירותים, אחת מהאפשרויות הבאות, בהתאם למשאב שאותו מאחזר לקוח ה-xDS:
אם אתם משתמשים בממשקי ה-API הישנים, השם של רשת ה-VPC שציינתם כשקבעתם את ההגדרות של Cloud Service Mesh. הרשת הזו היא הרשת שצוינה בכלל ההעברה של מפת כללי הניתוב.
ממשקי API לניתוב שירותים
מחשבון שיש לו את ההרשאות הנכונות, מריצים את הפקודה הבאה:
gcloud auth application-default login \ --billing-project=BILLING_PROJECT_ID
יוצרים קובץ חדש בפורמט YAML עם התוכן הבא.
node_matchers: - node_metadatas: - path: - key: TRAFFICDIRECTOR_GCP_PROJECT_NUMBER value: string_match: exact: "PROJECT_NUMBER" - path: - key: TRAFFICDIRECTOR_MESH_SCOPE_NAME value: string_match: exact: "MESH_OR_SCOPE"מחליפים את הערכים הבאים:
-
PROJECT_NUMBER: מזהה הפרויקט -
MESH_OR_SCOPE: אם לקוח xDS מאחזר משאב Mesh, צריך להשתמש בקידומתMESH_OR_SCOPEואחריה שם הרשת בפועל. אם לקוח xDS מאחזר משאב Gateway, צריך להשתמש בקידומתscope:ואחריה שם פרמטר ההיקף.mesh:
-
מריצים את לקוח CSDS, שמשתמש בפרטי הכניסה שנוצרו על ידי ה-CLI של gcloud. מחליפים את
PATH_TO_CSDS_REQUEST_YAML_FILEבנתיב לקובץ ה-YAML שיצרתם בשלב הקודם.csds-client \ -service_uri trafficdirector.googleapis.com:443 \ -platform gcp \ -authn_mode auto \ -api_version v3 \ -request_file PATH_TO_CSDS_REQUEST_YAML_FILE
הפלט אמור להיראות כך:
Client ID xDS stream type Config status 603e3524-d1d6-4a9e-9b26-39bcd633a7cb~10.128.0.5 ADS N/A 603e3524-d1d6-4a9e-9b26-39bcd633a7cb~10.128.0.5 LRS N/A 8576d4bf-8f10-40b2-920b-bb6a7cf9f34a~10.168.0.3 ADS N/A 8576d4bf-8f10-40b2-920b-bb6a7cf9f34a~10.168.0.3 LRS N/A d9577b61-fa3a-41d6-90bd-11c4fdd2f8c0~10.128.0.4 ADS N/A d9577b61-fa3a-41d6-90bd-11c4fdd2f8c0~10.128.0.4 LRS N/A f38a59c1-4428-42f1-be81-e02eb994f9dd~10.128.0.6 ADS N/A f38a59c1-4428-42f1-be81-e02eb994f9dd~10.128.0.6 LRS N/A
בעמודה
Client IDמוצגים מזהי הלקוחות שמחוברים ל-Cloud Service Mesh. מזהי הלקוח האלה מסופקים באמצעות השדהnode_idבקובץ ה-bootstrap שבו משתמשים Envoy או gRPC בלי שרת Proxy כשהם מתחברים ל-Cloud Service Mesh.
ממשקי API ישנים יותר
מחשבון שיש לו את ההרשאות הנכונות, מריצים את הפקודה הבאה:
gcloud auth application-default login \ --billing-project=BILLING_PROJECT_ID
יוצרים קובץ חדש בפורמט YAML עם התוכן הבא.
node_matchers: - node_metadatas: - path: - key: TRAFFICDIRECTOR_GCP_PROJECT_NUMBER value: string_match: exact: "PROJECT_NUMBER" - path: - key: TRAFFICDIRECTOR_NETWORK_NAME value: string_match: exact: "NETWORK_NAME"מחליפים את הערכים הבאים:
-
PROJECT_NUMBER: המזהה הייחודי שלGoogle Cloud הפרויקט -
NETWORK_NAME: רשת ה-VPC שצוינה בכלל ההעברה של מיפוי כללי הניתוב
-
מריצים את לקוח CSDS, שמשתמש בפרטי הכניסה שנוצרו על ידי ה-CLI של gcloud. מחליפים את
PATH_TO_CSDS_REQUEST_YAML_FILEבנתיב לקובץ ה-YAML שיצרתם בשלב הקודם.csds-client \ -service_uri trafficdirector.googleapis.com:443 \ -platform gcp \ -authn_mode auto \ -api_version v3 \ -request_file PATH_TO_CSDS_REQUEST_YAML_FILE
הפלט אמור להיראות כך:
Client ID xDS stream type Config status 603e3524-d1d6-4a9e-9b26-39bcd633a7cb~10.128.0.5 ADS N/A 603e3524-d1d6-4a9e-9b26-39bcd633a7cb~10.128.0.5 LRS N/A 8576d4bf-8f10-40b2-920b-bb6a7cf9f34a~10.168.0.3 ADS N/A 8576d4bf-8f10-40b2-920b-bb6a7cf9f34a~10.168.0.3 LRS N/A d9577b61-fa3a-41d6-90bd-11c4fdd2f8c0~10.128.0.4 ADS N/A d9577b61-fa3a-41d6-90bd-11c4fdd2f8c0~10.128.0.4 LRS N/A f38a59c1-4428-42f1-be81-e02eb994f9dd~10.128.0.6 ADS N/A f38a59c1-4428-42f1-be81-e02eb994f9dd~10.128.0.6 LRS N/A
בעמודה
Client IDמוצגים מזהי הלקוחות שמחוברים ל-Cloud Service Mesh. מזהי הלקוח האלה מסופקים באמצעות השדהnode_idבקובץ ה-bootstrap שבו משתמשים Envoy או gRPC בלי שרת Proxy כשהם מתחברים ל-Cloud Service Mesh.
בדיקת ההגדרה של לקוח ספציפי ב-Cloud Service Mesh
אפשר לבדוק את ההגדרה ש-Cloud Service Mesh שולח ללקוח מסוים באמצעות מזהה הלקוח שהתקבל בקטע הקודם.
אפשר לבדוק את ההגדרה המפורטת של פרוטו המשאב כדי לדעת באיזו גרסה של xDS API משתמש הלקוח הספציפי. לדוגמה, אם מופיע envoy.api.v2.Cluster בהגדרה, המשמעות היא שהלקוח משתמש ב-API מגרסה 2.
אם מופיע envoy.api.v3.Cluster בהגדרה, זה אומר שהלקוח משתמש ב-API בגרסה 3. יש תמיכה רק ב-xDS v3. מידע על מעבר מגרסה 2 לגרסה 3 זמין במאמר מעבר מ-xDS v2 ל-xDS v3.
ממשקי API לניתוב שירותים
מעדכנים את קובץ ה-YAML שיצרתם בשלב קביעה אילו לקוחות מחוברים כרגע ל-Cloud Service Mesh. מוסיפים שדה
node-idשמשתמש במזהה הלקוח כערך שלו.node_matchers: - node_id: exact: "CLIENT_ID" node_metadatas: - path: - key: TRAFFICDIRECTOR_GCP_PROJECT_NUMBER value: string_match: exact: "PROJECT_NUMBER" - path: - key: TRAFFICDIRECTOR_MESH_SCOPE_NAME value: string_match: exact: "MESH_OR_SCOPE_NAME"מחליפים את הערכים הבאים:
-
CLIENT_ID: המזהה של הלקוח שאתם בודקים את ההגדרה שלו. לדוגמה:projects/000000/networks/mesh:mesh1/nodes/00000000-0000-0000-0000-00000000~127.0.0.1 -
PROJECT_NUMBER: המזהה הייחודי שלGoogle Cloud הפרויקט -
MESH_OR_SCOPE: אם לקוח xDS מאחזר משאב Mesh, צריך להשתמש בקידומתMESH_OR_SCOPEואחריה שם הרשת בפועל. אם לקוח xDS מאחזר משאב Gateway, צריך להשתמש בקידומתscope:ואחריה שם פרמטר ההיקף.mesh:
-
מפעילים את לקוח ה-CSDS. הפעלת הלקוח יוצרת קובץ JSON. הקובץ הזה מכיל את ההגדרה שנשלחת ללקוח Cloud Service Mesh.
csds-client \ -service_uri trafficdirector.googleapis.com:443 \ -platform gcp \ -authn_mode auto \ -api_version v3 \ -request_file PATH_TO_CSDS_REQUEST_YAML_FILE \ -output_file FILENAME.JSON
מחליפים את הערכים הבאים:
-
PATH_TO_CSDS_REQUEST_YAML_FILE: הנתיב לקובץ ה-YAML -
FILENAME.JSON: שם לקובץ שבו יישמר הפלט של לקוח CSDS
הפלט אמור להיראות כך:
Client ID xDS stream type Config status 8576d4bf-8f10-40b2-920b-bb6a7cf9f34a~10.168.0.3 ADS LDS SYNCED RDS SYNCED CDS STALE Config has been saved to FILENAME.JSONאפשר לבדוק הגדרת xDS מפורטת על ידי עיון בקובץ ה-JSON. הפלט הזה מכיל את הסטטוס של הגדרות xDS ספציפיות שנשלחות על ידי Cloud Service Mesh ללקוח באמצעות זרם gRPC מצטבר (ADS).
-
ממשקי API ישנים יותר
מעדכנים את קובץ ה-YAML שיצרתם בשלב קביעה אילו לקוחות מחוברים כרגע ל-Cloud Service Mesh. מוסיפים שדה
node-idשמשתמש במזהה הלקוח כערך שלו.node_matchers: - node_id: exact: "CLIENT_ID" node_metadatas: - path: - key: TRAFFICDIRECTOR_GCP_PROJECT_NUMBER value: string_match: exact: "PROJECT_NUMBER" - path: - key: TRAFFICDIRECTOR_NETWORK_NAME value: string_match: exact: "NETWORK_NAME"מחליפים את הערכים הבאים:
-
CLIENT_ID: המזהה של הלקוח שאתם בודקים את ההגדרה שלו. לדוגמה:f38a59c1-4428-42f1-be81-e02eb994f9dd~10.128.0.6 -
PROJECT_NUMBER: המזהה הייחודי שלGoogle Cloud הפרויקט -
NETWORK_NAME: רשת ה-VPC שצוינה על ידי כלל ההעברה של מיפוי כללי הניתוב
-
מפעילים את לקוח ה-CSDS. הפעלת הלקוח יוצרת קובץ JSON. הקובץ הזה מכיל את ההגדרה שנשלחת ללקוח Cloud Service Mesh.
csds-client \ -service_uri trafficdirector.googleapis.com:443 \ -platform gcp \ -authn_mode auto \ -api_version v3 \ -request_file PATH_TO_CSDS_REQUEST_YAML_FILE \ -output_file FILENAME.JSON
מחליפים את הערכים הבאים:
-
PATH_TO_CSDS_REQUEST_YAML_FILE: הנתיב לקובץ ה-YAML -
FILENAME.JSON: שם לקובץ שבו יישמר הפלט של לקוח CSDS
הפלט אמור להיראות כך:
Client ID xDS stream type Config status 8576d4bf-8f10-40b2-920b-bb6a7cf9f34a~10.168.0.3 ADS LDS SYNCED RDS SYNCED CDS STALE Config has been saved to FILENAME.JSONאפשר לבדוק הגדרת xDS מפורטת על ידי עיון בקובץ ה-JSON. הפלט הזה מכיל את הסטטוס של הגדרות xDS ספציפיות שנשלחות על ידי Cloud Service Mesh ללקוח באמצעות זרם gRPC מצטבר (ADS).
-
ערכי הסטטוס
בטבלה הבאה מפורטים ערכי הסטטוס של הגדרת xDS שעשויים להופיע.
| ערך | תיאור |
|---|---|
UNKNOWN |
(ברירת מחדל) פרטי הסטטוס לא זמינים או לא ידועים. |
SYNCED |
Cloud Service Mesh שלח את ההגדרה ללקוח וקיבל ממנו ACK. |
ERROR |
Cloud Service Mesh שלח את ההגדרה ללקוח וקיבל ממנו את NACK. |
STALE |
Cloud Service Mesh שלח את ההגדרה ללקוח, אבל לא קיבל ממנו ACK או NACK. |
NOT_SENT |
ההגדרה לא נשלחה. |
N/A |
הלקוח CSDS לא כלל את מזהה הצומת. כל מקורות הנתונים המחוברים מוחזרים, אבל סטטוס ההגדרה לא זמין. |
תצוגה חזותית ומעקב
לכלי הקוד הפתוח של CSDS יש תכונות נוספות שאולי תרצו להשתמש בהן, כמו ויזואליזציה ומעקב מתמשך. מידע נוסף על התכונות האלה זמין בקובץ ה-README במאגר הקוד הפתוח.
הודעת השגיאה
יכול להיות שתראו את הודעת השגיאה הבאה מלקוח CSDS כשמפעילים את Cloud Service Mesh API רק בפרויקט:
rpc error: code = NotFound desc = Requested entity was not found.
זה תקין. ההגדרה של Cloud Service Mesh מוגבלת לכל רשת. אם עדיין לא יצרתם רשת והפעלתם את לקוח CSDS, תוצג לכם הודעת השגיאה הזו.
מגבלות
- פרטי נקודת הקצה לא נכללים בתגובת CSDS כי המידע הזה לא זמין ב-API של CSDS v3.
- מזהה הצומת של כל לקוח חייב להיות ייחודי ב-Service mesh. אם כמה לקוחות חולקים את אותו מזהה צומת, רק הגדרה אחת מוחזרת – ההגדרה של הלקוח שהתחבר לאחרונה ל-Cloud Service Mesh.
- יכול להיות שלפעמים תראו קו נטוי הפוך (/) בשדה של מזהה הצומת בקובץ YAML. במקרה כזה, צריך להוסיף לוכסן נוסף כדי לבטל את המשמעות של הלוכסן כשמבצעים שאילתה ב-CSDS API כדי לקבל מידע על התצורה. זו בעיה מוכרת.
המאמרים הבאים
- מידע כללי על פתרון בעיות ב-Cloud Service Mesh זמין במאמר פתרון בעיות בפריסות שמשתמשות ב-Envoy.
- כדי לפתור בעיות בהגדרות כשפורסים שירותי gRPC בלי שרת Proxy, אפשר לעיין במאמר בנושא פתרון בעיות בפריסות שמשתמשות ב-gRPC בלי שרת Proxy.