אתם יכולים להפעיל את שירות App Engine כדי לשלוח תעבורת נתונים לרשת VPC משותפת באמצעות Direct VPC egress, בלי שנדרש מחבר של חיבור לרשת (VPC) מאפליקציית serverless.
בדף הזה מוסבר איך להגדיר את הרשאות ה-IAM של App Engine כדי להשתמש בתת-הרשת של רשת ה-VPC המשותפת, ואז להציב את השירות בתת-הרשת המשותפת.
לפני שמתחילים
בקטע הקצאת כתובות IP מוסבר איך להקצות כתובות IP מרשת המשנה.
מגבלות
צריכת כתובות IP: השימוש בכתובות IP בשירות שלכם גדל באופן ישיר עם מספר המופעים הפועלים, ויכולת ההתאמה שלכם מוגבלת על ידי מספר כתובות ה-IP הזמינות ברשת המשנה שבחרתם.
אירועי תחזוקה: יכול להיות שיהיו שיבושים קצרים בחיבור לשירות במהלך אירועי תחזוקה של תשתית הרשת. מומלץ להשתמש בספריות לקוח כדי לטפל באיפוסים מדי פעם של החיבור.
הפעלות במצב התחלתי (cold start): זמני ההפעלה הראשוניים במצב התחלתי תלויים באזור ובמקרה השימוש הספציפי. במקרים נדירים, הפעלה במצב התחלתי (cold start) עשויה להימשך עד דקה.
Direct VPC ingress: App Engine לא תומך ב-Direct VPC ingress.
מספר המכונות: אפשר להגדיר עד 100 מכונות לכל גרסה של App Engine לשימוש ב-Direct VPC egress.
הגדרת הרשאות IAM
לפני ש-App Engine בפרויקט שירות של VPC משותף יכול לגשת לרשת VPC משותפת, צריך לוודא לסוכן השירות של App Engine יש הרשאות מספיקות לשימוש בתת-הרשת.
תפקיד סוכן השירות של App Engine: כדי לגשת לרשת VPC משותפת, צריך להעניק הרשאות מספיקות לסוכן השירות של App Engine על ידי הוספת אחד מהתפקידים הבאים:
משתמש ברשת Compute (
roles/compute.networkUser) בפרויקט המארח של ה-VPC המשותף. ברשתות משנה עם IPv6 חיצוני נדרש גם התפקיד אדמין של כתובות IP ציבוריות ב-Compute (roles/compute.publicIpAdmin).לדוגמה, כדי להעניק את התפקיד Compute Network User, מריצים את הפקודה הבאה:
gcloud projects add-iam-policy-binding HOST_PROJECT_ID \ --member "serviceAccount:service-SERVICE_PROJECT_NUMBER@gcp-gae-service.iam.gserviceaccount.com" \ --role "roles/compute.networkUser"
מחליפים את מה שכתוב בשדות הבאים:
- HOST_PROJECT_ID: מזהה פרויקט המארח של ה-VPC המשותף.
- SERVICE_PROJECT_NUMBER: מספר פרויקט השירות של Shared VPC שבו אתם פורסים את שירות App Engine.
התפקיד Compute Network Viewer (
compute.networkViewer) בפרויקט המארח של ה-VPC המשותף, והתפקיד Compute Network User (compute.networkUser) ברשת המשנה של ה-VPC המשותף. ברשתות משנה עם IPv6 חיצוני נדרש גם התפקיד אדמין של כתובות IP ציבוריות ב-Compute (roles/compute.publicIpAdmin).לדוגמה, כדי להקצות את התפקיד Compute Network User ברשת המשנה, מריצים את הפקודה הבאה:
gcloud compute networks subnets add-iam-policy-binding SUBNET_NAME \ --region REGION \ --member "serviceAccount:service-SERVICE_PROJECT_NUMBER@gcp-gae-service.iam.gserviceaccount.com" \ --role "roles/compute.networkUser" \ --project HOST_PROJECT_ID
מחליפים את מה שכתוב בשדות הבאים:
- SUBNET_NAME: שם המשאב המוגדר במלואו של רשת המשנה שבה רוצים להפעיל את שירותי App Engine.
- REGION: האזור של שירות App Engine, שצריך להיות זהה לאזור של רשת המשנה.
- SERVICE_PROJECT_NUMBER: מספר פרויקט השירות של Shared VPC שבו אתם פורסים את שירות App Engine.
- HOST_PROJECT_ID: מזהה פרויקט המארח של ה-VPC המשותף.
הרשאות בהתאמה אישית: כדי לקבל שליטה מפורטת יותר, צריך לתת לסוכן השירות של App Engine את ההרשאות הנוספות הבאות בפרויקט:
-
compute.networks.getבפרויקט המארח של ה-VPC המשותף -
compute.subnetworks.getבפרויקט המארח או ברשת המשנה הספציפית -
compute.subnetworks.useבפרויקט המארח או ברשת המשנה הספציפית -
compute.addresses.getבפרויקט השירות של ה-VPC המשותף -
compute.addresses.listבפרויקט השירות של ה-VPC המשותף -
compute.addresses.createבפרויקט השירות של ה-VPC המשותף -
compute.addresses.deleteבפרויקט השירות של ה-VPC המשותף -
compute.addresses.createInternalבפרויקט השירות של ה-VPC המשותף -
compute.addresses.deleteInternalבפרויקט השירות של ה-VPC המשותף -
compute.regionOperations.getבפרויקט השירות של ה-VPC המשותף
-
הקצאת כתובות IP
כדי למקם את שירות App Engine ברשת VPC, צריך לציין רשת VPC או רשת משנה, או את שתיהן. אם מציינים רק רשת, רשת המשנה מקבלת את אותו שם כמו הרשת. App Engine מקצה כתובות IP מתת-הרשת שלכם.
כתובות ה-IP הן ארעיות, ולכן לא מומלץ ליצור מדיניות שמבוססת על כתובות IP ספציפיות. אם אתם צריכים ליצור מדיניות שמבוססת על כתובות IP, למשל בכללים של חומת אש, אתם צריכים להשתמש בטווח כתובות ה-IP של כל רשת המשנה.
כדי לשנות את הרשת או את רשת המשנה שבה השירות משתמש, צריך לפרוס גרסה חדשה שמשתמשת בערכים החדשים של הרשת ורשת המשנה.
הגדלה והקטנה של נפח הפעילות
כדי להרחיב אנכית בהתאם לעומס מהר יותר בזמן עלייה חדה בתעבורת נתונים, App Engine שומר כתובות IP בחסימות של 16 (28 מסכה של רשת משנה) בכל פעם.
כדי לוודא שיש לכם מספיק כתובות IPv4 זמינות לשימוש ב-App Engine, טווח כתובות ה-IPv4 של רשת המשנה צריך להיות /26 או גדול יותר.
כדי לשפר את היעילות של הקצאת כתובות IP ולפשט את הניהול, מומלץ למקם כמה משאבים באותה רשת משנה. אם מרחב כתובות ה-IPv4 שלכם מוגבל, כדאי לעיין בטווחים נתמכים של כתובות IPv4 כדי לראות אפשרויות נוספות.
כדי למחוק את רשת המשנה, צריך קודם למחוק את שירות App Engine או לפרוס אותו מחדש כדי להפסיק את השימוש ברשת המשנה, ואז להמתין שעה עד שעתיים.
שימוש בכתובות IP בשירותים
במצב יציב, App Engine משתמש בפי שניים (2X) כתובות IP ממספר המופעים. כשגרסה מצטמצמת, App Engine שומר את כתובות ה-IP שלה למשך עד 20 דקות. בסך הכול, כדאי להקצות לפחות פי 2 ממספר כתובות ה-IP, בתוספת מקום לשינויים שיידרשו בעקבות עדכוני גרסה.
לדוגמה, אם משדרגים גרסאות כך ש-version 1 מתרחב מ-100 מופעים עד לאפס, ו-version 2 מתרחב מאפס עד 100, מערכת App Engine שומרת את כתובות ה-IP של version 1 למשך עד 20 דקות אחרי ההתכווצות. במהלך חלון השמירה של 20 דקות, אתם צריכים להזמין לפחות 400 כתובות IP ((100 + 100) * 2).
טווחים נתמכים של IPv4
App Engine תומך בטווחים הבאים של כתובות IPv4 עבור רשת המשנה:
פריסת שירות App Engine
תעבורת נתונים יוצאת (egress) ישירה של VPC מאפשרת לשירות App Engine לשלוח תנועה לרשת VPC משותפת בלי מחבר של חיבור לרשת (VPC) מאפליקציית serverless. אתם יכולים להקצות תגי רשת לגרסה ספציפית של שירות App Engine כדי לקבל אבטחת רשת מפורטת יותר, למשל כדי להחיל כללי חומת אש של VPC.
כדי למקם את השירות בתת-הרשת המשותפת, צריך לציין את שמות המשאבים שמוגדרים במלואם עבור רשת ה-VPC המשותפת ותת-הרשת בקובץ app.yaml.
מעדכנים את הקובץ
app.yamlומוסיפים את הקטעvpc_access:vpc_access: network_interface: network: projects/HOST_PROJECT_ID/global/networks/VPC_NETWORK subnet: projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME tags: - NETWORK_TAGS vpc_egress: EGRESS_SETTING
מחליפים את מה שכתוב בשדות הבאים:
- HOST_PROJECT_ID: מזהה הפרויקט של ה-VPC המשותף.
- VPC_NETWORK: השם של רשת ה-VPC המשותפת.
- REGION: האזור של שירות App Engine, שצריך להיות זהה לאזור של רשת המשנה.
- SUBNET_NAME: שם המשאב המוגדר במלואו של רשת המשנה.
- אופציונלי: NETWORK_TAGS: רשימה של תגי רשת לשיוך למופעים של שירות App Engine לשימוש בכללי חומת אש ובמדיניות ניתוב.
אופציונלי: EGRESS_SETTING: קובע איך תעבורה יוצאת מנותבת. השדה הזה תומך בהגדרות הבאות:
-
all-traffic: כל התעבורה היוצאת מועברת דרך רשת ה-VPC המשותפת. -
private-ranges-only(ברירת מחדל): שליחת תעבורת נתונים רק לכתובות פנימיות דרך רשת ה-VPC המשותפת.
-
כדי לפרוס את השירות, מריצים את הפקודה הבאה:
gcloud beta app deploy
ניתוק שירות
כדי להסיר את השירות מרשת ה-VPC המשותפת:
- מסירים את הקטע
vpc_accessמהקובץapp.yaml. פורסים מחדש את השירות:
gcloud beta app deploy
פתרון בעיות
בקטע הזה מתוארות שגיאות נפוצות שיכולות להתרחש כשמשתמשים ב-Direct VPC egress עם רשת VPC משותפת, ומוסבר איך לפתור אותן.
אי אפשר למחוק רשת משנה
כדי למחוק רשת משנה, צריך קודם למחוק את כל המשאבים שמשתמשים בה. אם App Engine משתמש ברשת משנה, צריך לנתק אותה או להעביר אותה לרשת משנה אחרת לפני שמוחקים את רשת המשנה.
אחרי שמוחקים או מעבירים את משאבי App Engine, צריך להמתין שעה או שעתיים עד שמערכת App Engine תשחרר את כתובות ה-IP לפני שמוחקים את רשת המשנה.
כשלים בפריסה
אם הפריסה נכשלת, Google Cloud CLI מציג הודעות שגיאה שמציינות את הסיבה הבסיסית. הנה כמה בעיות נפוצות:
מטא-נתונים שגויים של רשת VPC, כמו שם רשת או שם רשת משנה עם שגיאת כתיב בקובץ
app.yaml. כדי לתקן שגיאות פוטנציאליות, בודקים את הגדרות רשת ה-VPC בקובץapp.yaml.אין מספיק הרשאות IAM. חשוב לוודא שהענקתם את ההרשאות הנדרשות לחשבון השירות שדרכו אתם פורסים את הפונקציה. אם נתקלים בשגיאות הרשאה במהלך הפריסה, צריך לוודא שהקציתם לחשבון השירות את התפקידים הנוספים הבאים:
- חשבון שירות של Cloud Build (
roles/cloudbuild.builds.builder) - יצירת אסימונים בחשבון שירות (
roles/iam.serviceAccountTokenCreator)
- חשבון שירות של Cloud Build (
אי אפשר לנתק רשת VPC משותפת
כדי לנתק את רשת ה-VPC המשותפת בפרויקט המארח, פועלים לפי השלבים לביטול ההקצאה של VPC משותף, ומוודאים שניתקתם את כל השירותים של App Engine מרשת ה-VPC המשותפת.
כדי לראות אילו משאבי App Engine משתמשים ברשת ה-VPC המשותפת, מריצים את הפקודה הבאה:
gcloud compute shared-vpc list-associated-resources HOST_PROJECT_ID
מחליפים את HOST_PROJECT_ID במזהה של הפרויקט המארח של ה-VPC המשותף.
נגמרות כתובות ה-IPv4 בתת-הרשת של יציאה ישירה מ-VPC
אם נגמרים כתובות ה-IPv4 ברשת המשנה של רשת ה-VPC, App Engine לא יכול להפעיל עוד מופעים של שירותים.
כדי לפתור את הבעיה, כדאי לעבור לרשת משנה עם יותר כתובות IP זמינות או להרחיב את טווח רשת המשנה.
הצגת כתובות IP שהוקצו
כדי לראות אילו כתובות IP הוקצו ל-App Engine, נכנסים לדף כתובות ה-IP ב Google Cloud מסוף או מריצים את הפקודה הבאה מ-Google Cloud CLI:
gcloud compute addresses list