אתם יכולים להפעיל את שירות 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.
VPC Flow Logs: לא מציג את גרסת השירות של App Engine ברשומות היומן. שם השירות מוצג בשדה
AppEngineServiceDetails.
הגדרת הרשאות IAM
לפני שאפשר לגשת לרשת VPC משותפת מ-App Engine בפרויקט שירות של 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.
כדי למקם את השירות בתת-הרשת המשותפת, צריך לציין בקובץ app.yaml את שמות המשאבים שמוגדרים במלואם עבור רשת ה-VPC המשותפת ותת-הרשת.
מעדכנים את הקובץ
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 ברשת המשנה של Direct VPC egress
אם נגמרות כתובות ה-IPv4 ברשת המשנה של רשת ה-VPC, App Engine לא יכול להפעיל עוד מופעים של שירותים.
כדי לפתור את הבעיה, כדאי לעבור לרשת משנה עם יותר כתובות IP זמינות או להרחיב את טווח רשת המשנה.
צפייה בכתובות IP שהוקצו
כדי לראות אילו כתובות IP הוקצו ל-App Engine, נכנסים לדף כתובות ה-IP ב Google Cloud מסוף או מריצים את הפקודה הבאה מ-Google Cloud CLI:
gcloud compute addresses list