Google Cloud מאזני עומסים של אפליקציות ו-Cloud Service Mesh משתמשים במשאב הגדרה Google Cloudבשם מפת URL כדי לנתב בקשות HTTP(S) לשירותי קצה עורפי או לקטגוריות קצה עורפי.
לדוגמה, במאזן עומסים חיצוני של אפליקציות (ALB), אתם יכולים להשתמש במפת URL אחת כדי לנתב בקשות ליעדים שונים על סמך הכללים שהוגדרו במפת URL:
- בקשות ל-
https://example.com/videoמועברות לשירות קצה עורפי אחד. - בקשות ל-
https://example.com/audioמועברות לשירות קצה עורפי אחר.
- בקשות ל-
https://example.com/imagesמועברות לקטגוריית קצה עורפי של Cloud Storage.
- בקשות לכל שילוב אחר של מארח ונתיב מועברות לשירות ברירת מחדל לקצה העורפי.
מפות URL משמשות במוצרים הבאים של Google Cloud :
- מאזן עומסים חיצוני של אפליקציות (ALB) (במצבים גלובלי, אזורי וקלאסי)
- מאזן עומסים פנימי של אפליקציות (ALB) (במצבים חוצה-אזורים ואזורי)
- Cloud Service Mesh, כש-Cloud Service Mesh נפרס עם ממשקי ה-API של איזון העומסים
יש שני סוגים של משאבים למפות URL: גלובליים ואזוריים.
urlMapsגלובליים משמשים במאזני עומסים גלובליים חיצוניים של אפליקציות (ALB), במאזני עומסים קלאסיים של אפליקציות (ALB), במאזני עומסים פנימיים של אפליקציות (ALB) חוצי-אזורים וב-Cloud Service Mesh.regionUrlMapsמשמשים במאזני עומסים חיצוניים אזוריים של אפליקציות (ALB), במאזני עומסים פנימיים אזוריים של אפליקציות (ALB) וב-Cloud Service Mesh.
סוג המשאב שבו משתמשים תלוי בתוכנית לאיזון העומסים של המוצר.
| מוצר | סכמת איזון עומסים | סוג המשאב של מפת URL | יעדים נתמכים |
|---|---|---|---|
| מאזן עומסים גלובלי חיצוני של אפליקציות (ALB) | EXTERNAL_MANAGED |
עולמי | שירותים לקצה העורפי, קטגוריות לקצה העורפי |
| מאזן עומסים קלאסי של אפליקציות (ALB) | EXTERNAL |
עולמי | שירותים לקצה העורפי, קטגוריות לקצה העורפי |
| מאזן עומסים חיצוני אזורי של אפליקציות (ALB) | EXTERNAL_MANAGED |
אזורי | שירותים לקצה העורפי, קטגוריות קצה עורפי |
| מאזן עומסים פנימי של אפליקציות (ALB) באזורים שונים | INTERNAL_MANAGED |
עולמי | שירותים לקצה העורפי, קטגוריות לקצה העורפי |
| מאזן עומסים פנימי אזורי של אפליקציות (ALB) | INTERNAL_MANAGED |
אזורי | שירותים לקצה העורפי, קטגוריות קצה עורפי |
| Cloud Service Mesh | INTERNAL_SELF_MANAGED |
עולמי | שירותים לקצה העורפי |
| Cloud Service Mesh | INTERNAL_SELF_MANAGED |
אזורי | שירותים לקצה העורפי |
לא כל התכונות של מפת URL זמינות לכל המוצרים. מפות URL שמשמשות עם מאזני עומסים גלובליים חיצוניים של אפליקציות (ALB), מאזני עומסים אזוריים חיצוניים של אפליקציות (ALB), מאזני עומסים פנימיים של אפליקציות (ALB) ו-Cloud Service Mesh תומכות גם בכמה תכונות מתקדמות לניהול תעבורה. למידע נוסף על ההבדלים האלה, קראו את המאמר השוואה בין התכונות של מאזני העומסים: ניתוב וניהול תעבורת נתונים. בנוסף, מפות URL אזוריות יכולות להיות משאב שמיועד כשירות באפליקציות של App Hub.
איך פועל מיפוי כתובות URL
כשבקשה מגיעה למאזן העומסים, מאזן העומסים מנתב את הבקשה לשירות לקצה העורפי או לקטגוריית קצה עורפי מסוימים, על סמך הכללים שמוגדרים במפת ה-URL.
שירות לקצה העורפי מייצג אוסף של קצה עורפי, שהם מופעים של אפליקציה או מיקרו-שירות. קטגוריית קצה עורפי היא קטגוריה של Cloud Storage, שמשמשת בדרך כלל לאירוח תוכן סטטי, כמו תמונות.
ב-Cloud Service Mesh, היעדים האפשריים הם:
- שירות ברירת המחדל לקצה העורפי
- שירות לקצה העורפי שהוא לא ברירת המחדל
בנוסף, מאזני עומסים של אפליקציות תומכים באפשרויות הבאות:
- קטגוריית קצה עורפי שמוגדרת כברירת מחדל
- קטגוריית קצה עורפי שהיא לא ברירת המחדל
לדוגמה, נניח שהגדרתם את ההגדרה הבאה:
- כתובת IP אחת:
- כל הבקשות לארגון שלכם מגיעות לאותה כתובת IP ולאותו מאזן עומסים.
- התעבורה מופנית לשירותי קצה עורפיים שונים על סמך כתובת ה-URL של הבקשה.
- שני דומיינים:
-
example.netמארח סרטוני הדרכה. example.orgמארחת את האתר של הארגון.
-
- ארבע קבוצות של שרתים:
- אחד מהם מארח את האתר של הארגון (שירות קצה עורפי:
org-site). - אחד מהם מארח את האתר הכללי של סרטוני ההדרכה (שירות קצה עורפי:
video-site). - אחד מהם מארח סרטוני הדרכה באיכות HD (שירות קצה עורפי:
video-hd). - אחד מארח סרטוני הדרכה באיכות רגילה (SD) (שירות לקצה העורפי:
video-sd).
- אחד מהם מארח את האתר של הארגון (שירות קצה עורפי:
אתם רוצים שהדברים הבאים יקרו:
- בקשות אל
example.org(או אל כל דומיין אחר מלבדexample.net) כדי לעבור אל שירות לקצה העורפי שלorg-site. - בקשות ל-
example.netשלא תואמות לנתיבים ספציפיים יותר, יועברו לשירות לקצה העורפיvideo-site. - בקשות אל
example.net/video/hd/*עוברות לשירות הקצה העורפי שלvideo-hd. - בקשות אל
example.net/video/sd/*עוברות אל שירות הקצה העורפיvideo-sd.
--path-rule של /video/* מתאים למזהי URI כמו /video/test1 ו-/video/test2. עם זאת, כלל הנתיב הזה לא תואם לנתיב /video.
אם מאזן העומסים מקבל בקשה עם /../ בכתובת ה-URL, הוא משנה את כתובת ה-URL על ידי הסרת קטע הנתיב שלפני .., ומגיב עם כתובת ה-URL ששונתה. לדוגמה, כשנשלחת בקשה ל-http://example.net/video/../abc, מאזן העומסים מגיב בהפניה אוטומטית (redirect) עם קוד 302 אל http://example.net/abc. רוב הלקוחות מגיבים בשליחת בקשה לכתובת ה-URL שמאזן העומסים החזיר (במקרה הזה, http://example.net/abc). ההפניה האוטומטית מסוג 302 לא מתועדת ב-Cloud Logging.
מפת URL מאפשרת להגדיר את סוג הניתוב הזה שמבוסס על מארח ונתיב.
מתן שמות למאזני עומסים
במאזני עומסים של אפליקציות, השם של מאזן העומסים תמיד זהה לשם של מפת URL. ההתנהגות של כל ממשק של Google Cloud היא:
- Google Cloud מסוף. אם יוצרים מאזן עומסים של אפליקציות באמצעות מסוףGoogle Cloud , מפת URL מקבלת באופן אוטומטי את אותו שם שהוזן כשם מאזן העומסים.
- Google Cloud CLI או API. אם יוצרים מאזן עומסים של אפליקציות באמצעות ה-CLI של gcloud או API, צריך להזין שם לבחירה בזמן יצירת מפת URL. השם של מפת URL מופיע במסוףGoogle Cloud כשם של מאזן העומסים.
במאמר סקירה כללית על שירותים לקצה העורפי: מתן שמות למאזני עומסים מוסבר איך לתת שמות למאזני עומסי רשת עם שרת proxy ולמאזני עומסי רשת ב-Passthrough.
רכיבים של מפת URL
מפת URL היא קבוצה של משאבי הגדרה Google Cloud שמפנים בקשות לכתובות URL לשירותים לקצה העורפי או לקטגוריות לקצה העורפי. מפת URL עושה זאת באמצעות החלקים של שם המארח והנתיב בכל כתובת URL שהיא מעבדת:
- שם מארח הוא החלק של שם הדומיין בכתובת URL. לדוגמה, החלק של שם המארח בכתובת ה-URL
http://example.net/video/hdהואexample.net. - נתיב הוא החלק מכתובת ה-URL שמופיע אחרי שם המארח ומספר היציאה האופציונלי. לדוגמה, הנתיב בכתובת ה-URL
http://example.net/video/hdהוא/video/hd.
בתרשים הזה מוצג המבנה של אובייקטים של הגדרת איזון עומסים ביחס זה לזה.
אתם קובעים אילו שירותים לקצה העורפי או קטגוריות קצה עורפי יקבלו בקשות נכנסות באמצעות פרמטרים של הגדרת מפת URL הבאים:
שירות קצה עורפי שמוגדר כברירת מחדל או קטגוריית קצה עורפי שמוגדרת כברירת מחדל. כשיוצרים מפת URL, צריך לציין שירות ברירת מחדל לקצה העורפי או קטגוריית קצה עורפי של ברירת מחדל, אבל לא את שניהם. ברירת המחדל הזו מייצגת את שירות הקצה העורפי או את קטגוריית הקצה העורפי שאליהם Google Cloud מפנה בקשות לכתובות URL עם כל שם מארח, אלא אם חל כלל מארח רלוונטי.
כלל מארח (
hostRules). כלל מארח מפנה בקשות שנשלחות לשם מארח משויך אחד או יותר אל מאתר נתיבים יחיד (pathMatchers). החלק של שם המארח בכתובת URL תואם בדיוק או תואם באמצעות ביטויים רגולריים לקבוצת שמות המארחים שהוגדרו בכלל המארח. בכלל של מארח ונתיב במפת URL, אם משמיטים את המארח, הכלל תואם לכל מארח מבוקש. כדי להפנות בקשות שלhttp://example.net/video/hdלמתאם נתיבים, צריך כלל מארח אחד שכולל לפחות את שם המארחexample.net. אותו כלל מארח יכול לטפל גם בבקשות לשמות מארחים אחרים, אבל הוא יפנה אותן לאותו התאמה של נתיב.אם אתם צריכים להפנות בקשות למתאמי נתיבים שונים, אתם צריכים להשתמש בכללי מארח שונים. שני כללים של מארחים במפת URL לא יכולים לכלול את אותו שם מארח.
אפשר להתאים את כל שמות המארחים על ידי ציון התו הכללי לחיפוש
*בכלל המארח. לדוגמה, אם כתובות ה-URL הןhttp://example.org,http://example.net/video/hdו-http://example.com/audio, אפשר להתאים את שלושת שמות המארחיםexample.org,example.netו-example.comעל ידי ציון*בכלל המארח. אפשר גם להתאים שם מארח חלקי באמצעות ציון התו הכללי לחיפוש*. לדוגמה, כלל מארח*.example.netתואם לשמות המארחיםnews.example.netו-finance.example.net.מספר היציאה. מאזני עומסים קלאסיים של אפליקציות (ALB) מטפלים במספרי יציאות באופן שונה ממאזני עומסים אחרים של אפליקציות. במקרה של מאזן עומסים קלאסי של אפליקציות (ALB), רק שם המארח בכתובת ה-URL נלקח בחשבון כשמבצעים התאמה לכלל מארח. לדוגמה, בקשות של
example.netליציאה 8080 וליציאה 80 תואמות לכלל המארחexample.net. בכל שאר מאזני העומסים של אפליקציות, אפשר להשתמש בפרמטר Host rule כדי לציין מספר יציאה. לדוגמה, כדי להפנות בקשות שלexample.netליציאה 8080, מגדירים את כלל המארח ל-example.net:8080.התאמת נתיב (
pathMatchers). התאמת נתיב היא פרמטר ההגדרה שאליו מתייחס כלל המארח. היא מגדירה את הקשר בין החלק של הנתיב בכתובת ה-URL לבין השירות לקצה העורפי או קטגוריית הקצה העורפי שאמורים לטפל בבקשה. התאמת נתיב מורכבת משני רכיבים:שירות לקצה העורפי שמוגדר כברירת מחדל להתאמת נתיבים או קטגוריית קצה עורפי שמוגדרת כברירת מחדל להתאמת נתיבים. לכל התאמת נתיב צריך לציין לפחות שירות לקצה העורפי של ברירת מחדל או קטגוריית קצה עורפי של ברירת מחדל, אבל לא את שניהם. ברירת המחדל הזו מייצגת את שירות הקצה העורפי או את קטגוריית הקצה העורפי שאליהםGoogle Cloud מפנה בקשות לכתובות URL ששמות המארחים שלהן תואמים לכלל מארח שמשויך למתאם הנתיבים, ושנתיבי כתובות ה-URL שלהן לא תואמים לאף כלל נתיב במתאם הנתיבים.
כללי נתיבים. לכל התאמה של נתיב אפשר לציין כלל נתיב אחד או יותר, שהם צמדי מפתח/ערך שממפים נתיב כתובת ה-URL לשירות לקצה העורפי יחיד או לקטגוריית קצה עורפי.
אופרטורים גמישים להתאמת דפוסים מאפשרים להתאים כמה חלקים של נתיב כתובת ה-URL, כולל כתובות URL חלקיות וסיומות (סיומות קבצים), באמצעות תחביר של תווים כלליים לחיפוש. האופרטורים האלה יכולים לעזור כשצריך לנתב תנועה ולבצע שכתובים על סמך נתיבים מורכבים של כתובות URL. אפשר גם לשייך רכיב אחד או יותר של הנתיב למשתנים בעלי שם, ואז להפנות למשתנים האלה כשמשכתבים את כתובת ה-URL. כשמשתמשים במשתנים עם שמות, אפשר לשנות את הסדר של רכיבי כתובת ה-URL ולהסיר אותם לפני שהבקשה נשלחת למקור. פרטים נוספים זמינים במאמר תווים כלליים לחיפוש, ביטויים רגולריים וכתובות URL דינמיות בכללי נתיב.
אם אתם צריכים יכולות ניתוב מתקדמות יותר, למשל אם אתם רוצים להפנות תנועה של כתובת URL ייחודית לכמה שירותים, אתם יכולים להשתמש בכללי מסלול במקום בכללי נתיב.
כללי מסלול. אפשר להשתמש בכללי ניתוב כחלופה לכללי נתיב כשצריך יכולות מתקדמות של ניתוב תנועה, כמו ניתוב תנועה על סמך נתיב כתובת ה-URL, כותרות HTTP ופרמטרים של שאילתות.
אפשר להגדיר כללי מסלול באמצעות אופרטורים גמישים להתאמת תבניות ומשתנים עם שמות. האופרטורים האלה יכולים לעזור כשצריך לנתב תעבורת נתונים ולבצע שכתובים על סמך נתיבי כתובות ה-URL מורכבים. פרטים נוספים זמינים במאמר תווים כלליים לחיפוש ואופרטורים של התאמה לתבנית בתבניות נתיב לכללי מסלול.
אפשר גם להגדיר כללי מסלול שיושוו לביטויים רגולריים שתואמים לנתיב, לפרמטרים של שאילתות או לכותרות בבקשה הנכנסת. פרטים נוספים מופיעים במאמר בנושא ביטויים רגולריים בכללי ניתוב.
למידע נוסף על אפשרויות ההגדרה של כללי מסלול, ראו כללים מתקדמים למארחים, לנתיבים ולמסלולים.
הקשר בין שם המארח לכלל המארח
שם מארח יכול להפנות רק לכלל מארח אחד.
כלל מארח אחד יכול לעבד כמה שמות מארחים.
הקשר בין כלל מארח לבין התאמה לנתיב
כמה כללי מארח יכולים להפנות לאותו התאמה לנתיב.
כלל מארח יכול להפנות רק למתאם נתיבים אחד.
הקשר בין כתובת ה-URL לבק-אנד
כל כתובת URL ייחודית מופנית רק לשירות אחד לקצה העורפי או לקטגוריית קצה עורפי אחת. כתוצאה מכך:
Google Cloud משתמש בנתח של שם המארח בכתובת URL כדי לבחור כלל מארח יחיד ואת כלי ההשוואה לנתיבים שאליו הוא מפנה.
כשמשתמשים בכללי נתיבים במתאם נתיבים, אי אפשר ליצור יותר מכלל נתיב אחד לאותו נתיב. לדוגמה, אי אפשר להפנות בקשות ל-
/videos/hdליותר משירות אחד לקצה העורפי או ליותר מקטגוריית קצה עורפי אחת. לשירותים לקצה העורפי יכולות להיות קבוצות של מכונות לקצה העורפי או קבוצות של נקודות קצה ברשת (NEG) לקצה העורפי באזורים שונים, ואפשר ליצור קטגוריות לקצה העורפי שמשתמשות בסוגי אחסון במספר אזורים.כדי להפנות תנועה של כתובת URL ייחודית לכמה שירותים, אפשר להשתמש בכללי מסלול במקום בכללי נתיב. אם מגדירים את הכלי להתאמת נתיבים עם כללי ניתוב להתאמות של כותרות או פרמטרים, אפשר להפנות כתובת URL ייחודית ליותר משירות עורפי אחד או לדלי אחד, על סמך התוכן של הכותרות או של פרמטרים של שאילתה בכתובת ה-URL.
באופן דומה, במאזני עומסים חיצוניים אזוריים של אפליקציות (ALB) וב-Cloud Service Mesh, שירותים משוקללים לקצה העורפי בפעולות ניתוב יכולים להפנות את אותה כתובת URL לכמה שירותים או קטגוריות לקצה העורפי, בהתאם למשקלים שהוגדרו בשירות המשוקלל לקצה העורפי.
מפות URL ופרוטוקולים
אפשר להשתמש באותם מפות URL, כללי מארח וכללי התאמה לנתיב כדי לעבד בקשות HTTP ו-HTTPS שנשלחות על ידי לקוחות, כל עוד גם שרת ה-proxy ל-HTTP וגם שרת ה-proxy ל-HTTPS מפנים למפת ה-URL.
מפת URL פשוטה
מפת URL הפשוטה ביותר כוללת רק שירות לקצה העורפי המוגדר כברירת מחדל או קטגוריית קצה עורפי המוגדרת כברירת מחדל. הוא לא מכיל כללי מארח או דפוסי נתיב. שירות ברירת המחדל לקצה העורפי או קטגוריית קצה עורפי של ברירת המחדל (מה שהגדרתם) מטפלים בכל כתובות ה-URL המבוקשות.
אם מגדירים שירות קצה עורפי שמוגדר כברירת מחדל, Google Cloud מפנה בקשות לקבוצות המופעים של הקצה העורפי או לקבוצות ה-NEG של הקצה העורפי בהתאם להגדרות של שירות הקצה העורפי.
סדר הפעולות
עבור שם מארח ונתיב מסוימים בכתובת URL שהתקבלה, Google Cloud משתמשים בתהליך הבא כדי להפנות את הבקשה לשירות קצה עורפי או לקטגוריית קצה עורפי נכונים, כפי שהוגדר במפת URL:
אם מפת ה-URL לא מכילה כלל מארח לשם המארח של כתובת ה-URL,Google Cloud מפנה את הבקשות לשירות קצה עורפי ברירת המחדל או לקטגוריית קצה עורפי ברירת המחדל במפת ה-URL, בהתאם למה שהגדרתם.
אם מפת URL מכילה כלל מארח שכולל את שם המארח של כתובת ה-URL, המערכת בודקת את התאמת הנתיב שאליו מפנה כלל המארח:
אם כלי ההתאמה לנתיבים מכיל כלל נתיב שתואם בדיוק לנתיב של כתובת ה-URL, Google Cloud הבקשות מופנות לשירות לקצה העורפי או לקטגוריית קצה עורפי של כלל הנתיב הזה.
אם למתאם הנתיבים אין כלל נתיב שתואם בדיוק לנתיב של כתובת ה-URL, אבל יש לו כלל נתיב שמסתיים ב-
/*והקידומת שלו תואמת לחלק הארוך ביותר של הנתיב של כתובת ה-URL, אז Google Cloudמפנה את הבקשות לשירות לקצה העורפי או לקטגוריית הקצה העורפי של כלל הנתיב הזה. לדוגמה, במפת URL שמכילה שני כללים להתאמת נתיבים,/video/hd/movie1ו-/video/hd/*, אם כתובת ה-URL מכילה את הנתיב המדויק/video/hd/movie1, היא תותאם לכלל הנתיב הזה.אם אף אחד מהתנאים הקודמים לא מתקיים, Google Cloud הבקשות מופנות לשירות הקצה העורפי של התאמת הנתיבים או לדלי הקצה העורפי, בהתאם למה שהגדרתם.
אילוצים בהגדרת מפת URL
בקטעים הבאים מתוארות מגבלות מסוימות על הגדרת הרכיבים של מפות URL.
התאמות של ביטויים רגולריים בכללי מארח וכללי מסלול
כללי מארח מאפשרים להתאים את החלק של שם המארח בכתובת URL לקבוצת שמות המארחים שהוגדרו בכלל המארח. בשדה hostRules[].hosts[] אפשר להשתמש בשם מארח ספציפי או בתו כללי לחיפוש * כדי להתאים לשם המארח בבקשה הנכנסת.
כללי מסלול מאפשרים להגדיר כללי התאמה שיכולים להתאים לביטוי רגולרי בנתיב, במחרוזת השאילתה או בכותרת בבקשה הנכנסת. כללי מסלול תומכים בשימוש בביטויים רגולריים בשדות הבאים של מפת URL:
-
pathMatchers[].routeRules[].matchRules[].regexMatch: ביטוי רגולרי שמשמש להתאמת הנתיב של הבקשה הנכנסת. -
pathMatchers[].routeRules[].matchRules[].headerMatches[].regexMatch: ביטוי רגולרי שמכיל פרדיקט שתואם לכותרת של הבקשה הנכנסת. -
pathMatchers[].routeRules[].matchRules[].queryParameterMatches[].regexMatch: ביטוי רגולרי שמכיל פרדיקט שתואם לפרמטר של שאילתה בבקשה הנכנסת.
בקשה נחשבת כבקשה שתואמת ל-routeRule אם מתקיים אחד מהתנאים של matchRules. עם זאת, פרדיקטים בתוך matchRule נתון הם בעלי סמנטיקה של AND.
כלומר, כל הפרדיקטים ב-matchRule צריכים להתאים כדי שהבקשה תתאים לכלל.
הערות נוספות לגבי השימוש:
יש תמיכה בביטויים רגולריים רק במוצרים הבאים:
- מאזני עומסים פנימיים אזוריים של אפליקציות (ALB)
- מאזני עומסים פנימיים של אפליקציות (ALB) חוצי-אזורים
- מאזני עומסים חיצוניים אזוריים של אפליקציות (ALB)
- מאזני עומסים גלובליים חיצוניים של אפליקציות (ALB)
אי אפשר להשתמש בביטויים רגולריים במאזני עומסים קלאסיים של אפליקציות.
כדי ליצור ביטויים רגולריים, צריך להשתמש בתחביר RE2. לרשימה המלאה של המגבלות והאופרטורים שמותרים במפות URL, קראו את מפרט RE2 למפות URL.
התאמה של ביטויים רגולריים היא פעולה יקרה מבחינת צריכת הזיכרון וזמן האחזור של עיבוד הבקשות. אם בוחרים להשתמש בהתאמה של ביטויים רגולריים, צריך לקחת בחשבון את הירידה בביצועים כשמתכננים את הפריסה. לדוגמה, אם יש לכם מפת URL עם ביטוי רגולרי יחיד, זמן האחזור של מאזן העומסים צפוי להתארך ב-100 מיקרו-שניות לכל בקשה. אם במפת URL יש 5 ביטויים רגולריים להתאמה, זמן הטעינה צפוי לגדול ב-200 מיקרו-שניות לכל בקשה.
דוגמה 1: שימוש בביטוי רגולרי כדי להתאים נתיב
הנתיב נחשב לתואם אם הוא תואם לביטוי הרגולרי שצוין על ידי regexMatch אחרי הסרת פרמטרים של שאילתות ועוגנים שסופקו עם כתובת ה-URL המקורית. לדוגמה, במפות ה-URL לדוגמה שבהמשך, הביטוי הרגולרי של כלל המסלול /videos/hd.* יחול על כתובת URL עם הנתיב /videos/hd-abcd?key=245.
defaultService: projects/example-project/global/backendServices/org-site
name: rule-match-url-map
hostRules:
- hosts:
- '*' # Match any host
pathMatcher: video-matcher
- hosts:
- example.net
pathMatcher: video-matcher
pathMatchers:
- name: video-matcher
# Optional: default service for this path matcher if no routeRules match
defaultService: projects/example-project/global/backendServices/video-site
routeRules:
- priority: 100000
matchRules:
- regexMatch: /videos/hd.*
routeAction:
weightedBackendServices:
- backendService: projects/example-project/global/backendServices/video-hd
weight: 100
הסבר על כל שדה במפת URL לדוגמה:
-
defaultService: מציין את שירות ה-Backend שמוגדר כברירת מחדל לשימוש אם אף כלל אחר במפת כתובות ה-URL לא תואם לבקשה הנכנסת. -
name: מקצה את השם rule-match-url-map להגדרת מפת ה-URL הזו. -
hostRules: הגדרת רשימת כללים להתאמה של כותרת המארח של בקשות נכנסות. הכלל הראשון תואם לכל מארח (*) ומפנה תנועה אלpathMatcherבשם video-matcher. הכלל השני מתאים באופן ספציפי למארחexample.netומפנה את התנועה גם ל-path matcher בשם video-matcher. -
pathMatchers: מגדיר רשימה של התאמות נתיבים עם שם. -
name: מגדיר התאמת נתיב בשם video-matcher. -
defaultService: הגדרת שירות ברירת המחדל למתאם הנתיבים הזה. השירות הזה משמש אם בקשה תואמת לכללי המארח שמפנים אל video-matcher, אבל לא תואמת לאף אחד מכללי ה-routeRulesשבתוכו. -
routeRules: מכיל רשימה של כללים להתאמה לנתיב של כתובת ה-URL. -
priority: מגדיר את העדיפות של הכלל הזה ל-100000. הכללים נבדקים לפי סדר העדיפות, מהמספר הנמוך ביותר למספר הגבוה ביותר. -
matchRules: מכיל את התנאים להתאמה של כלל המסלול הזה. regexMatch: התנאי הזה בודק אם נתיב כתובת ה-URL תואם לביטוי הרגולרי/videos/hd.*(לדוגמה, "/videos/hd" ו-"/videos/hd-caching").-
routeAction: מציינת את הפעולה שתתבצע אם כל התנאים ב-matchRulesיתקיימו. -
weightedBackendServices: חלוקת התנועה בין רשימה של שירותים לקצה העורפי על סמך משקלים. -
backendService: מציין את שירות לקצה העורפי שאליו תנותב תעבורת הנתונים. -
weight: מקצה משקל של 100 לשירות לקצה העורפי הזה. מכיוון שזה השירות היחיד ברשימה, הוא יקבל 100% מהתנועה שתואמת ל-routeRule הזה.
במפת ה-URL הבאה מוצגת דוגמה דומה בלי להשתמש ב-routeAction.
defaultService: projects/example-project/global/backendServices/video-site
name: path-matcher-videos
routeRules:
matchRules:
- regexMatch: /videos/hd.*
priority: 100000
service: projects/example-project/global/backendServices/video-hd
דוגמה 2: שימוש בביטוי רגולרי להתאמת כותרות
הכותרת נחשבת כתואמת אם הערך של הכותרת תואם לביטוי הרגולרי שצוין על ידי regexMatch. לדוגמה, במיפוי כתובות ה-URL לדוגמה שבהמשך, הביטוי הרגולרי של שם ה-header, .*Android.*-hd, יחול על בקשה עם ה-header User-Agent:123Androidabc-hd.
defaultService: projects/example-project/regions/us-central1/backendServices/default-backend-service
name: header-match-url-map
hostRules:
- hosts:
- '*' # Match any host
pathMatcher: header-matcher
pathMatchers:
- name: header-matcher
# Optional: default service for this path matcher if no routeRules match
defaultService: projects/example-project/regions/us-central1/backendServices/default-backend-service
routeRules:
- priority: 1
matchRules:
- headerMatches:
- headerName: User-Agent
regexMatch: .*Android.*-hd
# This prefix match applies to the path part of the URL
- prefixMatch: /video/
# service: can be used instead of routeAction if no other actions are needed
service: projects/example-project/regions/us-central1/backendServices/video-backend-service
# Alternatively, use routeAction to specify the service:
# routeAction:
# weightedBackendServices:
# - backendService: projects/example-project/regions/us-central1/backendServices/video-backend-service
# weight: 100
הסבר על כל שדה במפת URL לדוגמה:
-
defaultService: מציין את שירות ה-Backend שמוגדר כברירת מחדל לשימוש אם אף כלל אחר במפת כתובות ה-URL לא תואם לבקשה הנכנסת. -
name: מקצה את השם header-match-url-map להגדרת מפת URL זו. -
hostRules: הגדרת רשימת כללים להתאמה של כותרת המארח של בקשות נכנסות. הכלל תואם לכל מארח ('*') ומפנה את התנועה אלpathMatchernamed header-matcher. -
pathMatchers: מגדיר רשימה של התאמות נתיבים עם שמות. -
name: מגדיר כלי להתאמת נתיבים בשם header-matcher. -
defaultService: הגדרת שירות ברירת המחדל להתאמת הנתיב הזו. השירות הזה משמש אם בקשה תואמת לכלל המארח אבל לא תואמת לאף אחד מה-routeRulesבתוך התאמת הנתיב הזו. -
routeRules: מכיל רשימה של כללים להתאמת בקשות נכנסות על סמך כותרות ונתיבים. -
priority: הגדרת העדיפות של הכלל הזה ל-1. הכללים נבדקים לפי סדר העדיפות, מהמספר הנמוך ביותר למספר הגבוה ביותר. -
matchRules: מכיל רשימה של תנאים שכולם צריכים להתקיים כדי שהכלל יתאים. -
headerMatches: הגדרת תנאים על סמך כותרות הבקשה. -
headerName: חיפוש של הכותרת User-Agent. -
regexMatch: בודק אם הערך של כותרת סוכן המשתמש תואם לביטוי הרגולרי.*Android.*-hd. התנאי הזה יתאים לסוכני משתמש שמציינים מכשיר Android, עם מחרוזת שמכילה את הערך '-hd'. prefixMatch: כשהתנאי מוגדר לערך/video/, הוא בודק אם נתיב כתובת ה-URL מתחיל ב-"/video/".-
service: אם כל התנאים שלmatchRulesמתקיימים, תעבורת נתונים מופנית לשירות לקצה העורפי הזה. - הקטע
routeActionשסומן כהערה מציג דרך חלופית לציין את שירות הקצה העורפי, שנדרשת אם צריך להגדיר פעולות אחרות של מסלולים, כמו שכתוב של כתובות URL, טרנספורמציות של כותרות או שירותי קצה עורפי משוקללים.
דוגמה 3: שימוש בביטוי רגולרי כדי להתאים פרמטרים של שאילתה
פרמטר השאילתה נחשב להתאמה אם הערך של הנתיב עם פרמטרים של שאילתה תואם לביטוי הרגולרי שצוין על ידי regexMatch. לדוגמה, במפת כתובות ה-URL הבאה, הביטוי הרגולרי של פרמטר השאילתה, /im.*/.*.html, יחול על כתובת URL עם פרמטרים של שאילתה כמו /images/random_page.html?param1=param_value_123abc-hd.
defaultService: projects/example-project/regions/us-central1/backendServices/sample-bs
name: query-match-url-map
hostRules:
- hosts:
- '*' # Match any host
pathMatcher: query-matcher
pathMatchers:
- name: query-matcher
# Optional: default service for this path matcher if no routeRules match
defaultService: projects/example-project/regions/us-central1/backendServices/sample-bs
routeRules:
- priority: 1
matchRules:
- queryParameterMatches:
- name: param1 #parameter name in query
regexMatch: param_value_.*-hd
# This regexMatch applies to the path part of the URL
- regexMatch: /im.*/.*.html
# Directs traffic to this service if all conditions in matchRules are met
service: projects/example-project/regions/us-central1/backendServices/sample-images-bs
הסבר על כל שדה במפת URL לדוגמה:
-
hostRules: מוסיף כלל להתאמה לכל המארחים (*) ומפנה את התנועה אלpathMatcherבשם query-matcher. -
pathMatchers: מגדיר כלי להתאמת נתיבים בשם query-matcher. -
routeRules: הצבת הבלוקrouteRulesשסופק בתוך query-matcher. -
priority: מגדיר את העדיפות של הכלל הזה ל-1. הערכת הכללים מתבצעת לפי הסדר, ממספר העדיפות הנמוך ביותר למספר העדיפות הגבוה ביותר. -
matchRules: מכיל את התנאים שלrouteRules. queryParameterMatches: בודק אם הפרמטר של השאילתה שנקרא "param1" תואם לביטוי הרגולריparam_value_.*-hd.-
regexMatch: הביטוי הרגולרי/im.*/.*.htmlחל על הנתיב של כתובת ה-URL (לדוגמה, /images/random_page.html), לפני מחרוזת השאילתה. -
service: מציין את השירות לקצה העורפי שבו צריך להשתמש אם כל התנאים ב-matchRulesמתקיימים.
שכתוב כתובות URL באמצעות ביטויים רגולריים לכללי מסלול
אפשר להשתמש בפעולות שכתוב של תבניות ביטוי רגולרי (regexRewrite) כדי לשכתב נתיבי כתובות ה-URL על ידי החלפה או הסרה של רכיבי נתיב כתובת ה-URL לפני העברת בקשות לשרתי הקצה העורפיים.
אתם מציינים ביטויים רגולריים באמצעות השדות הבאים:
-
pathMatchers[].routeRules[].routeAction.urlRewrite.regexRewrite.pathPattern: ביטוי רגולרי בתחביר RE2 שמשמש להתאמה וללכידה של חלקים מנתיב הבקשה הנכנסת. -
pathMatchers[].routeRules[].routeAction.urlRewrite.regexRewrite.pathSubstitution: מחרוזת שמשמשת לשחזור הנתיב לפני שליחת הבקשה לשירות לקצה העורפי. אפשר להפנות לקבוצות שנלכדו מ-pathPatternבאמצעות תחביר עם שם\g<name>(לקבוצות עם שם כמו(?<name>re)) או תחביר עם מספר כמו\1או\2.
איך פועלות קבוצות לחילוץ ב-RE2
קבוצות לחילוץ ב-RE2 הן חלקים של ביטוי רגולרי שמוקפים בסוגריים (...), ששומרים את הטקסט התואם לשימוש או לחילוץ בשלב מאוחר יותר. הם מאפשרים לתעד קטעי נתיב ולשכתב את כתובת ה-URL לפני שהיא נשלחת לקצה העורפי.
קבוצות לחילוץ מוגדרות בשדה pathPattern באמצעות הפורמט (?<name>re) או (?P<name>re), כאשר name הוא שם המשתנה שהוקצה לחלק שחולץ מנתיב כתובת ה-URL שיוחלף, ו-re הוא תבנית הביטוי הרגולרי שמשמשת להתאמה לחלק הזה. אחר כך מציינים את קבוצות החילוץ בשדה pathSubstitution כדי להחליף אותן באמצעות הפורמט \g<name>.
לדוגמה:
- נתיב כתובת ה-URL של בקשת הלקוח הנכנסת:
/api/users/21334/profile.json pathPattern:/api/users/(?<id>\d+)/(?<path>[a-z]+\.json)pathSubstitution:/users/\g<id>/\g<path>- הנתיב שנשלח לקצה העורפי:
/users/21334/profile.json
שימו לב: קבוצות חילוץ שנכתבות בפורמט (?<name>re) מקבלות גם מספר וגם שם. אפשר להתייחס אליהם לפי השם, \g<name>, או לפי המספר, \1.
הערות נוספות לגבי השימוש:
אפשר להשתמש בביטויים רגולריים כדי לשכתב כתובות URL רק במוצרים הבאים:
- מאזני עומסים פנימיים אזוריים של אפליקציות (ALB)
- מאזני עומסים פנימיים של אפליקציות (ALB) חוצי-אזורים
- מאזני עומסים חיצוניים אזוריים של אפליקציות (ALB)
- מאזני עומסים גלובליים חיצוניים של אפליקציות (ALB)
אי אפשר להשתמש בביטויים רגולריים במאזני עומסים קלאסיים של אפליקציות.
כדי ליצור ביטויים רגולריים, צריך להשתמש בתחביר RE2. לרשימה המלאה של המגבלות והאופרטורים שמותרים במפות URL, קראו את מפרטי RE2 למפות URL.
אפשר לציין רק פעולה אחת של שכתוב כתובת URL לכל כלל ניתוב. אי אפשר להשתמש ב-
regexRewriteיחד עםpathPrefixRewriteאוpathTemplateRewrite.בשדה
pathSubstitutionאפשר להגדיר עד שמונה קבוצות לחילוץ, שצריך להגדיר בשדהpathPattern.השדות
pathPatternו-pathSubstitutionמוגבלים ל-250 תווים לכל היותר.
דוגמה: כתיבה מחדש של כתובת URL באמצעות קבוצות לחילוץ של ביטויים רגולריים
בדוגמה הבאה מוסבר איך להגדיר מפת URL כדי לתעד חלקים מנתיב בקשה באמצעות קבוצות לחילוץ עם שם, ולהחליף אותם בנתיב חדש.
בדוגמה הזו, כתובות URL של בקשות נכנסות כמו /region/us-central1/bucket/my-bucket/stage/dev/object.pdf נכתבות מחדש ל-/us-central1/my-bucket-dev/object.pdf לפני שהן מועברות דרך שרת proxy לשירות לקצה העורפי.
defaultService: projects/example-project/regions/us-central1/backendServices/default-bs
name: regex-rewrite-url-map
pathMatchers:
- name: region-matcher
defaultService: projects/example-project/regions/us-central1/backendServices/default-bs
routeRules:
- matchRules:
- prefixMatch: /region/
priority: 1
service: projects/example-project/regions/us-central1/backendServices/rewrite-bs
routeAction:
urlRewrite:
regexRewrite:
pathPattern: "/region/(?<reg>[a-z0-9-]+)/bucket/(?<bkt>[a-z0-9-]+)/stage/(?<stg>[a-z0-9-]+)/object\\.pdf"
pathSubstitution: "/\\g<reg>/\\g<bkt>-\\g<stg>/object.pdf"
הסבר על השדות שמופיעים בדוגמה של מפת URL:
defaultService: מציין את שירות לקצה העורפי שברירת המחדל היא שהבקשות ינותבו אליו אם אף אחד מהערכים האחרים שלrouteRulesלא תואם לבקשה הנכנסת.-
name: שם שמוגדר על ידי המשתמש למיפוי כתובות ה-URL הזה. -
routeRules: רשימה של כללים שמגדירים איך התנועה מותאמת ומנותבת. הערכת הכללים מתבצעת לפי סדר העדיפות שלהם. -
matchRules: מערך של תנאים שצריכים להתקיים כדי שהכלל הזה יחול. -
prefixMatch: התאמה לתחילת הנתיב של כתובת ה-URL. בדוגמה המתוקנת, הכלל חל רק על נתיבים שמתחילים ב-/region/. -
priority: מספר שלם שקובע את הסדר שבו הכללים נבדקים. מספרים נמוכים יותר מייצגים עדיפות גבוהה יותר. -
service: השירות לקצה העורפי שאליו תועבר התנועה אם מתקיימים התנאים שלmatchRulesבכלל הזה ופעולת הניתוב מבוצעת. -
routeAction: הפעולה שצריך לבצע כשבקשה תואמת ל-matchRules. -
urlRewrite: מגדיר איך לשנות את כתובת ה-URL לפני שהיא מועברת דרך שרת proxy לשירות לקצה העורפי. -
regexRewrite: הגדרה של כתיבה מחדש של כתובות URL באמצעות ביטויים רגולריים. -
pathPattern: הביטוי הרגולרי (באמצעות תחביר Google RE2) שמשמש להתאמה לנתיב כתובת ה-URL הנכנסת. קבוצות חילוץ עם שם בפורמט(?<name>re)משמשות לחילוץ חלקים מהנתיב. בדוגמה,"/region/(?<reg>[a-z0-9-]+)/bucket/(?<bkt>[a-z0-9-]+)/stage/(?<stg>[a-z0-9-]+)/object\\.pdf"מתעד את האזור (reg), את שם הקטגוריה (bkt) ואת שם השלב (stg). -
pathSubstitution: המחרוזת שמשמשת לשחזור הנתיב. הוא מפנה לקבוצות החילוץ עם השמות מהתבנית באמצעות התחביר\g<name>. בדוגמה,"/\\g<reg>/\\g<bkt>-\\g<stg>/object.pdf"משתמש בערכיםreg,bktו-stgשנתפסו כדי לבנות את הנתיב החדש:/us-central1/my-bucket-dev/object.pdf.
תווים כלליים לחיפוש, ביטויים רגולריים וכתובות URL דינמיות בכללי נתיב ובהתאמה לפי קידומת
כלל נתיב (
pathMatchers[].pathRules[]) יכול לכלול תו כללי לחיפוש (*) רק אחרי לוכסן (/). לדוגמה,/videos/*ו-/videos/hd/*הם כללי נתיב תקינים, אבל/videos*ו-/videos/hd*לא תקינים.כללי נתיב לא משתמשים בביטויים רגולריים או בהתאמה למחרוזת משנה. אפשר להשתמש באופרטורים פשוטים להתאמת נתיבים ב-PathTemplateMatch. לדוגמה, כללי נתיב ל-
/videos/hdאו ל-/videos/hd/*לא חלים על כתובת URL עם הנתיב/video/hd-abcd. עם זאת, כלל נתיב ל-/video/*חל על הנתיב הזה.בהתאמה לפי קידומת (
pathMatchers[].routeRules[].matchRules[].prefixMatch), התו*לא נחשב לתו כללי לחיפוש, אלא לתו מילולי.במגדירי התאמות לנתיבים (ובמפות URL באופן כללי) אין תכונות שפועלות כמו ההוראה
<LocationMatch>של Apache. אם יש לכם אפליקציה שיוצרת נתיבי כתובות URL דינמיים עם קידומת משותפת, כמו/videos/hd-abcdו-/videos/hd-pqrs, ואתם צריכים לשלוח בקשות שמופנות לנתיבים האלה לשירותים שונים בעורף המערכת, יכול להיות שלא תוכלו לעשות זאת באמצעות מיפוי כתובות URL. במקרים שבהם יש רק כמה כתובות URL דינמיות אפשריות, אפשר ליצור התאמה לנתיב עם קבוצה מוגבלת של כללי נתיב. במקרים מורכבים יותר, צריך לבצע התאמה של ביטויים רגולריים מבוססי-נתיב בקצה העורפי.
תווים כלליים לחיפוש ואופרטורים של התאמת דפוסים בתבניות נתיב לכללי מסלול
אופרטורים גמישים להתאמת דפוסים מאפשרים להתאים כמה חלקים של נתיב כתובת ה-URL, כולל כתובות URL חלקיות וסיומות (סיומות קבצים), באמצעות תחביר של תווים כלליים לחיפוש. האופרטורים האלה יכולים לעזור כשצריך לנתב תנועה ולבצע שכתובים על סמך נתיבים מורכבים של כתובות URL. אפשר גם לשייך רכיב נתיב אחד או יותר למשתנים עם שמות, ואז להפנות למשתנים האלה כשמשכתבים את כתובת ה-URL. בעזרת משתנים בעלי שם, אתם יכולים לשנות את הסדר של רכיבי כתובת ה-URL ולהסיר אותם לפני שהבקשה נשלחת למקור.
אפשר להשתמש בהתאמת דפוסים עם תווים כלליים לחיפוש רק במוצרים הבאים:
- מאזן עומסים גלובלי חיצוני של אפליקציות (ALB)
- מאזן עומסים חיצוני אזורי של אפליקציות (ALB)
- מאזן עומסים פנימי אזורי של אפליקציות (ALB)
- מאזן עומסים פנימי של אפליקציות (ALB) בין אזורים
- Cloud Service Mesh
בדוגמה הבאה, התנועה מנותבת לאפליקציית מסחר אלקטרוני שיש לה שירותים נפרדים למידע על עגלת הקניות ולמידע על המשתמשים.
אפשר להגדיר את routeRules באמצעות אופרטורים גמישים להתאמת תבניות ומשתנים עם שמות, כדי לשלוח את המזהה הייחודי של המשתמש לדף הפרטים של חשבון המשתמש ואת פרטי עגלת הקניות של המשתמש לשירות עיבוד עגלות קניות אחרי שכתוב של כתובת ה-URL.
pathMatchers:
- name: cart-matcher
routeRules:
- description: CartService
matchRules:
- pathTemplateMatch: '/xyzwebservices/v2/xyz/users/{username=*}/carts/{cartid=**}'
service: cart-backend
priority: 1
routeAction:
urlRewrite:
pathTemplateRewrite: '/{username}-{cartid}/'
- name: user-matcher
routeRules:
- description: UserService
matchRules:
- pathTemplateMatch: '/xyzwebservices/v2/xyz/users/*/accountinfo/*'
service: user-backend
priority: 1
זה מה שקורה כשלקוח מבקש את /xyzwebservices/v2/xyz/users/abc@xyz.com/carts/FL0001090004/entries/SJFI38u3401nms?fields=FULL&client_type=WEB, שמכיל גם פרטי משתמש וגם פרטי עגלת קניות:
- נתיב הבקשה תואם ל-
pathTemplateMatchב-cart-matcherpathMatcher. המשתנה{username=*}תואם ל-abc@xyz.comוהמשתנה{cartid=**}תואם ל-FL0001090004/entries/SJFI38u3401nms. - הפרמטרים של השאילתה מופרדים מהנתיב, הנתיב נכתב מחדש על סמך
pathTemplateRewriteוהפרמטרים של השאילתה מצורפים לנתיב שנכתב מחדש. אנחנו צריכים להשתמש רק באותם משתנים שבהם השתמשנו כדי להגדיר אתpathTemplateMatchב-pathTemplateRewrite. - הבקשה שנכתבה מחדש נשלחת אל
cart-backendעם נתיב כתובת ה-URL שנכתב מחדש:/abc@xyz.com-FL0001090004/entries/SJFI38u3401nms?fields=FULL&client_type=WEB.
אם הלקוח מבקש את /xyzwebservices/v2/xyz/users/abc%40xyz.com/accountinfo/abc-1234, שכולל רק פרטי משתמש וחשבון, קורה הדבר הבא:
- נתיב הבקשה תואם ל-
pathTemplateMatchב-user-matcherpathMatcher. המחרוזת הראשונה*תואמת למחרוזתabc%40xyz.comוהמחרוזת השנייה*תואמת למחרוזתabc-1234. - הבקשה נשלחת אל
user-backend.
בטבלה הבאה מפורט התחביר של תבניות הנתיבים.
| אופרטור | התאמות |
|---|---|
* |
קטע נתיב יחיד, לא כולל את התווים / שמפרידים בין הנתיבים. |
** |
התאמה לאפס תווים או יותר, כולל כל תו מפריד נתיבים
/ בין כמה קטעי נתיב. אם כוללים אופרטורים אחרים, האופרטור ** חייב להיות האופרטור האחרון. |
{name} או {name=*} |
משתנה בעל שם שתואם לפלח נתיב אחד. התאמה לקטע נתיב יחיד, לא כולל תווי ההפרדה / של הנתיב שמסביב. |
{name=news/*} |
משתנה עם שם שתואם באופן מפורש לשני פלחים בנתיב:
news ופלח עם התו הכללי *. |
{name=*/news/*} |
משתנה בעל שם שתואם לשלושה מקטעי נתיב. |
{name=**} |
משתנה בעל שם שתואם לאפס תווים או יותר. אם הוא מופיע, הוא חייב להיות האופרטור האחרון. |
כשמשתמשים באופרטורים האלה להתאמת תבניות גמישה, חשוב לזכור את הנקודות הבאות:
- אפשר לשלב כמה אופרטורים בתבנית אחת.
- הפרמטרים של השאילתה מופרדים מהנתיב, הנתיב נכתב מחדש על סמך
pathTemplateRewrite, והפרמטרים של השאילתה מצורפים לנתיב שנכתב מחדש. - הבקשות לא עוברות נורמליזציה של קידוד באחוזים. לדוגמה, כתובת URL עם תו לוכסן בקידוד אחוזים (%2F) לא מפוענחת לצורה הלא מקודדת.
- כל שם משתנה, כמו
{segment}או{region}, יכול להופיע רק פעם אחת באותה תבנית. הגדרה של כמה משתנים עם אותו שם לא תקינה והמערכת תדחה אותה. - שמות המשתנים הם תלויי אותיות רישיות (case-sensitive) וחייבים להיות מזהים תקינים. כדי לבדוק אם שם משתנה תקין, מוודאים שהוא תואם לביטוי הרגולרי
^[a-zA-Z][a-zA-Z0-9_]*$.-
{API},{api}ו-{api_v1}הם מזהים תקינים. הם מזהים שלושה משתנים נפרדים. - המזהים
{1},{_api}ו-{10alpha}לא תקינים.
-
- אפשר להוסיף עד חמישה אופרטורים לכל תבנית.
כדי לבצע שכתוב אופציונלי של כתובת URL לפני שהבקשה נשלחת למקור, אפשר להשתמש באותם משתנים שהגדרתם כדי לתעד נתיב.
לדוגמה, אתם יכולים להפנות למשתנים, לשנות את הסדר שלהם או להשמיט אותם בשדה pathTemplateRewrite כשמגדירים את urlRewrite.
כשמשתמשים במשתנים ובאופרטורים להתאמת דפוסים גמישה בשביל לשכתב כתובות URL, חשוב לזכור את הדברים הבאים:
- כשמשכתבים כתובת URL, אפשר להשמיט משתנים אם הם לא נדרשים כחלק מכתובת ה-URL המשוכתבת.
- לפני כל שכתוב, אתם יכולים לזהות את כתובת ה-URL שנשלחה על ידי הלקוח במקור שלכם על ידי בדיקת כותרות התגובה. כתובת ה-URL המקורית של הלקוח מאוכלסת בכותרת
x-client-request-urlובכותרתx-envoy-original-path.
דוגמה לתהליך עבודה של מפת URL עם מאזן עומסים חיצוני של אפליקציות (ALB)
בדוגמה הבאה אפשר לראות את סדר הפעולות של מיפוי כתובות URL. בדוגמה הזו מגדירים רק את מפת כתובות ה-URL של מאזן עומסים קלאסי של אפליקציות. כדי לפשט את העניינים, נשתמש רק בשירותים לקצה העורפי, אבל אפשר להחליף אותם בקטגוריות לקצה העורפי. במאמר יצירת מאזן עומסים קלאסי של אפליקציות מוסבר איך יוצרים את הרכיבים האחרים של מאזן העומסים.
מידע נוסף על יצירה והגדרה של מפות URL עם התאמות נתיבים וכללי מארח זמין במסמכי התיעוד של gcloud compute url-maps create.
יוצרים מיפוי כתובות URL למאזן העומסים ומציינים שירות ברירת מחדל לקצה העורפי. בדוגמה הזו נוצרת מפה של כתובות URL בשם
video-org-url-mapשמפנה לשירות קיים לקצה העורפי בשםorg-site.gcloud compute url-maps create video-org-url-map \ --default-service=org-siteיוצרים התאמה לנתיב בשם
video-matcherעם המאפיינים הבאים:- שירות ברירת המחדל לקצה העורפי הוא
video-site, שירות קיים לקצה העורפי. - מוסיפים כללי נתיב שמפנים בקשות לנתיב המדויק של כתובת ה-URL
/video/hdאו לקידומת של נתיב כתובת ה-URL/video/hd/*לשירות לקצה העורפי קיים בשםvideo-hd. - מוסיפים כללי נתיב שמפנים בקשות לנתיב המדויק של כתובת ה-URL
/video/sdאו לקידומת של נתיב כתובת ה-URL/video/sd/*לשירות לקצה העורפי קיים בשםvideo-sd.
gcloud compute url-maps add-path-matcher video-org-url-map \ --path-matcher-name=video-matcher \ --default-service=video-site \ --path-rules=/video/hd=video-hd,/video/hd/*=video-hd,/video/sd=video-sd,/video/sd/*=video-sd- שירות ברירת המחדל לקצה העורפי הוא
יוצרים כלל מארח לשם המארח
example.netשמפנה למתאם הנתיביםvideo-matcher.gcloud compute url-maps add-host-rule video-org-url-map \ --hosts=example.net \ --path-matcher-name=video-matcher
מפת כתובות ה-URL של video-org-url-map צריכה להיראות כך:
gcloud compute url-maps describe video-org-url-map
creationTimestamp: '2021-03-05T13:34:15.833-08:00'
defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/org-site
fingerprint: mfyJIT7Zurs=
hostRules:
- hosts:
- '*'
pathMatcher: video-matcher
- hosts:
- example.net
pathMatcher: video-matcher
id: '8886405179645041976'
kind: compute#urlMap
name: video-org-url-map
pathMatchers:
- defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/video-site
name: video-matcher
pathRules:
- paths:
- /video/hd
- /video/hd/*
service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/video-hd
- paths:
- /video/sd
- /video/sd/*
service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/video-sd
selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/video-org-url-map
מפת ה-URL video-org-url-map מפנה כתובות URL שנכללות בבקשות לשרתי קצה עורפיים באופן הבא.
בטבלה הבאה מוסבר עיבוד הבקשה שמוצג בתרשים שלמעלה.
| שם המארח | נתיבים של כתובות URL | שירות לקצה העורפי שנבחר | הסיבה לבחירה |
|---|---|---|---|
שם המארח:example.org וכל שמות המארחים האחרים
שונה מexample.net |
כל הנתיבים | org-site |
שם המארח לא נמצא באף כלל מארח של מפת URL, ולכן הבקשה מופנית לשירות לקצה העורפי של מפת URL. |
שם מארח:example.net |
/video/video/examples |
video-site |
הבקשה מועברת לשירות ברירת המחדל של הקצה העורפי כי אין כלל נתיב ל-/video/ או ל-/video/*. כלל המארח [example.net] מפנה למתאים נתיבים, אבל למתאים הנתיבים הזה אין כללי נתיבים שיחולו על הנתיבים האלה.
|
שם המארח:example.net |
/video/hd/video/hd/movie1/video/hd/movies/movie2כתובות URL אחרות שמתחילות ב- /video/hd/* |
video-hd |
כלל מארח של example.net מפנה למתאם נתיבים, שכללי הנתיב שלו מפנים בקשות לנתיבי כתובות ה-URL שתואמים בדיוק ל-/video/hd או שמתחילים ב-/video/hd/* לשירות לקצה העורפי video-hd. |
שם מארח:example.net |
/video/sd/video/sd/show1/video/sd/shows/show2כתובות URL אחרות שמתחילות ב- /video/sd/* |
video-sd |
כלל מארח של example.net מפנה למתאם נתיבים שכללי הנתיב שלו מפנים בקשות לנתיבי כתובות URL שתואמים בדיוק ל-/video/sd או שמתחילים ב-/video/sd/* לשירות לקצה העורפי video-sd. |
הפניות לכתובות URL אחרות
הפניה אוטומטית של כתובת URL מפנה את המבקרים בדומיין מכתובת URL אחת לאחרת.
הפניה אוטומטית של כתובת URL שמוגדרת כברירת מחדל לא מותנית בהתאמה לתבנית מסוימת בבקשה הנכנסת. לדוגמה, יכול להיות שתרצו להשתמש בהפניה אוטומטית לכתובת URL שמוגדרת כברירת מחדל כדי להפנות כל שם מארח לשם מארח לבחירתכם.
יש כמה דרכים ליצור הפניה אוטומטית לכתובת URL, כפי שמתואר בטבלה הבאה.
| Method | הגדרות אישיות |
|---|---|
| הפניה אוטומטית לכתובת ה-URL שמוגדרת כברירת מחדל במפת URL | defaultUrlRedirect ברמה העליונה |
| הפניה אוטומטית לכתובת URL שמוגדרת כברירת מחדל של כלי להשוואת נתיבים | pathMatchers[].defaultUrlRedirect[] |
| הפניה לכתובת URL של כלל נתיב של כלי להתאמת נתיבים | pathMatchers[].pathRules[].urlRedirect |
| הפניה אוטומטית של כתובת URL בכלל ניתוב של כלי להשוואת נתיבים | pathMatchers[].routeRules[].urlRedirect |
בתוך defaultUrlRedirect או urlRedirect, הפונקציה pathRedirect תמיד פועלת באופן הבא:
- כל נתיב הבקשה מוחלף בנתיב שאתם מציינים.
בתוך defaultUrlRedirect או urlRedirect, אופן הפעולה של prefixRedirect תלוי באופן השימוש בו:
- אם משתמשים ב-
defaultUrlRedirect,prefixRedirectהוא למעשה הוספת קידומת כי הנתיב התואם הוא תמיד/. - אם משתמשים ב-
urlRedirectבתוך כלל מסלול או כלל נתיב של התאמת נתיב,prefixRedirectהוא החלפה של קידומת על סמך האופן שבו הנתיב המבוקש הותאם כפי שמוגדר בכלל הנתיב או בכלל המסלול.
דוגמאות להפניות אוטומטיות
בטבלה הבאה מופיעות כמה דוגמאות להגדרות של הפניות אוטומטיות. בעמודה השמאלית מוצגת הגדרת ה-API להפניה אוטומטית לכתובת URL שמוגדרת כברירת מחדל.
| אתם רוצים | ההפניה מתבצעת באמצעות הפניה אוטומטית לכתובת URL שמוגדרת כברירת מחדל |
|---|---|
| הפניה אוטומטית מ-HTTP ל-HTTPS הפניה אוטומטית מ-http://host.name/path אל https://host.name/path |
kind: compute#urlMap
name: web-map-http
defaultUrlRedirect:
httpsRedirect: True
|
| הפניה אוטומטית מ-HTTP ל-HTTPS + הפניה אוטומטית של מארח Redirect http://any-host-name/path to https://www.example.com/path |
kind: compute#urlMap
name: web-map-http
defaultUrlRedirect:
httpsRedirect: True
hostRedirect: "www.example.com"
|
| HTTP ל-HTTPS + הפניה אוטומטית של מארח + הפניה אוטומטית של נתיב מלא הפניה אוטומטית http://any-host-name/path אל https://www.example.com/newPath |
kind: compute#urlMap
name: web-map-http
defaultUrlRedirect:
httpsRedirect: True
hostRedirect: "www.example.com"
pathRedirect: "/newPath"
|
| HTTP ל-HTTPS + הפניה אוטומטית של מארח + הפניה אוטומטית של קידומת הפניה אוטומטית מ-http://any-host-name/originalPath אל https://www.example.com/newPrefix/originalPath |
kind: compute#urlMap
name: web-map-http
defaultUrlRedirect:
httpsRedirect: True
hostRedirect: "www.example.com"
prefixRedirect: "/newPrefix"
|
קטע הקוד החלקי הבא מוסיף הערות לכל משאב API:
defaultUrlRedirect: redirectResponseCode: MOVED_PERMANENTLY_DEFAULT httpsRedirect: True # True if you want https://, false if you want http:// hostRedirect: "new-host-name.com" # Omit to keep the requested host pathRedirect: "/new-path" # Omit to keep the requested path; mutually exclusive to prefixRedirect prefixRedirect: "/newPrefix" # Omit to keep the requested path; mutually exclusive to pathRedirect stripQuery: False # True to omit everything in the URL after ? ...
המאמרים הבאים
כדי להוסיף, לאמת, לבדוק, להציג או למחוק מפת URL, קראו את המאמר שימוש במפות URL.
במאמר סקירה כללית על מפות של כללי מסלול ב-Cloud Service Mesh מוסבר איך משתמשים במפות של כללי מסלול ב-Cloud Service Mesh.