הגדרת Cloud Service Mesh ל-Cloud Run
בדף הזה מוסבר איך להגדיר את Cloud Service Mesh כך שיפעל במגוון תשתיות מחשוב לשירותי Cloud Run.
בעזרת Cloud Service Mesh אפשר להפעיל יכולות מתקדמות לניהול תעבורת נתונים ברשת, כמו פיצול תעבורת נתונים לפי משקל ואיזון עומסים גלובלי, וגם מדיניות ניראות ואבטחה לתעבורת נתונים משירות אחד של Cloud Run לשירות אחר. הוא גם מספק פתרון מנוהל מלא למישור הנתונים, שמסיר את הנטל התפעולי של תחזוקת רכיבי sidecar משלכם ב-Service mesh.
לפני שמתחילים
להכיר את Cloud Service Mesh.
מגדירים את הפרויקט:
gcloud config set core/project
PROJECT_IDבמסוף Google Cloud , מפעילים את ממשקי ה-API הבאים בפרויקט:
אם אתם משתמשים במחבר Serverless VPC Access ולא ב-Direct VPC ליציאה מהרשת.
מעדכנים את הרכיבים של
gcloudלגרסה האחרונה (488.0.0 ואילך):gcloud components update
מגבלות
יכול להיות ששירותי Cloud Run שמשתמשים ב-Cloud Service Mesh יחוו עלייה בחביון של הפעלה במצב התחלתי (cold start). בקטע טיפים כלליים לפיתוח במסמכי העזרה של Cloud Run יש עצות לשיפור זמני ההפעלה.
התפקידים הנדרשים
כדי לקבל את ההרשאות שנדרשות להגדרה ולפריסה של שירותי Cloud Run, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:
- Cloud Run Developer (
roles/run.developer) בשירות Cloud Run - משתמש בחשבון שירות
(
roles/iam.serviceAccountUser) בזהות השירות
לחשבון השירות של לקוח Cloud Run צריכים להיות גם התפקידים הבאים:
- Traffic Director Client
(
roles/trafficdirector.client) כדי לגשת אל ממשקי ה-API לניתוב שירותים - Cloud Trace Agent (
roles/cloudtrace.agent) כדי להפעיל מעקב
רשימת ההרשאות והתפקידים ב-IAM שמשויכים ל-Cloud Run מופיעה במאמרים תפקידי IAM ב-Cloud Run והרשאות IAM ב-Cloud Run. אם שירות Cloud Run שלכם מתקשר עםGoogle Cloud ממשקי API, כמו ספריות לקוח ב-Cloud, כדאי לעיין במדריך להגדרת זהות שירות. מידע נוסף על מתן תפקידים זמין במאמרים הרשאות פריסה וניהול גישה.
קריאה בין שירותי Cloud Run באמצעות Cloud Service Mesh
Cloud Run משתמש בממשקי API לניתוב שירותים של Cloud Service Mesh.
ממשקי ה-API האלה מאפשרים לשירות Cloud Run להפעיל שירותי Cloud Run אחרים באמצעות כתובת URL מותאמת אישית, במקום כתובת ה-URL run.app שסופקה. בנוסף, Cloud Run מבצע אימות אוטומטי לשירות היעד ב-Cloud Run, כך שלא צריך להגדיר אימות משלכם כדי לצרף פרטי כניסה לבקשה לשירותים אחרים ב-Cloud Run.
כדי לקרוא משירות אחד ב-Cloud Run לשירות אחר באמצעות Cloud Service Mesh, צריך לבצע את השלבים הבאים:
- הגדרת Cloud Service Mesh
- הגדרה של Cloud DNS
- יצירת שירות היעד ב-Cloud Run
- יצירת ה-NEG ללא שרת
- יצירת שירות לקוח ב-Cloud Run
- התקשרות לשירות מלקוח הרשת
הגדרת Cloud Service Mesh
כדי ליצור נתיב שירות באמצעות כתובת ה-URL שמוגדרת כברירת מחדל, שומרים את המפרט
Meshבקובץ בשםmesh.yaml:name:
MESH_NAMEמחליפים את
MESH_NAMEבשם של משאב הרשת.כדי לייבא את משאב
Meshמהמפרט, מריצים את הפקודה הבאה:gcloud network-services meshes import
MESH_NAME\ --source=mesh.yaml \ --location=globalמחליפים את
MESH_NAMEבשם של משאב הרשת.
הגדרת Cloud DNS
אם אתם משתמשים בנקודת קצה (endpoint) מסוג Private Service Connect עם כתובת URL מלאה מסוג run.app בתור שם המארח, אתם יכולים לדלג על ההגדרה של Cloud DNS ולעבור אל הקטע הבא, כי רק כתובות IP פרטיות נרשמות.
כשלקוח של רשת Mesh קורא לשירות היעד, צריך להיות אפשר לפתור את שם המארח שמשמש בבקשה באמצעות DNS. אפשר להשתמש בכל כתובת IP תקינה מסוג RFC 1918, כי קובץ ה-sidecar מתעד את כל תעבורת ה-IP לטווחי כתובות ה-IP האלה ומפנה אותה מחדש בהתאם.
בדוגמה הבאה מוצג אופן היצירה של רשומת wildcard * באזור Cloud DNS שמתפרשת ככתובת IP יחידה. אם אתם לא רוצים להשתמש בתחום DNS בלעדי של Cloud DNS, צרו רשומת Cloud DNS לכל שם מארח שמתאים לשירותי Cloud Run שאתם רוצים שיהיה אפשר לגשת אליהם מהרשת.
כדי ליצור רשומת DNS ב-Cloud DNS באזור בלעדי, מריצים את הפקודות הבאות:
יצירת תחום DNS מנוהל פרטי ב-Cloud DNS עבור רשת שירותים.
gcloud dns managed-zones create
MESH_NAME\ --description="Domain forDOMAIN_NAMEservice mesh routes" \ --dns-name=DOMAIN_NAME. \ --networks=VPC_NETWORK_NAME\ --visibility=privateיוצרים רשומת DNS בתוך האזור המנוהל הפרטי החדש. מוודאים שכתובת ה-IP
10.0.0.1לא נמצאת בשימוש.gcloud dns record-sets create "*.
DOMAIN_NAME." \ --type=A \ --zone="MESH_NAME" \ --rrdatas=10.0.0.1 \ --ttl=3600מחליפים את מה שכתוב בשדות הבאים:
-
DOMAIN_NAME: השם של דומיין ה-DNS. -
MESH_NAME: שם המשאב של רשת ה-mesh. -
VPC_NETWORK_NAME: השם של רשת ה-VPC, לדוגמה, default.
-
גישה לשירותים פנימיים באמצעות Cloud Service Mesh
ב-Cloud Run אפשר להגביל את תעבורת הרשת הנכנסת ל'פנימית'. אם ההגבלה הזו מופעלת בשירות שלכם, אפשר להגדיר את התנועה שעוברת מהרשת שלכם דרך רשת הענן הווירטואלי הפרטי (VPC) כ'פנימית' כשמפעילים נתיב גישה ל-Cloud Run.
כדי לגשת לשירותים פנימיים באמצעות Cloud Service Mesh, משתמשים באחת מהשיטות הבאות:
- הגדרת גישה פרטית ל-Google עבור רשת ה-VPC לא צריך להגדיר רשומת DNS בהתאמה אישית.
- מצרפים נקודת קצה מסוג Private Service Connect ל-Cloud Service Mesh.
כדי לעשות זאת, צריך להגדיר רשומת DNS מותאמת אישית לכתובת ה-URL של ברירת המחדל
*.run.appכדי להשתמש בכתובת נקודת הקצה של Private Service Connect.
יצירת שירות היעד ב-Cloud Run
הערה: אי אפשר להשבית את כתובת ה-URL שמוגדרת כברירת מחדל ביעד Cloud Run.
פריסה של שירות חדש או קיים ב-Cloud Run:
gcloud run deploy
DESTINATION_SERVICE_NAME\ --no-allow-unauthenticated \ --region=REGION\ --image=IMAGE_URLמחליפים את מה שכתוב בשדות הבאים:
-
DESTINATION_SERVICE_NAME: השם של שירות Cloud Run ביעד. -
REGION: שם האזור. -
IMAGE_URL: הפניה לקובץ אימג' בקונטיינר, למשלus-docker.pkg.dev/cloudrun/container/hello:latest.
-
יצירת קבוצה של נקודות קצה ברשת (NEG) בלי שרת (serverless)
כדי ליצור את קבוצת ה-NEG של היעד, מריצים את הפקודה הבאה:
gcloud compute network-endpoint-groups create
DESTINATION_SERVICE_NAME-neg \ --region=REGION\ --network-endpoint-type=serverless \ --cloud-run-service=DESTINATION_SERVICE_NAMEמחליפים את מה שכתוב בשדות הבאים:
-
REGION: שם האזור. -
DESTINATION_SERVICE_NAME: השם של שירות Cloud Run ביעד.
-
יוצרים שירות פנימי לניהול עצמי של קצה עורפי שמפנה אל ה-NEG ללא שרת.
יוצרים את שירות הקצה העורפי:
gcloud compute backend-services create
DESTINATION_SERVICE_NAME-REGION\ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGEDמחליפים את
DESTINATION_SERVICE_NAMEבשם של שירות היעד ואתREGIONבשם של האזור.מוסיפים את העורף בלי שרת (serverless) לשירות לקצה העורפי:
gcloud compute backend-services add-backend
DESTINATION_SERVICE_NAME-REGION\ --global \ --network-endpoint-group=DESTINATION_SERVICE_NAME-neg \ --network-endpoint-group-region=REGIONמחליפים את
DESTINATION_SERVICE_NAMEבשם של שירות היעד ואתREGIONבשם של האזור.
יוצרים נתיב HTTP שמפנה לשירות הקצה העורפי.
המשאב
Meshוהשירותים מוגדרים. מקשרים אותם למשאבHTTPRouteשמשייך שם מארח לשירות קצה עורפי.יוצרים את
HTTPRouteהמפרט ושומרים אותו בקובץ בשםhttp_route.yaml:name: "
DESTINATION_SERVICE_NAME-route" hostnames: - "DESTINATION_SERVICE_NAME.DOMAIN_NAME" meshes: - "projects/PROJECT_ID/locations/global/meshes/MESH_NAME" rules: - action: destinations: - serviceName: "projects/PROJECT_ID/locations/global/backendServices/DESTINATION_SERVICE_NAME-REGION"מגדירים את שמות המארחים לשמות שרוצים להשתמש בהם כדי לפנות לשירות. כל הלקוחות באותו Service mesh יכולים להתקשר לשירות הזה באמצעות כתובת ה-URL
http://<HOSTNAME>, ללא קשר לאזור ולפרויקט של המתקשר. אם הגדרתם את Cloud DNS לשימוש בכתובת IP פרטית, שם המארח של המסלול יכול להיות גם כתובת ה-URL המלאה שלrun.app. במקרה כזה, אפשר לדלג על שלב ההגדרה של Cloud DNS.מחליפים את מה שכתוב בשדות הבאים:
-
DESTINATION_SERVICE_NAME: השם של שירות Cloud Run ביעד. -
DOMAIN_NAME: השם של דומיין ה-DNS. -
PROJECT_ID: מזהה הפרויקט -
MESH_NAME: השם של הרשת. -
REGION: שם האזור.
-
יוצרים את המשאב
HTTPRouteבאמצעות המפרט בקובץhttp_route.yaml:gcloud network-services http-routes import
DESTINATION_SERVICE_NAME-route \ --source=http_route.yaml \ --location=globalמקצים את התפקיד Cloud Run Invoker (
roles/iam.invoker) בשירות היעד של Cloud Run על ידי הרצת הפקודה הבאה:gcloud run services add-iam-policy-binding
DESTINATION_SERVICE_NAME\ --regionREGION\ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/run.invokerמחליפים את מה שכתוב בשדות הבאים:
-
DESTINATION_SERVICE_NAME: השם של שירות Cloud Run ביעד. -
REGION: שם האזור. -
PROJECT_NUMBER: מספר הפרויקט.
-
יצירת שירות לקוח ב-Cloud Run
כשיוצרים שירות לקוח ב-Cloud Run, נוצר Envoy sidecar שהמשאבים שלו קשורים ל-QPS ולגודל הכולל של התצורה. ברוב המקרים, השימוש במעבד הוא פחות מאחוז אחד של vCPU, והשימוש בזיכרון הוא פחות מ-50MB.
צריכה להיות לכם גישה לתעבורת נתונים יוצאת (egress) מהרשת ברשת של ענן וירטואלי פרטי (VPC).
כדי ליצור את שירות הלקוח לבדיקה, פורסים את אפליקציית fortio ב-Cloud Run כדי לאפשר העברת תנועה לנתיבי HTTP:
gcloud beta run deploy
CLIENT_SERVICE_NAME\ --region=REGION\ --image=fortio/fortio \ --network=VPC_NETWORK_NAME\ --subnet=SUBNET_NAME\ --mesh="projects/PROJECT_ID/locations/global/meshes/MESH_NAME"מחליפים את מה שכתוב בשדות הבאים:
-
CLIENT_SERVICE_NAME: השם של שירות הלקוח ב-Cloud Run. -
REGION: שם האזור. -
VPC_NETWORK_NAME: השם של רשת ה-VPC, לדוגמה, default. -
SUBNET_NAME: השם של רשת המשנה, לדוגמה, default. -
PROJECT_ID: מזהה הפרויקט. -
MESH_NAME: שם משאב הרשת.
-
התקשרות לשירות מלקוח של רשת Mesh
כדי להעביר בקשה למסלול היעד באמצעות אפליקציית הבדיקה fortio מהקטע הקודם יצירת שירות לקוח:
מריצים את הפקודה הבאה כדי לאחזר את כתובת ה-URL של שירות הלקוח של Cloud Run שיצרתם:
TEST_SERVICE_URL=$(gcloud run services describe
CLIENT_SERVICE_NAME\ --region=REGION--format="value(status.url)" \ --project=PROJECT_ID)מחליפים את מה שכתוב בשדות הבאים:
-
CLIENT_SERVICE_NAME: השם של שירות הלקוח ב-Cloud Run. -
REGION: שם האזור. -
PROJECT_ID: מזהה הפרויקט.
-
משתמשים בפקודה
curlכדי לשלוח בקשה לנתיב היעד של נקודת הקצה של Fortio מהשלב הקודם:curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" "$TEST_SERVICE_URL/fortio/fetch/
DESTINATION_SERVICE_NAME.DOMAIN_NAME"מחליפים את מה שכתוב בשדות הבאים:
-
DESTINATION_SERVICE_NAME: השם של שירות Cloud Run ביעד. -
DOMAIN_NAME: השם של דומיין ה-DNS.
-
איך קוראים לקצה עורפי של Compute Engine מ-Cloud Run
כדי לפרוס נתיב שירות של Compute Engine ו-Cloud Service Mesh באמצעות קבוצות של מופעים מנוהלים כשרתי קצה עורפיים, מגדירים את שרת ה-HTTP שמבוסס על Compute Engine ב-Cloud Service Mesh. כך לקוחות Cloud Run יכולים להשתמש בנתיב הזה של שירות הקצה העורפי כדי לשלוח בקשות ישירות למכונות Compute Engine.
השלבים הבאים
- בדיקת הגדרות נפוצות של רשתות ב-Cloud Run לרשתות ציבוריות ופרטיות
- הגדרת רשת פרטית ל-Cloud Run
- הגדרת שרתי Proxy של Envoy עם שירותי HTTP
- ניתוב תעבורה משירותי Cloud Run לעומסי עבודה של Cloud Service Mesh ב-GKE
- ניתוב תעבורה מעומסי עבודה של Cloud Service Mesh לשירותים של Cloud Run