קישורים מהירים ב-Ambient Networking מאפשרים לקשר בין שירות מקור ב-Cloud Run לשירות יעד ב-Cloud Run באותו פרויקט ובאותו אזור, בלי לכתוב קוד אימות באפליקציה או להגדיר Service mesh.
כששירות Cloud Run קורא לשירות Cloud Run אחר שמוגן על ידי ניהול זהויות והרשאות גישה (IAM), הבקשה חייבת לכלול טוקן של מזהה OpenID Connect (OIDC) כדי שהיעד יוכל לאמת את הזהות וההרשאות של הגורם ששלח את הקריאה. בלי קישור מהיר, צריך לכתוב קוד לאימות בין שירותים באפליקציה כדי לאחזר ולצרף אסימונים משרת המטא-נתונים, או להגדיר משאבים של Cloud Service Mesh כמו רשת VPC, שירותים לקצה העורפי וכללי ניתוב. קישור מהיר מעביר את עבודת האימות והניתוב לקונטיינר המשני (sidecar) המנוהל באופן מלא, כך שקוד האפליקציה נשאר נייד ומתמקד בלוגיקה העסקית.
תרחישים לדוגמה
אפשר להשתמש בקישורים מהירים בתרחישים הבאים:
- העברת האימות בין שירותים מקוד האפליקציה: חיבור שירות Cloud Run שמבצע קריאה לשירות Cloud Run שמוגן באמצעות IAM, באמצעות HTTP רגיל. ה-sidecar של Ambient מאחזר ומחדיר באופן אוטומטי את אסימון מזהה ה-OIDC של שירות המקור, ומצפין את הבקשה באמצעות HTTPS.
- הפשטה של כתובות URL של יעדים באמצעות שמות מארחים בהתאמה אישית: מגדירים שם מארח בהתאמה אישית בקישור המהיר באמצעות הדגל
--matches-hostname, כדי שאפליקציית המקור תשלח בקשות לכתובת לוגית, כמוhttp://my-backend, במקום להגדיר באופן קשיח את כתובת ה-URL הדטרמיניסטית של היעד. אם שירות היעד משתנה, אתם יכולים ליצור מחדש את הקישור המהיר כך שיפנה ליעד החדש, בלי לשנות או לפרוס מחדש את קוד האפליקציה של המקור. - פישוט של קריאות לשירותים מנקודה לנקודה בלי רשת שירות: הזרקה אוטומטית של פרטי כניסה בין שירותי Cloud Run בלי להקצות רשת VPC, קבוצות של נקודות קצה ברשת, שירותים לקצה העורפי או רשומות Cloud DNS שנדרשות על ידי Cloud Service Mesh.
בטבלה הבאה מוצגת השוואה בין השלבים להגדרת תקשורת מאומתת משירות לשירות, עם ובלי קישור מהיר:
| שלב | בלי קישור מהיר | באמצעות קישור מהיר |
|---|---|---|
| 1. פריסת שירות היעד | פורסים את שירות היעד של Cloud Run עם דרישה לאימות IAM (--no-allow-unauthenticated). |
גם אני. |
| 2. מתן הרשאת הפעלה | מקצים את התפקיד "הפעלת Cloud Run" (roles/run.invoker) בשירות היעד לחשבון השירות של שירות המקור. |
גם אני. |
| 3. הגדרת הבקשה היוצאת | כותבים קוד באפליקציית המקור כדי לאחזר טוקן של מזהה OIDC לכתובת היעד, ומצרפים אותו לכותרת Authorization: Bearer באמצעות HTTPS. |
שולחים בקשת http:// פשוטה לכתובת היעד או לשם המארח המותאם אישית, בלי קוד אימות באפליקציית המקור. |
| 4. פריסת שירות המקור | פורסים את שירות המקור של Cloud Run. | פורסים את שירות המקור ב-Cloud Run כשAmbient Networking מופעל, ואז יוצרים קישור מהיר בין שירותי המקור והיעד שנפרסו. |
ארכיטקטורה
כשמפעילים Ambient Networking בשירות Cloud Run של המקור ויוצרים קישור מהיר, Cloud Run מגדיר את קונטיינר ה-sidecar של Envoy שמנוהל באופן מלא ופועל לצד קונטיינר האפליקציה בכל מכונה של קונטיינר.
כשהאפליקציה שולחת בקשת HTTP פשוטה לכתובת ה-URL הדטרמיניסטית של שירות היעד או לשם מארח בהתאמה אישית שהגדרתם בקישור המהיר, הקונטיינר המשני (sidecar) של Ambient מבצע באופן אוטומטי את הפעולות הבאות:
- מיירט בקשות HTTP יוצאות שמיועדות לשירות היעד.
- אחזור של טוקן מזהה OIDC בשביל חשבון השירות של שירות המקור, והוספה שלו לכותרת
Authorization. - מצפין את הבקשה ומעביר אותה באמצעות HTTPS (TLS חד-כיווני) לשירות Cloud Run המיועד, שמאמת את הרשאות ה-IAM של מבצע הקריאה.
קישוריות לרשת ומישור הנתונים
קישור מהיר מגדיר יירוט של בקשות יוצאות והזרקת פרטי כניסה ב-sidecar של הסביבה, אבל הוא לא מחליף את נתיב הרשת הבסיסי בין השירותים שלכם. אתם עדיין צריכים לוודא ששירות המקור יכול להגיע לנתיב ה-ingress של שירות היעד:
- התעבורה הנכנסת של היעד מוגדרת ל-All: לא נדרשת רשת VPC או הגדרת תעבורה יוצאת בשירות המקור.
- תעבורת הנתונים הנכנסת (ingress) של היעד מוגדרת כ-Internal או כ-Internal and Cloud מאזני עומסים (LB): אתם צריכים לנתב את תעבורת הנתונים היוצאת (egress) משירות המקור דרך רשת VPC מורשית באמצעות Direct VPC egress או חיבור לרשת VPC עם גישה פרטית ל-Google מופעלת. מידע נוסף זמין במאמר קבלת בקשות משירותי Cloud Run אחרים.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אנחנו ממליצים למשתמשים חדשים ב- Google Cloudליצור חשבון כדי שיוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
מפעילים את Cloud Run API, את Network Services API ואת Traffic Director API, אם הם עדיין לא מופעלים.
התפקידים שנדרשים כדי להפעיל ממשקי API
כדי להפעיל ממשקי API, צריך את ההרשאה
serviceusage.services.enable. אם אתם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, אתם יכולים לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים- מוודאים שיש לכם שירות Cloud Run קיים כמקור ושירות Cloud Run קיים כיעד, באותו פרויקט ובאותו אזור.
- מוודאים שAmbient Networking מופעל עם ההיקף
globalבשירות Cloud Run של המקור. לדוגמה, מריצים את הפקודהgcloud beta run services update SOURCE_SERVICE --ambient-networking --ambient-scope=global --region=REGION, וזוכרים קודם להגדיל את מגבלות המעבד (CPU) והזיכרון של השירות. -
בדף התמחור של Cloud Run מוסבר על השימוש ב-sidecar של Ambient Networking. במהלך גרסת טרום-השקה (Preview), לא מתבצע חיוב על תכונות אווירה.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות להגדרת קישורים מהירים, בקשו מהאדמין לתת לכם את התפקידים הבאים ב-IAM:
-
הגדרת הקישור המהיר:
מפתח Cloud Run (
roles/run.developer) ומשתמש בחשבון שירות (roles/iam.serviceAccountUser) בפרויקט -
ניהול משאבים של קישור מהיר: אדמין של Network Services (
roles/networkservices.admin) בפרויקט
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
זהות השירות של שירות המקור ב-Cloud Run צריכה גם את התפקידים הבאים בפרויקט:
- לקוח של Traffic Director (
roles/trafficdirector.client) - סוכן Cloud Trace (
roles/cloudtrace.agent)
כדי להקצות את התפקידים האלה לזהות השירות, משתמשים ב-gcloud:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:RUN_CLIENT_SA@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/trafficdirector.client" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:RUN_CLIENT_SA@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/cloudtrace.agent"
מחליפים את מה שכתוב בשדות הבאים:
- PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
- RUN_CLIENT_SA: השם של חשבון השירות שמצורף לשירות המקור ב-Cloud Run.
אם לזהות של שירות Cloud Run אין את התפקידים האלה, השירות עדיין נפרס, אבל תכונות שתלויות בAmbient Networking לא פועלות. ההתנהגות הזו שונה מ-Cloud Service Mesh, שבו אי אפשר לפרוס את שירות Cloud Run אם חסרים התפקידים הנדרשים.
מגבלות
אלה המגבלות שחלות על קישורים מהירים:
- אפשר להשתמש רק בשירותי Cloud Run כמשאבי מקור ויעד. אין תמיכה במשימות, במאגרי עובדים ובמכונות של Cloud Run.
- אין תמיכה בהגדרות אישיות בכמה פרויקטים ובכמה אזורים. שירות המקור של Cloud Run ושירות היעד של Cloud Run צריכים להיות באותו פרויקט ובאותו אזור.
- כדי להשתמש בקישורים מהירים, צריך להפעיל Ambient Networking עם ההיקף
globalבשירות המקור. אם שירות המקור משתמש בהיקףregional, הקישור המהיר נוצר אבל התנועה לא מנותבת. - לפני שיוצרים את הקישור המהיר, צריך ליצור את שירותי המקור והיעד ב-Cloud Run. אי אפשר ליצור אירועים שלא לפי הסדר. אם תמחקו שירות יעד, הקישור המהיר ימשיך להציג את ההגדרות הישנות עד שתמחקו או תיצרו מחדש את הקישור המהיר.
- אי אפשר לעדכן את שירות המקור, שירות היעד או שם המארח בהתאמה אישית של קישור מהיר קיים. הפקודה
gcloud beta network-services express-links updateמעדכנת רק את תיאור הקישור המהיר. כדי לשנות את הגדרות הניתוב, מוחקים את הקישור המהיר ויוצרים אותו מחדש. - בשירותי Cloud Run של היעד, צריך להפעיל את כתובת ה-URL שמוגדרת כברירת מחדל ב-
run.app, גם אם משתמשים בכתובות URL מותאמות אישית, בדומיינים מותאמים אישית או מגדירים שם מארח מותאם אישית באמצעות הדגל--matches-hostname. - בקשות שנשלחות לכתובת ה-URL הלא דטרמיניסטית של היעד לא נתפסות ונכשלות עם השגיאה
403 Forbidden. אם לשירות היעד אין כתובת URL דטרמיניסטית כי השם המשולב של השירות ומספר הפרויקט ארוכים מ-63 תווים, צריך לציין את--matches-hostname. אחרת, יצירת הקישור המהיר תיכשל ותופיע השגיאהCloud Run Service name is too long. - כשמציגים את הסטטוס המלא של קישור מהיר, מוחזר רק מידע על שירות היעד. יכול להיות שפרטים על גרסאות המקור של Cloud Run ועל האימות שבוצע לא יופיעו או שהנתונים יהיו לא עדכניים. ההגדרה הזו לא משפיעה על האופן שבו הקישור המהיר מנתב את התנועה או מאמת אותה.
- אין תמיכה בשירותי Cloud Run במקור שמוגדרים עם Agent Identity ואסימונים שמקושרים ל-mTLS.
- אי אפשר להשתמש בשירותי Cloud Run כמקור אם הם מוגדרים לנתב תעבורת נתונים יוצאת דרך Agent Gateway ב-Cloud Run ו-Secure Web Proxy. קישורים מהירים דורשים את ההיקף הגלובלי של Ambient Networking, ו-Agent Gateway דורש את ההיקף האזורי.
- אם בקשה יוצאת משירות המקור כבר כוללת כותרת
Authorization, הקישור המהיר מעביר את הבקשה עם הכותרת הזו בלי לשנות אותה ובלי להוסיף טוקן. אין תמיכה בהזרקה אוטומטית של אסימונים לכותרתX-Serverless-Authorization. - אין תמיכה בתנועה שנוצרת מקונטיינרים של ארגז חול ב-Cloud Run.
- אי אפשר להשתמש בקישורים מהירים כדי להעביר תנועה לשירותי Cloud Run שמוגנים באמצעות שרת proxy לאימות זהויות (IAP).
- כל קישור מהיר תומך בשירות Cloud Run אחד, ואפשר ליצור עד 5,000 קישורים מהירים בכל פרויקט.
הגדרת קישור מהיר
כדי לקשר את השירותים של Cloud Run, יוצרים קישור מהיר שמציין את שירות המקור ואת שירות היעד, ואז מקצים את התפקיד "הפעלת Cloud Run" בשירות היעד.
התחברות לשירות אחר של Cloud Run
כדי לקשר בין שירות מקור לשירות יעד ב-Cloud Run, יוצרים קישור מהיר באמצעות gcloud או YAML.
gcloud
משתמשים בפקודה gcloud beta network-services express-links create כדי ליצור קישור מהיר:
gcloud beta network-services express-links create EXPRESS_LINK_NAME \ --location=global \ --source-services=//run.googleapis.com/projects/PROJECT_ID/locations/REGION/services/SOURCE_SERVICE \ --destination-services=//run.googleapis.com/projects/PROJECT_ID/locations/REGION/services/DESTINATION_SERVICE
מחליפים את מה שכתוב בשדות הבאים:
- EXPRESS_LINK_NAME: שם לקישור המהיר.
- PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
- REGION: האזור שבו פרוסים שירותי Cloud Run.
- SOURCE_SERVICE: השם של שירות המקור ב-Cloud Run.
- DESTINATION_SERVICE: השם של שירות היעד ב-Cloud Run.
אחרי שהפקודה מסתיימת, יכול להיות שיעברו עד 2 דקות עד שהגדרת הניתוב תופץ למכונות של שירות המקור שפועלות.
כברירת מחדל, הקישור המהיר מיירט רק בקשות שנשלחות לכתובת ה-URL הדטרמיניסטית של שירות היעד, ולא לכתובת ה-URL הלא דטרמיניסטית שלו. כדי להשתמש בשם מארח בהתאמה אישית, מעבירים את שם המארח בלי סכימה בדגל --matches-hostname="HOSTNAME", למשל --matches-hostname="DESTINATION_SERVICE", ושולחים בקשות מאפליקציית המקור אל http://HOSTNAME. אם מציינים את הערך --matches-hostname, כתובת ה-URL הדטרמיניסטית מוחלפת במקום להוסיף לה.
YAML
יוצרים קובץ תצורה, לדוגמה,
express-link.yaml:name: "projects/PROJECT_ID/locations/global/expressLinks/EXPRESS_LINK_NAME" source: services: - "//run.googleapis.com/projects/PROJECT_ID/locations/REGION/services/SOURCE_SERVICE" destination: services: - "//run.googleapis.com/projects/PROJECT_ID/locations/REGION/services/DESTINATION_SERVICE"
מחליפים את מה שכתוב בשדות הבאים:
- PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
- REGION: האזור שבו השירותים פרוסים.
- EXPRESS_LINK_NAME: שם לקישור המהיר.
- SOURCE_SERVICE: השם של שירות המקור ב-Cloud Run.
- DESTINATION_SERVICE: השם של שירות היעד ב-Cloud Run.
מייבאים את קובץ ה-YAML באמצעות הפקודה
gcloud beta network-services express-links import:gcloud beta network-services express-links import EXPRESS_LINK_NAME \ --location=global \ --source=YAML_FILENAME.yaml
מחליפים את מה שכתוב בשדות הבאים:
- EXPRESS_LINK_NAME: שם לקישור המהיר.
- YAML_FILENAME: השם של קובץ ה-YAML.
מתן הרשאות הפעלה בשירות היעד
כדי לאפשר לשירות המקור להפעיל שירות יעד שמוגן באמצעות IAM, צריך להקצות את התפקיד מפעיל Cloud Run (roles/run.invoker) לחשבון השירות של שירות המקור בשירות Cloud Run של היעד. השלב הזה נדרש כדי שהאימות יפעל במישור הנתונים.
gcloud run services add-iam-policy-binding DESTINATION_SERVICE \ --member="serviceAccount:SOURCE_SA@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/run.invoker" \ --region=REGION
מחליפים את מה שכתוב בשדות הבאים:
- DESTINATION_SERVICE: השם של שירות היעד ב-Cloud Run.
- SOURCE_SA: השם של חשבון השירות שמצורף לשירות המקור ב-Cloud Run.
- PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
- REGION: האזור שבו פרוס שירות היעד.
אימות הסטטוס של הקישור המהיר
כדי לראות את ההגדרות הבסיסיות של הקישור המהיר, משתמשים בפקודה gcloud beta network-services express-links describe:
gcloud beta network-services express-links describe EXPRESS_LINK_NAME \ --location=global
כדי לראות את הסטטוס המלא של הקישור המהיר, כולל connectionStatus (סוג הנתיב הפעיל, שמות המארחים התואמים ו-URI של גרסת המקור) ו-cloudRunSourceInfo (שיטות האימות שהוגדרו ורשת ה-VPC), צריך לכלול את ?view=EXPRESS_LINK_VIEW_FULL# בשם המשאב:
gcloud beta network-services express-links describe 'EXPRESS_LINK_NAME?view=EXPRESS_LINK_VIEW_FULL#' \ --location=global
מחליפים את EXPRESS_LINK_NAME בשם של הקישור המהיר. כששולחים שאילתה לתצוגה המלאה, צריך להשאיר את המירכאות הבודדות ואת התו # בסוף.
מחיקה או יצירה מחדש של קישור מהיר
כדי להסיר קישור מהיר ולהפסיק את ההזרקה האוטומטית של פרטי הכניסה ואת יירוט התנועה משירות המקור, משתמשים בפקודה gcloud beta network-services express-links delete:
gcloud beta network-services express-links delete EXPRESS_LINK_NAME \ --location=global
מחליפים את EXPRESS_LINK_NAME בשם של הקישור המהיר.
כדי להפנות קישור מהיר קיים לשירות יעד אחר או לשנות את ההגדרה של --matches-hostname, מוחקים את הקישור המהיר באמצעות הפקודה הקודמת ואז יוצרים קישור מהיר חדש עם ההגדרות המעודכנות.
המאמרים הבאים
- איך מגדירים Ambient Networking לשירותי Cloud Run
- מידע על Agent Gateway ב-Cloud Run
- מידע ולמידה על אימות בין שירותים ב-Cloud Run
- איך מגבילים את תעבורת הנתונים הנכנסת (ingress) של נקודות קצה ברשת לשירותי Cloud Run