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

בדף הזה יש שתי דוגמאות למאזן עומסים קלאסי של אפליקציות (ALB):

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

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

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

בדוגמה הזו מוצג שימוש בפרמטרים של שאילתה כדי לבצע בדיקות A/B על ידי התאמה למחרוזת השאילתה.

הוספה של שתי קבוצות של שרתים עורפיים

כדי שהניתוב יהיה שימושי, צריך להגדיר כמה בק-אנדים.

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

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

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

המסוף

  1. יוצרים תבנית של הגדרות מכונה. נכנסים לדף Instance templates במסוף Google Cloud .

    כניסה לדף Instance templates

    1. לוחצים על Create instance template.
    2. בשדה Name (שם), מזינים lb-backend-template.
    3. מוודאים שדיסק האתחול מוגדר לקובץ אימג' של Debian, כמו Debian GNU/Linux 12 (bookworm)‎. בהוראות האלה נעשה שימוש בפקודות שזמינות רק ב-Debian, כמו apt-get.
    4. לוחצים על אפשרויות מתקדמות.
    5. לוחצים על Networking ומגדירים את השדה הבא:
      1. בשדה Network tags (תגי רשת), מזינים allow-health-check.
    6. לוחצים על ניהול. מזינים את הסקריפט הבא בשדה סקריפט לטעינה בזמן ההפעלה.

      #! /bin/bash
      apt-get update
      apt-get install apache2 -y
      a2ensite default-ssl
      a2enmod ssl
      vm_hostname="$(curl -H "Metadata-Flavor:Google" \
      http://metadata.google.internal/computeMetadata/v1/instance/name)"
      echo "Page served from: $vm_hostname" | \
      tee /var/www/html/index.html
      systemctl restart apache2
      
    7. לוחצים על יצירה.

  2. יוצרים קבוצה של מופעי מכונה מנוהלים. נכנסים לדף Instance groups במסוף Google Cloud .

    כניסה לדף Instance groups

    1. לוחצים על יצירת קבוצת מופעים.
    2. בוחרים באפשרות New managed instance group (stateless) (קבוצת מופעי מכונה מנוהלים חדשה (בלי שמירת מצב)). מידע נוסף מופיע במאמר קבוצות של מכונות וירטואליות בלי שמירת מצב או עם שמירת מצב.
    3. בשדה Name (שם), מזינים first-example-ig.
    4. בקטע מיקום, בוחרים באפשרות אזור יחיד.
    5. בקטע Region (אזור), בוחרים את האזור המועדף. בדוגמה הזו נשתמש ב-us-east1.
    6. בשדה Zone, בוחרים באפשרות us-east1-b.
    7. בקטע Instance template, בוחרים את תבנית המכונה lb-backend-template.
    8. בקטע מספר מקסימלי של מופעים, מזינים 2.
    9. בקטע מצב שינוי גודל אוטומטי, בוחרים באפשרות Off:do not autoscale.
    10. לוחצים על יצירה.

יוצרים עוד קבוצות של מופעי מכונה מנוהלים כמו זו. נותנים שם לתבנית השנייה, second-example-ig, ויוצרים אותה על בסיס התבנית lb-backend-template.

gcloud

  1. יוצרים תבנית של הגדרות מכונה.

    gcloud compute instance-templates create lb-backend-template \
       --region=us-east1 \
       --network=default \
       --subnet=default \
       --tags=allow-health-check \
       --image-family=debian-12 \
       --image-project=debian-cloud \
       --metadata=startup-script='#! /bin/bash
         apt-get update
         apt-get install apache2 -y
         a2ensite default-ssl
         a2enmod ssl
         vm_hostname="$(curl -H "Metadata-Flavor:Google" \
         http://metadata.google.internal/computeMetadata/v1/instance/name)"
         echo "Page served from: $vm_hostname" | \
         tee /var/www/html/index.html
         systemctl restart apache2'
    
  2. יוצרים את קבוצת מופעי המכונה המנוהלים הראשונה על סמך התבנית.

    gcloud compute instance-groups managed create first-example-ig \
       --template=lb-backend-template --size=2 --zone=us-east1-b
    
  3. יוצרים את קבוצת מופעי המכונה המנוהלים השנייה על סמך התבנית.

    gcloud compute instance-groups managed create second-example-ig \
       --template=lb-backend-template --size=2 --zone=us-east1-c
    

הגדרת כלל לחומת האש

בדוגמה הזו, יוצרים את כלל חומת האש fw-allow-health-check. זהו כלל כניסה שמאפשר תנועה ממערכות לבדיקת תקינות (130.211.0.0/22 ו-35.191.0.0/16). בדוגמה הזו נעשה שימוש בתג היעד allow-health-check כדי לזהות את המכונות הווירטואליות. Google Cloud

המסוף

  1. נכנסים לדף Firewall policies במסוף Google Cloud .
    מעבר אל Firewall policies
  2. לוחצים על יצירת כלל לחומת האש כדי ליצור את הכלל השני לחומת האש:
  3. מזינים שם של fw-allow-health-check.
  4. בקטע רשת, בוחרים באפשרות Default.
  5. בקטע יעדים, בוחרים באפשרות תגי יעד ספציפיים.
  6. בשדה Target tags (תגי יעד) כותבים allow-health-check.
  7. מגדירים את Source filter בתור IPv4 ranges.
  8. מגדירים את Source IPv4 ranges ל-130.211.0.0/22 ול-35.191.0.0/16.
  9. בקטע Protocols and ports (פרוטוקולים ויציאות), בוחרים באפשרות Specified protocols and ports (פרוטוקולים ויציאות שצוינו).
  10. מסמנים את תיבת הסימון TCP ומזינים 80 עבור מספרי היציאות.
  11. לוחצים על יצירה.

gcloud

gcloud compute firewall-rules create fw-allow-health-check \
    --network=default \
    --action=allow \
    --direction=ingress \
    --source-ranges=130.211.0.0/22,35.191.0.0/16 \
    --target-tags=allow-health-check \
    --rules=tcp

שמירת כתובת IP חיצונית

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

המסוף

  1. נכנסים לדף כתובות IP חיצוניות במסוף Google Cloud .
    עבור לדף כתובות IP חיצוניות
  2. לוחצים על Reserve static address כדי לשריין כתובת IPv4.
  3. מקצים שם של lb-ipv4-1.
  4. מגדירים את מסלול הרשת ל-Standard.
  5. מגדירים את IP version ל-IPv4.
  6. מגדירים את Type (סוג) בתור Global (גלובלי).
  7. לוחצים על Reserve.
  8. מוודאים שההגדרה Type היא Global.
  9. לוחצים על Reserve.

gcloud

gcloud compute addresses create lb-ipv4-1 \
    --ip-version=IPV4 \
    --network-tier=PREMIUM \
    --global

שימו לב לכתובת ה-IPv4 שהוקצתה:

gcloud compute addresses describe lb-ipv4-1 \
    --format="get(address)" \
    --global

הגדרת הקצה העורפי של מאזן העומסים

המסוף

בשלב הזה, אי אפשר להשתמש במסוף Google Cloud כדי להגדיר ניתוב מבוסס-כותרת וניתוב מבוסס-פרמטר. במקום זאת, אפשר להשתמש ב-gcloud או ב-API.

gcloud

  1. יוצרים בדיקת תקינות.
        gcloud compute health-checks create http http-basic-check \
            --port 80
        
  2. יוצרים את שירות לקצה העורפי הראשון.
    • במאזן עומסים גלובלי חיצוני של אפליקציות, משתמשים בפקודת gcloud CLI עם load-balancing-scheme=EXTERNAL_MANAGED. ההגדרה הזו מציעה יכולת מתקדמת לניהול תנועה.
    • במאזן עומסים קלאסי של אפליקציות (ALB), משתמשים ב-load-balancing-scheme=EXTERNAL.
        gcloud compute backend-services create service-a \
            --load-balancing-scheme=LOAD_BALANCING_SCHEME \
            --global-health-checks \
            --protocol HTTP \
            --health-checks http-basic-check \
            --global
        
  3. יוצרים את שירות לקצה העורפי השני.
        gcloud compute backend-services create service-b \
            --load-balancing-scheme=LOAD_BALANCING_SCHEME \
            --global-health-checks \
            --protocol HTTP \
            --health-checks http-basic-check \
            --global
        
  4. מוסיפים את קבוצת המופעים הראשונה כקצה העורפי לשירות הקצה העורפי הראשון.
        gcloud compute backend-services add-backend service-a \
            --balancing-mode=UTILIZATION \
            --max-utilization=0.8 \
            --capacity-scaler=1 \
            --instance-group=first-example-ig \
            --instance-group-zone=us-east1-b \
            --global
        
  5. מוסיפים את קבוצת המכונות השנייה בתור הקצה העורפי לשירות השני לקצה העורפי.
        gcloud compute backend-services add-backend service-b \
            --balancing-mode=UTILIZATION \
            --max-utilization=0.8 \
            --capacity-scaler=1 \
            --instance-group=second-example-ig \
            --instance-group-zone=us-east1-c \
            --global
        

יצירת מפת URL

המסוף

בשלב הזה, אי אפשר להשתמש במסוף Google Cloud כדי להגדיר ניתוב מבוסס-כותרת וניתוב מבוסס-פרמטר. במקום זאת, אפשר להשתמש ב-gcloud או ב-API.

gcloud

  1. יוצרים קובץ YAML /tmp/web-map-http.yaml. מחליפים את PROJECT_ID במזהה הפרויקט.

    defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a
    hostRules:
    - hosts:
      - '*'
      pathMatcher: path-matcher-1
    name: web-map-http
    pathMatchers:
    - defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a
      name: path-matcher-1
      routeRules:
        - matchRules:
            - prefixMatch: /
              queryParameterMatches:
                - name: ABTest
                  exactMatch: A
          priority: 0
          service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a
        - matchRules:
            - prefixMatch: /
              queryParameterMatches:
                - name: ABTest
                  exactMatch: B
          priority: 1
          service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-b
    selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/web-map-http
    tests:
    - description: Test routing for query ABTest with A
      host: example.com
      path: /?ABTest=A
      service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a
      expectedOutputUrl: http://example.com/?ABTest=A
    - description: Test routing for query ABTest with B
      host: example.com
      path: /?ABTest=B
      service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-b
      expectedOutputUrl: http://example.com/?ABTest=B
    
  2. מאמתים את מפת ה-URL.

    gcloud compute url-maps validate --source /tmp/web-map-http.yaml
    

    אם הבדיקות עוברות והפקודה מחזירה הודעת הצלחה, שומרים את השינויים במפת ה-URL.

  3. מעדכנים את מפת ה-URL.

    gcloud compute url-maps import web-map-http \
       --source /tmp/web-map-http.yaml \
       --global
    

יצירת שרת proxy ליעד וכלל העברה

המסוף

בשלב הזה, אי אפשר להשתמש במסוף Google Cloud כדי להגדיר ניתוב מבוסס-כותרת וניתוב מבוסס-פרמטר. במקום זאת, אפשר להשתמש ב-gcloud או ב-API.

gcloud

  1. יוצרים HTTP proxy ליעד כדי להפנות בקשות למפת URL.
        gcloud compute target-http-proxies create http-lb-proxy \
            --url-map web-map-http
        
  2. יוצרים כלל העברה גלובלי כדי לנתב בקשות נכנסות לשרת ה-proxy.
    • במאזן עומסים גלובלי חיצוני של אפליקציות, משתמשים בפקודת gcloud CLI עם load-balancing-scheme=EXTERNAL_MANAGED. ההגדרה הזו מציעה יכולת מתקדמת לניהול תנועה.
    • במאזן עומסים קלאסי של אפליקציות (ALB), משתמשים ב-load-balancing-scheme=EXTERNAL.
        gcloud compute forwarding-rules create http-content-rule \
            --load-balancing-scheme=LOAD_BALANCING_SCHEME \
            --network-tier=PREMIUM \
            --address=lb-ipv4-1 \
            --global \
            --target-http-proxy=http-lb-proxy \
            --ports=80
        

בדיקה

שימו לב לכתובת ה-IPv4 שהוקצתה:

gcloud compute addresses describe lb-ipv4-1 \
    --format="get(address)" \
    --global

מריצים את הפקודה הבאה כדי לבדוק את ההגדרה:

curl http://IP_ADDRESS?ABTest=A
curl http://IP_ADDRESS?ABTest=B

פותחים בדפדפן את http://IP_ADDRESS?ABTest=A ואת http://IP_ADDRESS?ABTest=B.

הגדרת ניתוב שמבוסס על כותרת HTTP

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

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

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

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

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

עדכון מפת URL

המסוף

בשלב הזה, אי אפשר להשתמש במסוף Google Cloud כדי להגדיר ניתוב מבוסס-כותרת וניתוב מבוסס-פרמטר. במקום זאת, אפשר להשתמש ב-gcloud או ב-API.

gcloud

  1. בדוגמה הזו מוצג שימוש בכותרות של בקשות HTTP כדי לבצע בדיקות A/B על ידי התאמה לערכים בכותרות ה-HTTP של הבקשה.

    יוצרים קובץ YAML /tmp/web-map-http.yaml. מחליפים את PROJECT_ID במזהה הפרויקט.

    defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a
    kind: compute#urlMap
    name: web-map-http
    hostRules:
    - hosts:
      - '*'
      pathMatcher: path-matcher-1
    pathMatchers:
    - defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a
      name: path-matcher-1
      routeRules:
        - matchRules:
            - prefixMatch: /
              headerMatches:
                - headerName: ABTest
                  exactMatch: A
          priority: 0
          service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a
        - matchRules:
            - prefixMatch: /
              headerMatches:
                - headerName: ABTest
                  exactMatch: B
          priority: 1
          service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-b
    tests:
    - description: Test routing for query ABTest with A
      host: example.com
      path: /
      headers:
      - name: ABTest
        value: A
      service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a
    - description: Test routing for query ABTest with B
      host: example.com
      path: /
      headers:
      - name: ABTest
        value: B
      service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-b
    
  2. מאמתים את מפת ה-URL.

    gcloud compute url-maps validate --source /tmp/web-map-http.yaml
    

    אם הבדיקות עוברות והפקודה מחזירה הודעת הצלחה, שומרים את השינויים במפת ה-URL.

  3. מעדכנים את מפת ה-URL.

    gcloud compute url-maps import web-map-http \
       --source /tmp/web-map-http.yaml \
       --global
    

בדיקה

כדי לבדוק את ההגדרה הזו, מריצים את הפקודה הבאה באמצעות כתובת ה-IPv4 של מאזן העומסים המשויך:

curl http://IP_ADDRESS -H "ABTest: A"
curl http://IP_ADDRESS -H "ABTest: B"

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