תעבורת נתונים יוצאת (egress) ישירה של VPC עם רשת VPC משותפת

אתם יכולים להפעיל את שירות 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 עבור רשת המשנה:

  • RFC 1918
    • 10.0.0.0/8
    • 172.16.0.0/12
    • 192.168.0.0/16
  • RFC 6598
    • 100.64.0.0/10
  • Class E
    • 240.0.0.0/4

פריסת שירות App Engine

תעבורת נתונים יוצאת (egress) ישירה של VPC מאפשרת לשירות App Engine לשלוח תנועה לרשת VPC משותפת בלי מחבר של חיבור לרשת (VPC) מאפליקציית serverless. אתם יכולים להקצות תגי רשת לגרסה ספציפית של שירות App Engine כדי לקבל אבטחת רשת מפורטת יותר, למשל כדי להחיל כללי חומת אש של VPC.

כדי למקם את השירות בתת-הרשת המשותפת, צריך לציין את שמות המשאבים שמוגדרים במלואם עבור רשת ה-VPC המשותפת ותת-הרשת בקובץ app.yaml.

  1. מעדכנים את הקובץ 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 המשותפת.
  2. כדי לפרוס את השירות, מריצים את הפקודה הבאה:

    gcloud beta app deploy

ניתוק שירות

כדי להסיר את השירות מרשת ה-VPC המשותפת:

  1. מסירים את הקטע vpc_access מהקובץ app.yaml.
  2. פורסים מחדש את השירות:

    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. חשוב לוודא שהענקתם את ההרשאות הנדרשות לחשבון השירות שדרכו אתם פורסים את הפונקציה. אם נתקלים בשגיאות הרשאה במהלך הפריסה, צריך לוודא שהקציתם לחשבון השירות את התפקידים הנוספים הבאים:

אי אפשר לנתק רשת 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