מזהה אזור
REGION_ID הוא קוד מקוצר ש-Google מקצה על סמך האזור שבוחרים כשיוצרים את האפליקציה. הקוד לא תואם למדינה או למחוז, למרות שחלק ממזהי האזורים עשויים להיראות דומים לקודים נפוצים של מדינות ומחוזות. באפליקציות שנוצרו אחרי פברואר 2020, REGION_ID.r נכלל בכתובות URL של App Engine. באפליקציות קיימות שנוצרו לפני התאריך הזה, מזהה האזור הוא אופציונלי בכתובת ה-URL.
במדריך הזה מוסבר איך להגדיר נקודת קצה ציבורית חדשה לאפליקציית App Engine באמצעות Cloud Load Balancing.
באמצעות Cloud Load Balancing, אתם מגדירים את נקודת הקצה של הדומיין המותאם אישית כשירות קצה קדמי, ומגדירים את אפליקציית App Engine כשירות לקצה העורפי באמצעות קבוצה של נקודות קצה ברשת (NEG) ללא שרתים.
התעבורה לנקודת הקצה של שירות ה-frontend של Cloud Load Balancing מנותבת באותו אופן כמו קודם, כולל כל כללי הניתוב שמוגדרים בקובץ dispatch.yaml של האפליקציה.
בתרשים הבא מתוארים השינויים באפליקציה:
המעבר ל-Cloud Load Balancing מאפשר לכם גמישות רבה יותר בטיפול בתעבורה שמגיעה לדומיין שלכם, למשל הצגת תוכן סטטי מ-Cloud Storage או הוספת שירותים שפועלים בפלטפורמות מחשוב אחרות כמו Cloud Run ו-Google Kubernetes Engine.
בנוסף, תקבלו גישה ליכולות Google Cloud חשובות שלא זמינות ב-App Engine, כולל:
- Google Cloud Armor, לשיפור האבטחה באמצעות הגנה מתקדמת מפני DDoS, אמצעי בקרה לגישה מבוססת-IP וגישה מבוססת-מיקום גיאוגרפי, כללים של חומת אש לאפליקציות אינטרנט ועוד
- Cloud CDN, להעברת תוכן שנשמר במטמון
- מדיניות SSL, לניהול התכונות של SSL וגרסאות ה-TLS שהאפליקציה תקבל
במדריך הזה מפורטות הוראות להעברת בקשות נכנסות משירות App Engine עם דומיין מותאם אישית לשירות קצה קדמי של Cloud Load Balancing:
- מוודאים שיש לכם את ההרשאות הנדרשות
- יצירת אישור בניהול Google
- הגדרת Cloud Load Balancing
- בדיקת מאזן העומסים
- חיבור הדומיין למאזן העומסים
- מחיקת המיפוי של הדומיין המותאם אישית ב-App Engine
- הגדרת בקרת תעבורת נתונים נכנסת (ingress) כדי לאפשר גישה רק דרך Cloud Load Balancing
לפני שמתחילים
יש לכם אפליקציית App Engine עם דומיין מותאם אישית שהוגדר בהגדרות App Engine.
הגדרת ההרשאות
כדי לפעול לפי המדריך הזה, צריך ליצור בפרויקט אישור בניהול Google, NEG ללא שרת ומאזן עומסים חיצוני מסוג HTTP(S). צריך להיות לכם תפקיד בעלים או עורך בפרויקט, או תפקידי ה-IAM הבאים:
| משימה | התפקיד הנדרש |
|---|---|
| יצירת אישור SSL בניהול Google באמצעות Certificate Manager | בעלים של Certificate Manager או עורך של Certificate Manager, וגם אדמין של איזון עומסים ב-Compute |
| עדכון רשומות ה-DNS של הדומיין המותאם אישית | Cloud DNS Administrator אם משתמשים ב-Cloud DNS כפתרון DNS. אם אתם משתמשים בספק DNS אחר, תצטרכו הרשאות להוספה ולעדכון של רשומות ה-DNS של הדומיין המותאם אישית. |
| יצירת מאזן עומסים ורכיבי רשת | אדמין של רשת מחשוב |
| יצירה ושינוי של קבוצות של ישויות בעלות שם | אדמין מכונות של Compute |
| יצירה ושינוי של אישורי SSL | אדמין לענייני אבטחה ב-Compute |
| מחיקת דומיינים מותאמים אישית בהגדרות של App Engine | התפקיד App Engine Admin או תפקיד שמכיל את ההרשאה appengine.applications.update. |
יצירת אישור SSL בניהול Google
אישור SSL בניהול Google (שנקרא גם אישור TLS במסמכים) מאפשר Google Cloud לקבל, לנהל ולחדש אישורים באופן אוטומטי. כדי לבצע מיגרציה לחלק הקדמי של Cloud Load Balancing בלי לגרום להשבתה של שירות App Engine הקיים, צריך להשתמש ב-Certificate Manager כדי ליצור הרשאת DNS ואת האישור שמנוהל על ידי Google.
שימו לב שבמסמכי התיעוד של Cloud Load Balancing יש הוראות דומות ליצירת אישור SSL בניהול Google, אבל ההוראות שם משתמשות בהרשאה של מאזן העומסים, שדורשת השבתה של שירות App Engine שיכולה להימשך עד כמה שעות. מידע נוסף זמין במאמר הרשאת דומיין לאישורים שמנוהלים על ידי Google.
כדי למנוע השבתה של האפליקציה, צריך לפעול לפי השלבים שבדף הזה.
יצירת הרשאת DNS
כדי ליצור את אישור ה-DNS ב-Certificate Manager, מריצים את הפקודות הבאות:
gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \ --domain="DOMAIN_NAME" gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAMEמחליפים את מה שכתוב בשדות הבאים:
-
AUTHORIZATION_NAMEהוא שם ייחודי שמתאר את הרשאת ה-DNS הזו. -
DOMAIN_NAMEהוא שם הדומיין המותאם אישית של App Engine שעבורו אתם יוצרים את הרשאת ה-DNS הזו.
-
שימו לב לרשומת ה-CNAME שמוחזרת על ידי הפקודה
gcloud. צריך להשתמש בו כדי לעדכן את רשומת ה-DNS לפי השלבים הבאים.
הוספת רשומת ה-CNAME להגדרת ה-DNS
בהתאם לפתרון ה-DNS שבו אתם משתמשים, Cloud DNS או פתרון DNS אחר של צד שלישי, פועלים לפי ההוראות שמתאימות לתרחיש השימוש שלכם:
Cloud DNS
כשיוצרים אישור DNS, הפקודה gcloud מחזירה את רשומת ה-CNAME המתאימה. צריך להוסיף את רשומת ה-CNAME הזו להגדרות ה-DNS בתחום ה-DNS של דומיין היעד באופן הבא:
מתחילים את העסקה של רשומת ה-DNS:
gcloud dns record-sets transaction start --zone="DNS_ZONE_NAME"
מחליפים את
DNS_ZONE_NAMEבשם של תחום ה-DNS הציבורי. אם אתם משתמשים ב- Google Cloud כדי לנהל את הדומיין שלכם ומקבלים תנועת גולשים לדומיין הזה, כבר יצרתם אזור DNS ציבורי. כדי לראות את תחום ה-DNS הציבורי, אפשר לעיין במאמר בנושא רשימה ותיאור של תחומים מנוהלים.מוסיפים את רשומת ה-CNAME לתחום ה-DNS של היעד:
gcloud dns record-sets transaction add CNAME_RECORD \ --name="_acme-challenge.DOMAIN_NAME." \ --ttl="30" \ --type="CNAME" \ --zone="DNS_ZONE_NAME"
מחליפים את מה שכתוב בשדות הבאים:
-
CNAME_RECORDהוא הערך המלא של רשומת ה-CNAME שהוחזרה על ידי הפקודהgcloudשיצרה את הרשאת ה-DNS המתאימה. -
DOMAIN_NAMEהוא שם הדומיין המותאם אישית של App Engine. צריך לכלול את הנקודה בסוף אחרי שם דומיין היעד. -
DNS_ZONE_NAMEהוא השם של אזור ה-DNS של היעד מהשלב הקודם.
-
מבצעים את העסקה של רשומת ה-DNS כדי לשמור את השינויים:
gcloud dns record-sets transaction execute --zone="DNS_ZONE_NAME"
מחליפים את
DNS_ZONE_NAMEבשם של תחום ה-DNS של היעד מהשלב הקודם.
פתרון DNS אחר
מוסיפים רשומת CNAME להגדרת ה-DNS של הדומיין, באמצעות השדות (מארח) שם (_acme-challenge.DOMAIN_NAME) ונתונים מהקטע הקודם. כדאי לעיין בתיעוד של פתרון ה-DNS של הצד השלישי.
יצירת אישור בניהול Google עם הפניה להרשאת ה-DNS
כדי ליצור אישור בניהול Google שמפנה להרשאת ה-DNS שיצרתם בשלבים הקודמים, מריצים את הפקודות הבאות:
יצירת אישור שמנוהל על ידי Google:
gcloud certificate-manager certificates create CERTIFICATE_NAME \ --domains=DOMAIN_NAME --dns-authorizations=AUTHORIZATION_NAME
מחליפים את מה שכתוב בשדות הבאים:
-
CERTIFICATE_NAMEהוא שם ייחודי שמתאר את האישור. -
DOMAIN_NAMEהוא השם של הדומיין המותאם אישית ב-App Engine. -
AUTHORIZATION_NAMEהוא השם של הרשאת ה-DNS שנוצרה קודם.
-
מוודאים שהאישור פעיל.
כדי לוודא שהאישור עצמו פעיל לפני שמקצים אותו למאזן העומסים, משתמשים בפקודה הבאה. שימו לב: יכול להיות שיעברו כמה שעות עד שמצב האישור ישתנה ל-
ACTIVE.gcloud certificate-manager certificates describe CERTIFICATE_NAME
מחליפים את
CERTIFICATE_NAMEבשם של האישור שמנוהל על ידי Google שנוצר קודם.הפלט של הכלי
gcloudאמור להיראות כך:certificatePem: myPEM createTime: '2021-10-20T12:19:53.370778666Z' expireTime: '2022-05-07T05:03:49Z' managed: authorizationAttemptInfo: - domain: example.com state: AUTHORIZED dnsAuthorizations: - projects/my-project/locations/global/dnsAuthorizations/myAuth domains: - example.com state: ACTIVE name: projects/myProject/locations/global/certificates/myCert scope: myScope sanDnsnames: - example.com updateTime: '2021-10-20T12:19:55.083385630Z'אם הכלי
gcloudמחזיר פלט שונה, אפשר לעיין במאמר פתרון בעיות ב-Certificate Manager.
יצירת מיפוי אישורים
יוצרים מיפוי אישורים:
gcloud certificate-manager maps create CERTIFICATE_MAP_NAME
מחליפים את
CERTIFICATE_MAP_NAMEבשם ייחודי שמתאר את מיפוי האישורים.יוצרים רשומת מיפוי לאישורים ומקשרים אותה לאישור ולמפת האישורים שיצרתם קודם:
gcloud certificate-manager maps entries create CERTIFICATE_MAP_ENTRY_NAME \ --map=CERTIFICATE_MAP_NAME \ --certificates=CERTIFICATE_NAME \ --set-primaryמחליפים את מה שכתוב בשדות הבאים:
-
CERTIFICATE_MAP_ENTRY_NAMEהוא שם ייחודי שמתאר את רשומת המיפוי לאישור. -
CERTIFICATE_MAP_NAMEהוא השם של מיפוי האישורים שאליו מצורפת רשומת מיפוי האישורים הזו. -
CERTIFICATE_NAMEהוא שם האישור שרוצים לשייך לרשומת מיפוי לאישורים זו.
כדי לוודא שהאישור ישמש כאישור ברירת המחדל אם לא מצוין שם דומיין, אפשר להוסיף את הדגל
--set-primary.-
מוודאים שמיפוי האישורים פעיל.
כדי לוודא שרשומת המיפוי לאישורים פעילה לפני שמצרפים את מיפוי האישורים התואם שלה לשרת ה-proxy של היעד, מריצים את הפקודה הבאה:
gcloud certificate-manager maps entries describe CERTIFICATE_MAP_ENTRY_NAME \ --map=CERTIFICATE_MAP_NAMEמחליפים את מה שכתוב בשדות הבאים:
-
CERTIFICATE_MAP_ENTRY_NAMEהוא השם של הרשומה במפת האישורים שצוין קודם. -
CERTIFICATE_MAP_NAMEהוא השם של מפת האישורים שאליה מצורפת רשומת המיפוי לאישורים.
הפלט של הכלי
gcloudאמור להיראות כך:createTime: '2021-09-06T10:01:56.229472109Z' name: projects/my-project/locations/global/certificateMaps/myCertMap/certificateMapEntries/myCertMapEntry state: ACTIVE updateTime: '2021-09-06T10:01:58.277031787Z'-
מידע נוסף על השימוש ב-Certificate Manager זמין במאמר איך Certificate Manager פועל.
הגדרת Cloud Load Balancing
אחרי שיש לכם אישור בניהול Google, אתם יכולים להחליף את הדומיין המותאם אישית של App Engine בשירות קצה קדמי של Cloud Load Balancing.
בתרשים הבא מוצג מאזן עומסים של HTTPS עם שירות לקצה העורפי יחיד ו-NEG בלי שרת.
כללי ההפניה האוטומטית מנתבים בקשות נכנסות מכתובות IP חיצוניות ומפנים בקשות ישירות אל שרת ה-proxy של יעד ה-HTTPS. מאזני העומסים של HTTPS משתמשים במפות URL כדי להפנות בקשות לשירות לקצה העורפי, שמכיל NEG בלי שרת (serverless) לשירות App Engine.
שמירת כתובת IP חיצונית
לפני שמגדירים את Cloud Load Balancing, צריך להגדיר כתובת IP חיצונית סטטית גלובלית כדי שהמשתמשים יוכלו להגיע למאזן העומסים.
המסוף
נכנסים לדף כתובות IP חיצוניות במסוף Google Cloud .
לוחצים על Reserve static address כדי לשריין כתובת IPv4.
מקצים שם לכתובת הסטטית, לדוגמה,
appengine-external-ip.מגדירים את מסלול הרשת ל-Premium.
מגדירים את IP version ל-IPv4.
מגדירים את Type (סוג) בתור Global (גלובלי).
לוחצים על Reserve.
gcloud
יוצרים בקשה לשמירת מקום לכתובת IP חיצונית:
gcloud compute addresses create EXTERNAL_IP \ --network-tier=PREMIUM \ --ip-version=IPV4 \ --global
EXTERNAL_IPהוא שם הכתובות שרוצים ליצור.שימו לב לכתובת ה-IPv4 שהוקצתה:
gcloud compute addresses describe EXTERNAL_IP \ --format="get(address)" \ --global
הגדרת שירות לקצה העורפי ב-App Engine
קבוצת נקודות קצה ברשת (NEG) משמשת לציון קבוצה של נקודות קצה בעורף של מאזן עומסים. כדי לציין קצה עורפי שמפנה לשירות App Engine, צריך להגדיר את ה-NEG בלי שרת (serverless), ואז להגדיר את שירות לקצה העורפי, את כללי הניתוב ואת שירות הקצה הקדמי ב-Cloud Load Balancing.
יוצרים NEG ללא שרת (serverless) לאפליקציית App Engine:
gcloud compute network-endpoint-groups create APP_ENGINE_NEG \ --network-endpoint-type=serverless \ --app-engine-app \ --region=APP_ENGINE_REGION
מחליפים את מה שכתוב בשדות הבאים:
-
APP_ENGINE_NEGהוא השם של קבוצת נקודות הקצה ברשת. -
APP_ENGINE_REGIONהוא האזור שהוגדר ב-App Engine.
אפשר להוסיף את הדגל
--app-engine-appשמופיע למעלה כדי להשתמש בניתוב ברירת מחדל, במקום בניסיון להגיע לשירות ספציפי של App Engine. שימוש בניתוב ברירת מחדל אומר שהבקשות יישלחו לשירות ברירת המחדל (https://PROJECT_ID.REGION_ID.r.appspot.com), אחרת הן יפעלו לפי כל כללי הניתוב שהגדרתם בקובץdispatch.yaml. ההתנהגות הזו זהה לזו של דומיינים מותאמים אישית שהוגדרו באמצעות App Engine.-
יוצרים את שירות הקצה העורפי:
gcloud compute backend-services create APP_ENGINE_BACKEND \ --global \ --load-balancing-scheme=EXTERNAL_MANAGED
מחליפים את
APP_ENGINE_BACKENDבשם של שירות לקצה העורפי שרוצים ליצור.מוסיפים את ה-NEG בלי שרת (serverless) לשירות הקצה העורפי של App Engine:
gcloud compute backend-services add-backend APP_ENGINE_BACKEND \ --global --network-endpoint-group=APP_ENGINE_NEG \ --network-endpoint-group-region=APP_ENGINE_REGION
מחליפים את מה שכתוב בשדות הבאים:
-
APP_ENGINE_BACKENDהוא השם של שירות ה-Backend מהשלב הקודם. -
APP_ENGINE_NEGהוא השם של קבוצת נקודות הקצה ברשת. -
APP_ENGINE_REGIONהוא האזור שהוגדר ב-App Engine.
-
יוצרים מפת URL כדי לנתב בקשות נכנסות לשירות הקצה העורפי:
gcloud compute url-maps create URL_MAP_NAME \ --default-service APP_ENGINE_BACKENDמחליפים את מה שכתוב בשדות הבאים:
-
URL_MAP_NAMEהוא שם ייחודי למשאב של מפת URL שמגדיר את המיפוי של כתובות URL לשירותי קצה עורפי. -
APP_ENGINE_BACKENDהוא השם של שירות ה-Backend מהשלב הקודם.
-
יוצרים שרת proxy של HTTPS ליעד כדי להפנות בקשות למפת URL:
gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \ --certificate-map=CERTIFICATE_MAP_NAME \ --url-map=URL_MAP_NAMEמחליפים את מה שכתוב בשדות הבאים:
-
TARGET_HTTPS_PROXY_NAMEהוא שם ייחודי שבחרתם כדי לתאר את שרת ה-proxy של HTTPS. -
CERTIFICATE_MAP_NAMEהוא השם של מפת האישורים שמפנה לרשומה במפת האישורים ולאישור שמשויך אליה. -
URL_MAP_NAMEהוא השם של מפת URL שצוין קודם.
-
יוצרים כלל העברה כדי להפנות בקשות נכנסות לשרת ה-proxy:
gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=PREMIUM \ --address=EXTERNAL_IP \ --target-https-proxy=TARGET_HTTPS_PROXY_NAME \ --global \ --ports=443מחליפים את מה שכתוב בשדות הבאים:
-
HTTPS_FORWARDING_RULE_NAMEהוא שם ייחודי שמתאר את כלל ההעברה להפניית תנועת רשת לשרת ה-proxy של HTTPS. -
TARGET_HTTPS_PROXY_NAMEהוא השם של שרת ה-proxy של HTTPS מהשלב הקודם. -
EXTERNAL_IPהוא שם כתובת ה-IPv4 שנוצרה קודם.
-
בדיקת מאזן העומסים
עכשיו, אחרי שהגדרתם את מאזן העומסים, אתם יכולים להתחיל לשלוח תנועה לכתובת ה-IP של מאזן העומסים כדי לבדוק לפני העברת הדומיין.
- נכנסים לדף איזון עומסים במסוף Google Cloud .
כניסה לדף איזון עומסים - לוחצים על מאזן העומסים שיצרתם.
- שימו לב לכתובת ה-IP של מאזן העומסים.
במאזן עומסים מסוג HTTPS, אפשר לבדוק את מאזן העומסים באמצעות דפדפן אינטרנט. לשם כך, עוברים אל
https://IP_ADDRESS. מחליפים אתIP_ADDRESSבכתובת ה-IP של מאזן העומסים, לדוגמה,30.90.80.100.- אם זה לא עוזר ואתם משתמשים באישור שמנוהל על ידי Google,
צריך לוודא שהאישור
ACTIVEושמיפוי האישוריםACTIVE. - אם משתמשים באישור בחתימה עצמית לצורך בדיקה, מוצגת בדפדפן אזהרה. צריך להנחות את הדפדפן באופן מפורש לקבל אישור בחתימה עצמית. לוחצים על האזהרה כדי לראות את הדף בפועל.
אפשרויות הגדרה נוספות מפורטות במאמר הגדרת מאזן עומסים גלובלי חיצוני מסוג HTTP(S) עם פלטפורמות Serverless.
- אם זה לא עוזר ואתם משתמשים באישור שמנוהל על ידי Google,
צריך לוודא שהאישור
חיבור הדומיין למאזן העומסים
אחרי שיוצרים את מאזן העומסים, רושמים את כתובת ה-IP שמשויכת למאזן העומסים – לדוגמה, 30.90.80.100. כדי להפנות את הדומיין למאזן העומסים, צריך ליצור רשומת A באמצעות שירות הרישום של הדומיין. אם הוספתם מספר דומיינים לאישור ה-SSL, צריך להוסיף רשומת A לכל אחד מהם, כשכולם מפנים לכתובת ה-IP של מאזן העומסים. לדוגמה, כדי ליצור רשומות A בשביל www.example.com ובשביל example.com, משתמשים בפקודה הבאה:
NAME TYPE DATA www A 30.90.80.100 @ A 30.90.80.100
אם אתם משתמשים ב-Cloud DNS כספק ה-DNS, תוכלו לעיין במאמר בנושא הוספה, שינוי ומחיקה של רשומות.
מחיקת המיפוי של הדומיין המותאם אישית ב-App Engine
במסוף Google Cloud :
עוברים לכרטיסייה דומיינים מותאמים אישית בדף הגדרות של App Engine.
בוחרים את שם הדומיין המותאם אישית ולוחצים על מחיקה.
אפשר גם להשתמש בפקודות gcloud או ב-Admin API כדי למחוק את הדומיין המותאם אישית.
הגדרת בקרת תעבורה נכנסת (ingress) כדי לאפשר גישה רק דרך Cloud Load Balancing
אחרי בדיקת איזון העומסים, מומלץ לעדכן את אפליקציית App Engine כך שתקבל תנועה רק מ-Cloud Load Balancing. איך מגדירים אמצעי בקרה על תעבורת נתונים נכנסתinternal-and-cloud-load-balancing