הגדרת שילוב עם Service Directory
במדריך הזה אנחנו מניחים שיש לכם פריסה פעילה של Cloud Service Mesh ושרשמתם לפחות שירות אחד ב-Service Directory. הוראות ההגדרה רלוונטיות גם אם משתמשים ב-Envoy וגם אם משתמשים ב-gRPC ללא proxy.
כדי להשתמש ב-Service Directory וב-Cloud Service Mesh, השלב הראשון הוא לפרסם את השירות ב-Service Directory. למידע כללי, אפשר לעיין במאמר בנושא פרסום שירות ב-Service Directory או במסמכי התיעוד של Service Directory.
אחרי שהשירות נרשם ב-Service Directory, יוצרים קשר בין השירות לבין משאבי ה-API של Cloud Service Mesh. יוצרים שירות לקצה העורפי שמוקדש לשילוב עם Service Directory, כי לשירות לקצה העורפי שמפנה לקשרי שירות לא יכולים להיות קצוות עורפיים או בדיקת תקינות משויכת.
דרישות לגבי כלל העברה וכלל מארח ב-Cloud Service Mesh עם ממשקי ה-API של איזון העומסים
כשמגדירים את Cloud Service Mesh לשימוש עם Service Directory ומשתמשים בממשקי API ישנים יותר של איזון עומסים, צריך לפעול לפי ההנחיות הבאות:
- מוודאים שכלל ההעברה של Cloud Service Mesh משתמש ב
0.0.0.0כתובת IP וירטואלית (VIP). - אם יש לכם אזור פרטי, ודאו שכלל המארח במפת URL תואם לשם ה-DNS ש-Service Directory מגדיר באזור הפרטי של Cloud DNS.
אם לא תפעלו בהתאם להנחיות האלה, סביר להניח שהבקשות היוצאות מהאפליקציות שלכם ייכשלו.
הגדרת נקודת קצה ל-APInetwork-services
לפני שיוצרים שירות לקצה העורפי ומשתמשים בו, צריך לוודא שנקודת הקצה של API network-services
מוגדרת כך שהמשאבים של כבילות השירותים ב-network-services
resources מפנים למקום הנכון. מגדירים את נקודת קצה ל-network-services API באמצעות הפקודה הבאה.
export CLOUDSDK_API_ENDPOINT_OVERRIDES_NETWORKSERVICES="https://networkservices.googleapis.com/"
דרישות לגבי תפקידים והרשאות
לפני שיוצרים פריסה של Cloud Service Mesh, צריך לוודא שיש לכם את ההרשאות והתפקידים הבאים:
הרשאות ותפקידים של כבילת שירות
בקטע הזה לא נדון בהרשאות 'בעלים', 'עריכה' ו'צפייה' ברמת הפרויקט. במאמר מפורטות ההרשאות והתפקידים שנדרשים כדי ליצור, לקרוא, לעדכן ולמחוק משאבים.
| פעולה | הרשאה | תפקידים |
|---|---|---|
| יוצרים כבילת שירות. | networkservices.serviceBindings.create |
אדמין רשתות |
| אחזור של כבילת שירות. | networkservices.serviceBindings.get |
אדמין רשתות, צפייה ברשת |
| הצגת רשימה של שירותים שמקושרים לפרויקט ב- Google Cloud . | networkservices.serviceBindings.list |
אדמין רשתות, צפייה ברשת |
| עדכון של קישורי שירות. | networkservices.serviceBindings.update |
אדמין רשתות |
| מחיקת קישורי שירות. | networkservices.serviceBindings.delete |
אדמין רשתות |
הרשאות שירות של Service Directory
האדמין של Service Directory צריך להעניק את ההרשאה servicedirectory.services.bind לחשבון השירות שמנסה לצרף את הקישור לשירות לשירות Service Directory. כך חשבון השירות יכול להשתמש בשירות Service Directory, כלומר הוא יכול להפנות לשירות Service Directory בהתקשרות לשירות.
אכיפת הרשאות
בדיקות ההרשאות ב-IAM מתבצעות כשמגדירים את Cloud Service Mesh. צריכות להיות לכם ההרשאות הנדרשות כדי ליצור שיוכים לשירותים, וכדי לשייך שיוכים לשירותים לשירותים מסוימים ב-Service Directory. אם ההרשאות הנכונות קיימות, אפשר להגדיר את לקוחות ה-mesh כך שילמדו על שירות Service Directory וישלחו אליו תעבורה.
הבדיקות האלה מתבצעות בזמן ההגדרה, ולכן הסרת הרשאת הקישור בשירות קיים של Service Directory לא משבשת את זרימת התנועה. אחרי שנוצר קישור לשירות, הסרת הרשאה לא משפיעה על היכולת של לקוח רשת ללמוד על שירות Service Directory ולשלוח אליו תעבורה.
כדי למנוע מלקוח רשת Mesh לתקשר עם שירות Service Directory, אפשר להשתמש במנגנונים אחרים:
- הגבלת הגישה לשירות Service Directory. לדוגמה, אפשר להשתמש בכללי חומת אש.
- מוחקים את שירות Service Directory.
- מעדכנים את ההגדרות של Cloud Service Mesh, למשל על ידי הסרת כבילת השירות משירות לקצה העורפי.
שיטות מומלצות
- אמנם אפשר לרשום נקודות קצה באמצעות Service Directory API, אבל מומלץ להשתמש בשילובים שנרשמים אוטומטית ב-Service Directory כשהם זמינים. מידע נוסף על השילובים האלה זמין במאמרים סקירה כללית על Service Directory ל-GKE וסקירה כללית על Service Directory ועל Cloud Load Balancing.
- מומלץ להשתמש באותו מרחב שמות ובאותו שירות בשביל שירות לוגי מסוים, גם אם השירות הזה נפרס באזורים שונים.
שימוש ב-Service Directory לזיהוי שירותים
בתרשים הבא מוצגת סקירה כללית של מצב הסיום של תהליך ההגדרה הזה, כולל ההגדרה, האינטראקציה בין המערכות השונות והאופן שבו בקשה נפתרת בנקודות הקצה של שירות. בדוגמה הזו מניחים שכבר רשמתם שירות ב-Service Directory.
כדי להפוך שירות של Service Directory לזמין ב-Cloud Service Mesh, צריך לבצע את השלבים הבאים.
- יוצרים שירות קצה עורפי חדש ב-Cloud Service Mesh ולא יוצרים קצה עורפי לשירות הקצה העורפי.
- יוצרים קישור גלובלי לשירות Service Directory.
מקשרים את שירות Service Directory לשירות לקצה העורפי הזה. אפשר גם להגדיר שדות וכללי מדיניות נוספים בשירות לקצה העורפי.
יוצרים הגדרת ניתוב חדשה או מעדכנים הגדרה קיימת, כדי שבקשות של לקוחות יוכלו להיות מנותבות לשירות לקצה העורפי החדש.
אי אפשר להגדיר בדיקת תקינות בשירות קצה עורפי שמפנה לקשירת שירות. גם לשירות העורפי לא יכולים להיות עורפיים.
יצירת השילוב
במאמר הזה מוסבר איך לשלב את Cloud Service Mesh עם Service Directory.
יצירת שירות לקצה העורפי
כדי ליצור שירות לקצה העורפי בפריסת Cloud Service Mesh:
יוצרים שירות לקצה העורפי לשימוש עם שירותי Service Directory.
gcloud compute backend-services create td-sd-demo-service \ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGED
יוצרים כבילת שירות שמפנה לשירות Service Directory.
gcloud beta network-services service-bindings create my-sd-binding \ --location global \ --service-directory-region us-east1 \ --service-directory-namespace my-namespace \ --service-directory-service my-service
מקשרים את השירות לשירות הקצה העורפי.
gcloud beta compute backend-services update td-sd-demo-service \ --global \ --service-bindings my-sd-binding
אחרי שיוצרים את שירות הקצה העורפי ומקשרים אליו שירות אחד או יותר של Service Directory, Cloud Service Mesh מתחיל לעקוב אחרי נקודות הקצה שמשויכות לשירות Service Directory. נקודות הקצה הן זוגות נפרדים של IP:יציאה. כדי להגדיר את השירות הזה כניתן לניתוב, צריך להגדיר ניתוב.
הגדרת ניתוב
כדי לעדכן את הגדרות הניתוב, פועלים לפי ההוראות הבאות.
ממשקי API לניתוב שירותים
בדוגמה הבאה אנחנו מניחים שיש לכם משאב Mesh בשם sidecar-
mesh. יוצרים משאב HTTPRoute עם שמות מארחים שמוגדרים ל-myservice.example.com ויעד שמוגדר לשירות הקצה העורפי td-sd-demo-service שיצרתם בקטע הקודם.
יוצרים את המפרט
HTTPRouteושומרים אותו בקובץ בשםhttproute.yaml.name: td-sd-demo-route hostnames: ‐ myservice.example.com meshes: ‐ projects/PROJECT_NUMBER/locations/global/meshes/sidecar-mesh rules: ‐ action: destinations: ‐ serviceName: "projects/PROJECT_NUMBER/locations/global/backendServices/td-sd-demo-service"
מייבאים את המפרט של
HTTPRoute.gcloud network-services httproutes import td-sd-demo-route \ --source=httproute.yaml \ --location=global
Load balacing APIs
בדוגמה הבאה מניחים שכבר יש לכם הגדרת ניתוב בסיסית, כולל מפת URL שנקראת my-url-map.
- קודם יוצרים התאמה למסלול עבור מפת ה-URL הזו. התאמת הנתיבים לא מסובכת. כשמשתמשים בו, הוא מומר ל-
td-sd-demo-service, שיצרתם בשלב הקודם. - בשלב הבא, מוסיפים כלל מארח למפת URL. כלל המארח הזה גורם לשימוש בכלי להתאמת נתיבים אם בקשה מציינת את שם המארח
myservice.example.com.
יוצרים התאמה פשוטה של נתיבים שמפנה לשירות הקצה העורפי.
gcloud compute url-maps add-path-matcher my-url-map \ --global \ --default-service td-sd-demo-service \ --path-matcher-name my-path-matcher
ממפים את שירות לקצה העורפי לכלל מארח חדש במפת URL הקיימת.
gcloud compute url-maps add-host-rule my-url-map \ --global \ --path-matcher-name=my-path-matcher \ --hosts=myservice.example.com
צירוף אותו שירות מכמה אזורים
בעזרת Cloud Service Mesh אפשר לקשר כמה שירותים של Service Directory לאותו שירות לקצה העורפי. לדוגמה, יכול להיות שיש לכם שני שירותים של Service Directory, שכל אחד מהם זהה, אבל עם נקודות קצה באזורים או באזורים שונים. Google Cloud
במילים אחרות, לשירות קצה עורפי גלובלי יחיד יכולים להיות שני קישורי שירות גלובליים, שאחד מהם מצביע על שירות ב-us-east1 והשני מצביע על שירות ב-us-west1.
יוצרים שירות לקצה העורפי בשביל השירות שיובא ל-Service Directory.
gcloud compute backend-services create td-sd-demo-service \ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGED
יוצרים קישור שירות לשירות Service Directory ב-
us-east1.gcloud beta network-services service-bindings create us-east1-binding \ --location global \ --service-directory-region us-east1 \ --service-directory-namespace my-namespace \ --service-directory-service my-service \
יוצרים קישור שירות לשירות Service Directory ב-
us-west1.gcloud beta network-services service-bindings create us-west1-binding \ --location global --service-directory-region us-west1 \ --service-directory-namespace my-namespace \ --service-directory-service my-service \
מאגדים את השירותים
us-east1ו-us-west1לשירות הקצה העורפי.gcloud compute backend-services update td-sd-demo-service \ --global \ --service-bindings us-east1-binding,us-west1-binding
החלת מדיניות מתקדמת לניהול תעבורת נתונים
בקטע הקודם השתמשתם ב-Cloud Service Mesh כדי להגדיר מדיניות ניתוב בשירות Service Directory קיים. אפשר להחיל את התבנית הזו על תרחישים מתקדמים יותר של ניהול תנועה.
בואו נבחן את התרחיש הבא. יש לכם שירות בדיקה קיים שלא נמצא ברשת של Cloud Service Mesh. שירות הבדיקה הוא בק-אנד למאזן עומסים פנימי של אפליקציות (ALB). רוצים להפעיל מחדש תנועה מסוימת של ייצור שמקורה ברשת Cloud Service Mesh לשירות החיצוני הזה.
Cloud Service Mesh יכול לעשות את זה באמצעות RequestMirrorPolicy, שיכול לשלוח תנועה לשירות קצה עורפי אחר כשהבקשה מעובדת. התהליך הזה נקרא גם העתקת בקשה, והוא מאפשר לכם לבדוק את התנועה בלי להשפיע על שירותי הייצור.
אתם יכולים להוסיף או להסיר באופן ידני את נקודת הקצה של שירות הבדיקה לרשת Cloud Service Mesh כדי להפעיל את האפשרות של לקוחות Envoy להעביר תעבורה לשירות בדיקה. אבל התהליך פשוט יותר כשמשתמשים בשילוב של ספריית השירותים.
בדוגמה הזו, מתחילים בהפניה של שירות לקצה העורפי לרישום של Service Directory עבור שירות הבדיקה של התשלומים. לאחר מכן מוסיפים מדיניות שיקוף בקשות לשירות ב-Cloud Service Mesh.
יוצרים שירות לקצה העורפי למדיניות שיקוף הבקשות.
gcloud compute backend-services create payments-test-bes \ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGED
יוצרים כבילת שירות שמפנה לשירות Service Directory.
gcloud beta network-services service-bindings create my-sd-binding \ --location global \ --service-directory-region us-east1 \ --service-directory-namespace my-namespace \ --service-directory-service my-service \
מאגדים את שירות Service Directory לשירות הקצה העורפי לבדיקה.
gcloud beta compute backend-services update payments-test-bes \ --global \ --service-bindings my-sd-binding
עורכים את מפת כתובות ה-URL כדי לשקף בקשות לשירות הבדיקה.
gcloud compute url-maps edit my-url-map \ --region=global
אחרי שהגדרת מפת URL נטענת לעורך, מוסיפים את מדיניות שיקוף הבקשות כדי לשקף בקשות לשירות הקיים של Service Directory.
defaultService: my-project/global/default-service hostRules: - hosts: - '*' pathMatcher: path-matcher-one pathMatchers: - defaultService: my-project/global/default-service name: path-matcher-one pathRules: - paths: - /payments/ service: my-project/global/default-service requestMirrorPolicy: backendService: myproject/global/payments-test-bes
הסרת קישור שירות משירות קצה עורפי
כדי להסיר שירות מקשור משירות הקצה העורפי, מעבירים רשימה חדשה של שירותים מקושרים לפקודה gcloud compute backend-services update. הרשימה החדשה לא יכולה לכלול את קישור השירות שרוצים למחוק:
- כדי להסיר את כל הקישורים לשירותים, מגדירים את הדגל
--no-service-bindings. - כדי להסיר קישורי שירות אחד או יותר: מעבירים רשימה חדשה של קישורי שירות שבה לא מופיעים קישורי השירות שרוצים להסיר, אל הדגל
--service-bindings.
הוספה או הסרה של שיוכים לשירותים
הפקודה bind-service מוסיפה כבילת שירות לקבוצה של כבילות שירות קיימות בשירות לקצה העורפי.
gcloud compute backend-services bind-service BACKEND_SERVICE_NAME \ --service-binding-name SERVICE_BINDING_URL \ --global
הפקודה unbind-service מסירה כבילת שירות ממערך כבילות השירות הקיימות בשירות לקצה העורפי.
gcloud compute backend-services unbind-service BACKEND_SERVICE_NAME \ --service-binding-name SERVICE_BINDING_URL \ --global
הפקודות bind-service ו-unbind-service הן מבנים של Google Cloud CLI. הם לא מבנים ברמת ה-API.
המאמרים הבאים
- מידע על יכולות הניטור והבקרה של השילוב הזה זמין במאמר ניטור ובקרה וניפוי באגים באמצעות Service Directory.