הגדרת תוסף תנועה

התכונה Service Extensions מאפשרת למאזני עומסים נתמכים של אפליקציות להשתמש בתוספים או לשלוח קריאות לשירותי בק-אנד כדי להוסיף עיבוד בהתאמה אישית לנתיב העיבוד. תוספים לניהול תנועה פועלים אחרונים בנתיב עיבוד הבקשות וראשונים בנתיב עיבוד התגובות כדי לשנות כותרות ומטענים ללא השפעה על הבחירה של שירות הקצה העורפי. בדף הזה מוסבר איך להגדיר תוספים למידע על תנועה.

סקירה כללית על תוספים של מאזן עומסים של אפליקציות זמינה במאמר סקירה כללית על תוספים של Cloud Load Balancing.

תוסף תנועה למאזן עומסים של אפליקציות מפנה למשאבים הבאים:

  • כלל העברה לצירוף
  • תוסף או שירות לקצה העורפי של callout שהקצה העורפי שלו מריץ את ext_proc gRPC API

תוסף תנועה מקבץ שירותי תוספים קשורים לשרשרת אחת או יותר. אפשר להגדיר גם פלאגינים וגם תוספי יתרונות מרכזיים באותה שרשרת של תוספים. כל שרשרת של תוספים בוחרת את התעבורה שעליה היא פועלת באמצעות תנאי התאמה של Common Expression Language ‏ (CEL). מאזן העומסים מעריך בקשה מול תנאי ההתאמה של כל שרשרת באופן עקבי. כאשר בקשה תואמת לתנאים שהוגדרו בשרשרת, כל התוספים בשרשרת פועלים על הבקשה. רק שרשרת אחת תואמת לבקשה נתונה.

לכל תוסף בשרשרת יכול להיות סט משלו של אירועים נתמכים. השינויים שתוסף מבצע בתוכן של הבקשה והתגובה גלויים לתוספים הנותרים בשרשרת. בתוספים שהוגדרו לתמיכה באירועי תגובה, רצף התוספים מתהפך בנתיב התגובה.

ההרחבה של התנועה מפנה אל כלל ההעברה של מאזן העומסים שאליו היא מצורפת. אחרי שמגדירים את המשאב, מאזן העומסים מתחיל לשלוח בקשות תואמות לשירותי התוספים.

מידע על המגבלות שקשורות לתוספים זמין בדף מכסות ומגבלות.

הגדרה באמצעות פלאגינים

בקטע הזה מוסבר איך להגדיר תוסף להפניית תנועה באמצעות פלאגין.

כל משאבי התוסף שמפנים לתוסף נתון צריכים להיות מאותו הסוג. בנוסף, לתוספים צריך להיות אותו סוג של איזון עומסים. אי אפשר להגדיר תוספים של Cloud Load Balancing עם תוספים שכבר נמצאים בשימוש בתוספים של Media CDN.

לפני שמתחילים

  1. יוצרים פלאגין שמכיל את הקוד המותאם אישית.

  2. יוצרים ומגדירים מאזן עומסים של אפליקציות שתומך בתוספים להרחבת התנועה.

    לדוגמה, הגדרת מאזן עומסים גלובלי חיצוני של אפליקציות (ALB) עם קצה עורפי של קבוצת מופעי מכונות וירטואליות.

  3. מגדירים דרך לשליחת בקשות בדיקה לשירות – לדוגמה, על ידי הפעלת curl. אם אתם משתמשים במאזן עומסים פנימי, צריך ליצור מכונת לקוח וירטואלית לבדיקה.

הגדרת תוסף תנועה באמצעות פלאגין

הדוגמה הבאה עוזרת להגדיר תוסף תעבורה באמצעות פלאגין שמוסיף כותרת תגובה, hello: service-extensions, כשהמארח תואם ל-example.com.

  1. בודקים אם יש התאמה ל-example.com במפת URL.

    1. מריצים את הפקודה הבאה curl מול כלל ההעברה במכונת ה-VM של הלקוח:

      curl -D - -H "host: example.com" FORWARDING_RULE_IP
      

      מחליפים את FORWARDING_RULE_IP בכתובת ה-IP של כלל ההעברה. כדי למצוא את כתובת ה-IP, משתמשים בפקודה gcloud compute forwarding-rules describe.

      הפלט אמור להיראות כך:

      HTTP/1.1 200 OK
      ...
      content-length: 46
      content-type: text/html
      via: 1.1 google
      
  2. מגדירים את תוסף התנועה.

    המסוף

    1. נכנסים לדף Service Extensions במסוף Google Cloud .

      כניסה לדף Service Extensions

    2. לוחצים על יצירת תוסף.

      ייפתח אשף שידריך אתכם בשלבים הראשונים.

    3. בוחרים באפשרות Load Balancing (איזון עומסים) עבור המוצר. לאחר מכן, לוחצים על המשך.

      מופיעה רשימה של נכסים נתמכים של Application Load Balancer.

    4. בסוג מאזן העומסים, בוחרים באפשרות 'מאזן עומסים של אפליקציות גלובלי חיצוני' או באפשרות 'מאזן עומסים של אפליקציות פנימי חוצה אזורים'. לאחר מכן, לוחצים על המשך.

    5. בקטע 'סוג הנכס', בוחרים באפשרות נכסי תנועה ולוחצים על המשך.

    6. כדי לפתוח את הטופס Create extension, לוחצים על Continue.

      בטופס יצירת תוסף, שימו לב שהבחירות הקודמות שמופיעות בחלק העליון של הדף לא ניתנות לעריכה.

    7. בקטע Basics (פרטים בסיסיים), מבצעים את הפעולות הבאות:

      1. מציינים שם ייחודי לתוסף.

        השם צריך להתחיל באות קטנה, להמשיך בעד 62 אותיות קטנות, מספרים או מקפים, ולא להסתיים במקף.

      2. אופציונלי: מזינים תיאור קצר של התוסף (עד 1,024 תווים).

    8. אופציונלי: בקטע תוויות, לוחצים על הוספת תווית. לאחר מכן, בשורה שמופיעה, מבצעים את הפעולות הבאות:

      • בשדה Key, מזינים שם מפתח.
      • בשדה ערך, מזינים ערך למפתח.

      כדי להוסיף עוד צמדי מפתח/ערך, לוחצים על הוספת תווית. אפשר להוסיף עד 64 צמדי מפתח/ערך.

      מידע נוסף על תוויות זמין במאמר יצירה ועדכון של תוויות לפרויקטים.

    9. בקטע כללי העברה, בוחרים כלל העברה אחד או יותר לקישור לתוסף – לדוגמה, http-content-rule.

      אי אפשר לבחור כללי העברה שכבר משויכים לתוסף אחר, והם יופיעו כלא זמינים.

    10. בקטע Extension, כדי להוסיף תוסף לביצוע עבור בקשה תואמת:

      • כדי להתאים בקשות שרשרת ההרחבות מופעלת עבורן, בשדה Match condition (תנאי התאמה), מציינים ביטוי ב-Common Expression Language ‏(CEL) – לדוגמה, request.host == "example.com".

        למידע נוסף על ביטויי CEL, אפשר ללחוץ על קבלת עזרה בנושא תחביר או לעיין במאמר העזרה בנושא שפת ההתאמה של CEL.

      • בשדה Programmability type (סוג התכנות), בוחרים באפשרות Plugins (פלאגינים).

      • בקטע Plugin, בוחרים פלאגין שנוצר באמצעות Service Extensions לאותו מוצר ולאותו סוג תוסף.

      • בקטע אירועים, בוחרים סוג אחד או יותר של אירועי HTTP שקוראים לתוסף.

      • בקטע Forward attributes (העברת מאפיינים), בוחרים את מאפייני הבקשה, החיבור והמיקום שרוצים שמאזן העומסים יעביר לתוסף Wasm. אפשר להגדיר עד 16 מאפיינים לכל תוסף. מידע נוסף זמין במאמר בנושא מאפיינים נתמכים.

      • בקטע העברת כותרות, לוחצים על הוספת כותרת, ואז מוסיפים כותרות HTTP להעברה לתוסף (מהלקוח או מהקצה העורפי). אם לא מציינים כותרת, כל הכותרות נשלחות.

      • אופציונלי: אם התוסף נכשל או שהזמן הקצוב לתגובה שלו הסתיים ואתם רוצים להמשיך את העיבוד של הבקשה או התשובה, בוחרים באפשרות מופעל בשדה Fail open. גם תוספים עוקבים בשרשרת מופעלים.

        כברירת מחדל, האפשרות Fail open לא מסומנת. במקרה כזה, כשיש שגיאה, עיבוד הבקשה או התשובה נפסק. אם כותרות התגובה לא נמסרו ללקוח במורד הזרם, קוד הסטטוס הכללי 500‏ HTTP מוחזר ללקוח. אם כותרות התגובה נמסרו, זרם ה-HTTP ללקוח מאופס.

        אפשרות ברירת המחדל של השארת Fail open לא מסומנת מומלצת כשנותנים עדיפות לאבטחה או ליושרה. הפעלת Fail open, במיוחד לפעולות לא קריטיות, עוזרת לתעדף את הזמינות.

      אם רוצים לציין יותר מתוסף אחד או שרשראות של תוספים במקום תוסף יחיד, לוחצים על הלחצן מעבר למצב מתקדם בסוף הטופס ומציינים את התוספים והשרשראות הנדרשים. התוספים פועלים לפי הסדר שבו הם מופיעים ברשימה.

      מציינים שמות ייחודיים לכל תוסף ולכל שרשור תוספים. השמות צריכים להיות בהתאם ל-RFC-1034, להכיל רק אותיות קטנות, מספרים ומקפים, והאורך המקסימלי שלהם הוא 63 תווים. בנוסף, התו הראשון חייב להיות אות והתו האחרון חייב להיות אות או מספר.

    11. לוחצים על יצירת תוסף.

    gcloud

    1. מגדירים את הפלאגין בקובץ YAML ומשייכים אותו לכלל העברה – לדוגמה, http-content-rule.

      cat >traffic-plugin.yaml <<EOF
          name: traffic-ext
          forwardingRules:
          - https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/forwardingRules/http-content-rule
          loadBalancingScheme: EXTERNAL_MANAGED
          extensionChains:
          - name: "chain1"
            matchCondition:
              celExpression: 'request.host == "example.com"'
            extensions:
            - name: 'ext1'
              service: projects/PROJECT_ID/locations/LOCATION/wasmPlugins/WASM_PLUGIN
              failOpen: false
              supportedEvents:
              - RESPONSE_HEADERS
              forwardAttributes:
              - request.host
              - request.path
      EOF
      

      מחליפים את מה שכתוב בשדות הבאים:

      • PROJECT_ID: מזהה הפרויקט.
      • REGION: האזור של כלל ההעברה. הערך צריך להיות זהה לערך שצוין למיקום של הפלאגין.
      • LOCATION: המיקום של הפלאגין, בתור global או אזור.
      • WASM_PLUGIN: המזהה או השם המלא של הפלאגין.

      מידע נוסף על השדות בקובץ ה-YAML מופיע בקטע ExtensionChain במאמרי העזרה של ה-API.

      בשדה forwardAttributes אפשר לציין את מאפייני הבקשה, החיבור והמיקום שאפשר להעביר לתוסף Wasm. אפשר להגדיר עד 16 מאפיינים לכל תוסף. מידע נוסף על מאפיינים נתמכים זמין במאמר מאפיינים נתמכים.

    2. מייבאים את תוסף התנועה. משתמשים בgcloud service-extensions lb-traffic-extensions import עם ערכי הדוגמה הבאים.

      gcloud service-extensions lb-traffic-extensions import traffic-ext \
          --source=traffic-plugin.yaml \
          --location=global
      

    אחרי שיוצרים תוסף תנועה, לוקח קצת זמן עד שהתוסף החדש מופץ לכל המיקומים. יכול להיות שהזמן יהיה שונה במיקומים שונים כי התוסף לא מועבר לכל המיקומים בו-זמנית.

  3. כדי לוודא שתוסף התנועה פועל כצפוי, משתמשים באותה פקודה curl:

    curl -D - -H "host: example.com" FORWARDING_RULE_IP
    

    הפלט כולל את כותרת התגובה hello: service-extensions.

    HTTP/1.1 200 OK
    ...
    content-length: 46
    content-type: text/
    hello: service-extensions
    via: 1.1 google
    

    כדי לוודא שהתוסף מכוון רק לתנועת example.com, חוזרים על הפקודה curl בלי הכותרת host.

    curl -D - FORWARDING_RULE_IP
    

    הפלט אמור להיראות כך:

    HTTP/1.1 200 OK
    ...
    content-length: 46
    content-type: text/html
    via: 1.1 google
    

הגדרת תוספי תנועה לשירותים בניהול המשתמש באמצעות הסברים

בקטע הזה מוסבר איך להגדיר תוסף להפניית תעבורה לשירות קצה עורפי של הפניה ל-callout שמנוהל על ידי המשתמש, באמצעות callout.

לפני שמתחילים

יוצרים את המשאבים הנדרשים כמו שמתואר במאמר הגדרת שירות קצה עורפי של קריאה לשירות חיצוני.

הגדרת תוסף תנועה באמצעות יתרון מרכזי

בדוגמה הבאה מוסבר איך להגדיר תוסף להפניית תנועה באמצעות קריאה ל-callout כשהמארח תואם ל-example.com. שרת התוסף של נתוני התנועה callout-vm מוסיף כותרת תגובה, hello: service-extensions, לבקשות תואמות.

  1. בודקים אם יש התאמה ל-example.com במפת URL.

    1. מריצים את הפקודה הבאה curl מול כלל ההעברה במכונת ה-VM של הלקוח:

      curl -D - -H "host: example.com" FORWARDING_RULE_IP
      

      מחליפים את FORWARDING_RULE_IP בכתובת ה-IP של כלל ההעברה. כדי למצוא את כתובת ה-IP, משתמשים בפקודה gcloud compute forwarding-rules describe.

      הפלט אמור להיראות כך:

      HTTP/1.1 200 OK
      ...
      content-length: 46
      content-type: text/html
      via: 1.1 google
      
      Page served from: l7-ilb-backend-example-1c7t
      
  2. מגדירים את תוסף התנועה.

    המסוף

    1. נכנסים לדף Service Extensions במסוף Google Cloud .

      כניסה לדף Service Extensions

    2. לוחצים על יצירת תוסף.

      ייפתח אשף שידריך אתכם בשלבים הראשונים.

    3. בוחרים באפשרות Load Balancing (איזון עומסים) עבור המוצר. לאחר מכן, לוחצים על המשך.

      מופיעה רשימה של נכסים נתמכים של Application Load Balancer.

    4. בוחרים סוג של מאזן עומסים. במקרה של מאזני עומסים אזוריים, צריך לציין גם את האזור. לוחצים על Continue.

    5. בקטע 'סוג הנכס', בוחרים באפשרות נכסי תנועה ולוחצים על המשך.

    6. כדי לפתוח את הטופס Create extension, לוחצים על Continue.

      בטופס יצירת תוסף, שימו לב שהבחירות הקודמות שמופיעות בחלק העליון של הדף לא ניתנות לעריכה.

    7. בקטע Basics (פרטים בסיסיים), מבצעים את הפעולות הבאות:

      1. מציינים שם ייחודי לתוסף.

        השם צריך להתחיל באות קטנה, להמשיך בעד 62 אותיות קטנות, מספרים או מקפים, ולא להסתיים במקף.

      2. אופציונלי: מזינים תיאור קצר של התוסף (עד 1,024 תווים).

    8. אופציונלי: בקטע תוויות, לוחצים על הוספת תווית. לאחר מכן, בשורה שמופיעה, מבצעים את הפעולות הבאות:

      • בשדה Key, מזינים שם מפתח.
      • בשדה ערך, מזינים ערך למפתח.

      כדי להוסיף עוד צמדי מפתח/ערך, לוחצים על הוספת תווית. אפשר להוסיף עד 64 צמדי מפתח/ערך.

      מידע נוסף על תוויות זמין במאמר יצירה ועדכון של תוויות לפרויקטים.

    9. בקטע כללי העברה, בוחרים כלל העברה אחד או יותר לקישור לתוסף – לדוגמה, l7-ilb-forwarding-rule.

      אי אפשר לבחור כללי העברה שכבר משויכים לתוסף אחר, והם יופיעו כלא זמינים.

    10. בקטע Extension, כדי להוסיף תוסף לביצוע עבור בקשה תואמת:

      • בקטע סוג התכנות, בוחרים באפשרות יתרונות מרכזיים.

      • כדי להתאים בקשות שרשרת ההרחבות מופעלת עבורן, בשדה Match condition (תנאי התאמה), מציינים ביטוי ב-Common Expression Language ‏(CEL) – לדוגמה, request.host == "example.com".

        למידע נוסף על ביטויי CEL, אפשר ללחוץ על קבלת עזרה בנושא תחביר או לעיין במאמר העזרה בנושא שפת ההתאמה של CEL.

      • בשדה Authority, מזינים את הכותרת authority מבקשת gRPC שנשלחה ממאזן העומסים לשירות התוסף.

      • בשביל Backend service, בוחרים שירות קצה עורפי שנוצר לפי ההוראות במאמר הגדרת שירות קצה עורפי של קריאה לשירות.

      • ב-Timeout (זמן קצוב לתפוגה), מציינים ערך בין 10 ל-1,000 מילישניות, שאחריו ההודעה בזרם תפוג.

      • בקטע אירועים, בוחרים סוג אחד או יותר של אירועי HTTP שקוראים לתוסף.

      • בקטע העברת מאפיינים, בוחרים את מאפייני הבקשה, החיבור והמיקום שרוצים שמאזן העומסים יעביר לשירות ה-callout. אפשר להגדיר עד 16 מאפיינים לכל תוסף. מידע נוסף זמין במאמר בנושא מאפיינים נתמכים.

      • בקטע העברת כותרות, לוחצים על הוספת כותרת, ואז מוסיפים כותרות HTTP להעברה לתוסף (מהלקוח או מהקצה העורפי). אם לא מציינים כותרת, כל הכותרות נשלחות.

      • אופציונלי: אם התוסף נכשל או שהפעולה שלו נפסקה בגלל חוסר פעילות ואתם רוצים שהעיבוד של הבקשה או התשובה יימשך, בוחרים באפשרות מופעל בקטע Fail open. גם תוספים נוספים בשרשרת מופעלים.

        כברירת מחדל, האפשרות Fail open לא מסומנת. במקרה כזה, כשיש שגיאה, עיבוד הבקשה או התשובה נפסק. אם כותרות התגובה לא נמסרו ללקוח במורד הזרם, קוד הסטטוס הכללי 500‏ HTTP מוחזר ללקוח. אם כותרות התגובה נמסרו, זרם ה-HTTP ללקוח מאופס.

        אפשרות ברירת המחדל של השארת Fail open לא מסומנת מומלצת כשנותנים עדיפות לאבטחה או ליושרה. הפעלת Fail open, במיוחד לפעולות לא קריטיות, עוזרת לתעדף את הזמינות.

      • בקטע מטא-נתונים, לוחצים על הוספת מטא-נתונים ומציינים ערכי דוגמה כמו שמציעים. בשדה Key (מפתח), מציינים key, ובשדה Value (ערך), מציינים value.

        כדי להוסיף עוד צמד מפתח/ערך, לוחצים על הוספת מטא-נתונים. בקטע מפתח, מציינים fr, ובקטע ערך, מציינים forwarding_rule_id.

        בשדה Metadata (מטא-נתונים) אפשר להעביר מידע נוסף ממאזן העומסים לשרת התוסף. הנתונים האלה נשלחים בהודעה מסוג ProcessingRequest ומוצפנים כ-protobuf.Struct. כל טקסט במטא-נתונים שתואם למזהה כלל ההעברה שצוין מוחלף בכתובת ה-URL המלאה של המשאב של כלל ההעברה שמשויך לבקשת הלקוח.

        הגודל הכולל של המטא-נתונים צריך להיות פחות מ-1 KiB. מספר המפתחות הכולל במטא-נתונים חייב להיות קטן מ-20. האורך של כל מפתח צריך להיות פחות מ-64 תווים. האורך של כל ערך צריך להיות פחות מ-1,024 תווים. כל הערכים חייבים להיות מחרוזות.

      אם רוצים לציין יותר מתוסף אחד או שרשראות של תוספים במקום תוסף יחיד, לוחצים על הלחצן מעבר למצב מתקדם בסוף הטופס ומציינים את התוספים והשרשראות הנדרשים. התוספים פועלים לפי הסדר שבו הם מופיעים ברשימה.

      מציינים שמות ייחודיים לכל תוסף ולכל שרשור תוספים. השמות צריכים להיות בהתאם ל-RFC-1034, להכיל רק אותיות קטנות, מספרים ומקפים, והאורך המקסימלי שלהם הוא 63 תווים. בנוסף, התו הראשון חייב להיות אות והתו האחרון חייב להיות אות או מספר.

    11. לוחצים על יצירת תוסף.

    gcloud

    1. מגדירים את ההפניה לקובץ YAML ומשייכים אותה לכלל ההעברה. משתמשים בערכים לדוגמה שצוינו.

      cat >traffic.yaml <<EOF
          name: traffic-ext
          forwardingRules:
          - https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules/l7-ilb-forwarding-rule
          loadBalancingScheme: INTERNAL_MANAGED
          extensionChains:
          - name: "chain1"
            matchCondition:
              celExpression: 'request.host == "example.com"'
            extensions:
            - name: 'ext11'
              authority: ext11.com
              service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/l7-ilb-callout-service
              failOpen: false
              timeout: 0.1s
              metadata:
                "key": "value"
                "fr": "forwarding_rule_id"
              supportedEvents:
              - RESPONSE_HEADERS
              forwardAttributes:
              - request.host
              - request.path
      EOF
      

      מחליפים את PROJECT_ID במזהה הפרויקט.

      השדה metadata בהגדרת התוסף מאפשר להעביר כל מידע נוסף ממאזן העומסים לשרת התוסף. הנתונים נשלחים בהודעה מסוג ProcessingRequest ומקודדים כ-protobuf.Struct. כל טקסט במטא-נתונים שתואם למזהה כלל ההעברה שצוין מוחלף בכתובת ה-URL המוגדרת במלואה של המשאב של כלל ההעברה שמשויך לבקשת הלקוח.

      הגודל הכולל של metadata צריך להיות קטן מ-1 KiB. מספר המפתחות הכולל במטא-נתונים צריך להיות קטן מ-16. האורך של כל מפתח צריך להיות פחות מ-64 תווים. האורך של כל ערך צריך להיות פחות מ-1,024 תווים. כל הערכים חייבים להיות מחרוזות.

      מידע נוסף על השדות בקובץ ה-YAML מופיע בקטע ExtensionChain במאמרי העזרה של ה-API.

      בשדה forwardAttributes אפשר לציין את מאפייני הבקשה, החיבור והמיקום שיועברו לשירות שלכם לביצוע שיחה חיצונית. אפשר להגדיר עד 16 מאפיינים לכל תוסף. מידע נוסף על מאפיינים נתמכים זמין במאמר מאפיינים נתמכים.

    2. מייבאים את תוסף התנועה. משתמשים gcloud service-extensions lb-traffic-extensions importבפקודה עם ערכי הדוגמה הבאים.

      gcloud service-extensions lb-traffic-extensions import traffic-ext \
          --source=traffic.yaml \
          --location=us-west1
      
  3. מוודאים שתוסף התנועה פועל כצפוי. משתמשים באותה פקודה curl:

    curl -D - -H "host: example.com" FORWARDING_RULE_IP
    

    הפלט כולל את כותרת התגובה hello: service-extensions.

    HTTP/1.1 200 OK
    ...
    content-length: 46
    content-type: text/
    hello: service-extensions
    via: 1.1 google
    
    Page served from: l7-ilb-backend-example-1c7t
    

    כדי לוודא שהתוסף מכוון רק לתנועת example.com, חוזרים על הפקודה curl בלי הכותרת host.

    curl -D - FORWARDING_RULE_IP
    

    הפלט אמור להיראות כך:

    HTTP/1.1 200 OK
    ...
    content-length: 46
    content-type: text/html
    via: 1.1 google
    
    Page served from: l7-ilb-backend-example-1c7t
    

המאמרים הבאים