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

במאמר הזה מוסבר איך ליצור מאזן עומסי רשת חיצוני גלובלי להעברת סיגנל ללא שינוי כדי לאזן תעבורת נתונים מסוג TCP,‏ UDP,‏ ESP,‏ GRE,‏ ICMP ו-ICMPv6.

אפשר להשתמש בהגדרה כזו כדי:

  • איזון עומסים של תנועה שמשתמשת בפרוטוקולי IP שאינם TCP או UDP.

  • הצגת כמה פרוטוקולים באמצעות מאזן עומסים אחד. לדוגמה, שירותי IPsec בדרך כלל מטפלים בשילוב כלשהו של ESP ועומס תנועה מבוסס-UDP של IKE ו-NAT-T.

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

חשוב לוודא שההגדרה עומדת בדרישות המוקדמות הבאות.

התקנת Google Cloud CLI

ההוראות במדריך הזה מתייחסות לשימוש ב-Google Cloud CLI כדי להגדיר מאזן עומסי רשת גלובלי חיצוני להעברת סיגנל ללא שינוי. הוראות להתקנה מופיעות במאמר התקנת ה-CLI של gcloud.

התפקידים הנדרשים

אם אתם יוצרי הפרויקט, מוקצה לכם התפקיד 'בעלים' (roles/owner). כברירת מחדל, התפקיד 'בעלים' (roles/owner) או התפקיד 'עריכה' (roles/editor) כוללים את ההרשאות שנדרשות כדי לבצע את הפעולות שמתוארות במאמר הזה.

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

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

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

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

מידע נוסף על תפקידים והרשאות ב-Cloud Load Balancing זמין במאמר תפקידים והרשאות. למידע נוסף על הגדרת מדיניות IAM עם מענקים מותנים לכללי העברה, ראו תנאי IAM לכללי העברה.

סקירה כללית של ההגדרה

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

  1. TCP מאזן עומסים ביציאה 80

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

    • כשחבילת נתונים מגיעה לכתובת IP של כלל העברה, מערכתGoogle Cloud בודקת קודם אם זו חבילת נתונים של TCP ואם יציאת היעד שלה היא בדיוק 80.
    • אם התנאים האלה מתקיימים, החבילה הזו נלכדת על ידי TCPכלל ההעברה הספציפי הזה ומנותבת לקצה העורפי על סמך שירות הקצה העורפי שאליו מתייחסים.
  2. מאזן עומסים של L3_DEFAULT לתנועה של TCP:8080 ושל UDP

    כלל ההעברה של מאזן העומסים הזה משתמש בפרוטוקול L3_DEFAULT והוא מוגדר לקבל תנועה בכל היציאות all. בהגדרה הזו, הוא פועל ככלל catch-all לטיפול בתעבורה שהכלל הראשון להעברה לא מטפל בה (כמו UDP,‏ ICMP וכל תעבורת ה-TCP מלבד יציאה 80).

    • אם חבילת נתונים מגיעה לכתובת IP של כלל העברה שלא תואמת לתעבורת ה-TCP הספציפית שמגיעה ליציאה 80 (לדוגמה, אם מדובר בתעבורת UDP, בפינג ICMP או בתעבורת TCP ביציאה 8080 או 443), חבילת הנתונים הזו נלכדת על ידי כלל ההעברה L3_DEFAULT.
    • מוסיפים כלל חומת אש שמאפשר רק לתעבורת נתונים מסוג TCP:8080 ו-UDP להגיע למכונות הווירטואליות של ה-Backend. לכן, למרות שכלל ההעברה L3_DEFAULT מתעד את כל תעבורת הנתונים של פרוטוקול ה-IP בכל היציאות, כלל חומת האש מגביל את תעבורת הנתונים של איזון העומסים לתעבורת נתונים של TCP:8080 ו-UDP.
    • לאחר מכן החבילה מנותבת לקצה עורפי על סמך שירות הקצה העורפי שאליו היא מפנה.

    ‫Google Cloud נותן עדיפות לכלל הספציפי יותר TCP ביציאה 80 לפני שהוא מאפשר לשאר התנועה לעבור לכלל L3_DEFAULT באותה כתובת IP.

שני מאזני עומסי רשת גלובליים חיצוניים להעברת סיגנל ללא שינוי שולחים תעבורה למערכות בק-אנד של קבוצת מכונות וירטואליות שנפרסו באזורים us-west1 ו-europe-west2.
שני מאזני עומסים גלובליים חיצוניים מסוג Network Load Balancer עם אותה כתובת IP, כל אחד מהם משרת קבוצה שונה של פרוטוקולי IP ויציאות (לחצו כדי להגדיל).

הגדרת הרשתות ורשתות המשנה

בדוגמה הזו נעשה שימוש ברשת VPC במצב מותאם אישית בשם lb-network עם תת-רשתות בשני אזורים שונים.

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

סוג התנועה במאזן העומסים סוג המערך של ממשק הרשת של מכונה וירטואלית בקצה העורפי סוג ה-Stack של רשת המשנה של VPC
תנועה מסוג IPv4 בלבד IPV4_ONLY IPV4_ONLY או IPV4_IPV6
IPV4_IPV6 IPV4_IPV6
תנועה ב-IPv6 בלבד IPV6_ONLY IPV6_ONLY או IPV4_IPV6
IPV4_IPV6 IPV4_IPV6
תנועה ב-IPv4 וב-IPv6 IPV4_IPV6 IPV4_IPV6

הבק-אנדים שמשמשים בדוגמה הזו נמצאים באזורים וברשתות המשנה הבאים. אמנם אתם יכולים לבחור איזה טווח כתובות IPv4 יוגדר בתת-הרשת,אבל Google Cloud מקצה באופן אוטומטי טווח כתובות IPv6 לכל תת-הרשת./64

  • אזור: us-west1

    • רשת משנה: lb-subnet-us, עם טווח כתובות IPv4 ראשי 10.1.2.0/24.
  • אזור: europe-west2

    • רשת משנה: lb-subnet-eu, עם טווח כתובות IPv4 ראשי 10.1.3.0/24.

gcloud

  1. יוצרים רשת VPC. בדוגמה הזו, רשת ה-VPC נקראת lb-network.

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. ברשת ה-VPC‏ (lb-network), יוצרים תת-רשתות בשני אזורים.

    יוצרים תת-רשת בשם lb-subnet-us עבור השרתים העורפיים באזור us-west1.

    כדי ליצור רשת משנה עם IPv4 בלבד, משתמשים בפקודה הבאה:

    gcloud compute networks subnets create lb-subnet-us \
        --stack-type=IPV4_ONLY \
        --network=lb-network \
        --range=10.1.2.0/24 \
        --region=us-west1
    

    כדי ליצור רשת משנה עם פרוטוקול כפול, משתמשים בפקודה הבאה:

    gcloud compute networks subnets create lb-subnet-us \
        --stack-type=IPV4_IPV6 \
        --ipv6-access-type=EXTERNAL \
        --network=lb-network \
        --range=10.1.2.0/24 \
        --region=us-west1
    

    כדי ליצור רשת משנה עם כתובות IPv6 בלבד, משתמשים בפקודה הבאה:

    gcloud compute networks subnets create lb-subnet-us \
        --stack-type=IPV6_ONLY \
        --ipv6-access-type=EXTERNAL \
        --network=lb-network \
        --region=us-west1
    

    יוצרים תת-רשת בשם lb-subnet-eu עבור השרתים העורפיים באזור europe-west2.

    כדי ליצור רשת משנה עם IPv4 בלבד, משתמשים בפקודה הבאה:

    gcloud compute networks subnets create lb-subnet-eu \
        --stack-type=IPV4_ONLY \
        --network=lb-network \
        --range=10.1.3.0/24 \
        --region=europe-west2
    

    כדי ליצור רשת משנה עם פרוטוקול כפול, משתמשים בפקודה הבאה:

    gcloud compute networks subnets create lb-subnet-eu \
        --stack-type=IPV4_IPV6 \
        --ipv6-access-type=EXTERNAL \
        --network=lb-network \
        --range=10.1.3.0/24 \
        --region=europe-west2
    

    כדי ליצור רשת משנה עם כתובות IPv6 בלבד, משתמשים בפקודה הבאה:

    gcloud compute networks subnets create lb-subnet-eu \
        --stack-type=IPV6_ONLY \
        --ipv6-access-type=EXTERNAL \
        --network=lb-network \
        --range=10.1.3.0/24 \
        --region=europe-west2
    

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

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

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

כשמגדירים כלל העברה של IPv6, כתובות ה-IP של כלל ההעברה מוקצות כקידומות /96.

gcloud

לתנועת IPv4:

  1. שומרים את כתובת ה-IP החיצונית הגלובלית הראשונה בשם lb-ipv4-ag0 בקבוצת הזמינות 0.

    gcloud beta compute addresses create lb-ipv4-ag0 \
        --global \
        --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP0 \
        --ip-version=IPV4
    
  2. שומרים את כתובת ה-IP החיצונית הגלובלית השנייה lb-ipv4-ag1 בקבוצת הזמינות 1.

    gcloud beta compute addresses create lb-ipv4-ag1 \
        --global \
        --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP1 \
        --ip-version=IPV4
    

לתנועת IPv6:

  1. שומרים את כתובת ה-IP החיצונית הגלובלית הראשונה בשם lb-ipv6-ag0 בקבוצת הזמינות 0.

    gcloud beta compute addresses create lb-ipv6-ag0 \
        --global \
        --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP0 \
        --ip-version=IPV6
    
  2. שומרים את כתובת ה-IP החיצונית הגלובלית השנייה lb-ipv6-ag1 בקבוצת הזמינות 1.

    gcloud beta compute addresses create lb-ipv6-ag1 \
        --global \
        --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP1 \
        --ip-version=IPV6
    

הגדרת מאזן עומסים לתנועת TCP ביציאה 80

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

יצירת כללים לחומת האש כדי לאפשר רק תעבורת נתונים של TCP:80

כדי להגדיר את סביבת הייצור בצורה מאובטחת, צריך ליצור שני כללים נפרדים בחומת האש:

  • כלל חומת אש של בדיקת תקינות, שמוגדר לאפשר תעבורת נתונים נכנסת (ingress) מ:

  • כלל חומת אש של תעבורת משתמשים, שמוגדר לאפשר תעבורת נתונים נכנסת (ingress) מהמקורות הבאים:

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

שימו לב לנקודות הבאות:

  • אם האפליקציה שלכם מציגה תוכן לכל משתמשי האינטרנט ללא הגבלה, צריך להגדיר טווחי כתובות IP של מקור 0.0.0.0/0 לתנועת IPv4 ו-::/0 לתנועת IPv6.

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

gcloud

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

  • כדי לאפשר את כל התנועה ב-IPv4, מריצים את הפקודה הבאה:

      gcloud compute firewall-rules create allow-traffic-tcp-80-ipv4 \
          --network=lb-network \
          --target-tags=allow-traffic-tcp-80 \
          --allow=tcp:80 \
          --source-ranges=0.0.0.0/0
    
  • כדי לאפשר את כל תנועת ה-IPv6, מריצים את הפקודה הבאה:

      gcloud compute firewall-rules create allow-traffic-tcp-80-ipv6 \
          --network=lb-network \
          --target-tags=allow-traffic-tcp-80 \
          --allow=tcp:80 \
          --source-ranges=::/0
    

יצירת מכונות וירטואליות של בק-אנד

בדוגמה הזו של איזון עומסים, יוצרים קבוצות של מופעי מכונה מנוהלים באזורים us-west1-a ו-europe-west2-a. קבוצת מופעי מכונה מנוהלים מורכבת ממופעי מכונות וירטואליות שמארחים את שרתי הבק-אנד של מאזן העומסים. לצורך הדגמה, שרתי הקצה העורפיים מריצים את שרת Apache ביציאה 80. בתגובה לבקשות של לקוחות, הם מציגים את שמות המארחים שלהם.

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

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

סוג התנועה במאזן העומסים סוג המערך של ממשק הרשת של מכונה וירטואלית בקצה העורפי סוג ה-Stack של רשת המשנה של VPC
תנועה מסוג IPv4 בלבד IPV4_ONLY IPV4_ONLY או IPV4_IPV6
IPV4_IPV6 IPV4_IPV6
תנועה ב-IPv6 בלבד IPV6_ONLY IPV6_ONLY או IPV4_IPV6
IPV4_IPV6 IPV4_IPV6
תנועה ב-IPv4 וב-IPv6 IPV4_IPV6 IPV4_IPV6

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

בדוגמה הזו, יוצרים תבניות של מכונות אזוריות באזורים us-west1 ו-europe-west2.

gcloud

  1. יצירת תבנית של הגדרות מכונה באזור us-west1.

    כדי ליצור מכונות וירטואליות של קצה עורפי עם ממשקי רשת IPv4 בלבד, משתמשים בפקודה הבאה.

    gcloud compute instance-templates create ig-template-us-tcp-80 \
        --region=us-west1 \
        --network=lb-network \
        --subnet=lb-subnet-us \
        --stack-type=IPV4_ONLY \
        --tags=allow-traffic-tcp-80 \
        --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'
    

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

    gcloud compute instance-templates create ig-template-us-tcp-80 \
        --region=us-west1 \
        --network=lb-network \
        --subnet=lb-subnet-us \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPV4_IPV6 \
        --tags=allow-traffic-tcp-80 \
        --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'
    

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

    gcloud compute instance-templates create ig-template-us-tcp-80 \
        --region=us-west1 \
        --network=lb-network \
        --subnet=lb-subnet-us \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPV6_ONLY \
        --tags=allow-traffic-tcp-80 \
        --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. יצירת תבנית של הגדרות מכונה באזור europe-west2.

    כדי ליצור מכונות וירטואליות של קצה עורפי עם ממשקי רשת IPv4 בלבד, משתמשים בפקודה הבאה.

    gcloud compute instance-templates create ig-template-eu-tcp-80 \
        --region=europe-west2 \
        --network=lb-network \
        --subnet=lb-subnet-eu \
        --stack-type=IPV4_ONLY \
        --tags=allow-traffic-tcp-80 \
        --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'
    

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

    gcloud compute instance-templates create ig-template-eu-tcp-80 \
        --region=europe-west2 \
        --network=lb-network \
        --subnet=lb-subnet-eu \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPV4_IPV6 \
        --tags=allow-traffic-tcp-80 \
        --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'
    

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

    gcloud compute instance-templates create ig-template-eu-tcp-80 \
        --region=europe-west2 \
        --network=lb-network \
        --subnet=lb-subnet-eu \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPV6_ONLY \
        --tags=allow-traffic-tcp-80 \
        --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'
    

יצירת קבוצות של מופעי מכונה מנוהלים לפי אזור

בדוגמה הזו, יוצרים שתי קבוצות של מופעי מכונה מנוהלים באזורים – אחת באזור us-west1-a והשנייה באזור europe-west2-a.

gcloud

  1. יוצרים קבוצת מופעי מכונה מנוהלים באזור us-west1-a.

    gcloud compute instance-groups managed create ig-us-tcp-80 \
      --template=ig-template-us-tcp-80 \
      --size=2 \
      --zone=us-west1-a
    
  2. יוצרים קבוצת מופעי מכונה מנוהלים באזור europe-west2-a.

    gcloud compute instance-groups managed create ig-eu-tcp-80 \
      --template=ig-template-eu-tcp-80 \
      --size=2 \
      --zone=europe-west2-a
    

יצירת רכיבי Cloud Load Balancing

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

gcloud

  1. יוצרים בדיקת תקינות של TCP שמוגדרת ליצירת TCP:80 בקשות לבדיקות תקינות (probes).

    gcloud compute health-checks create tcp hc-tcp-80 \
      --global \
      --port=80
    
  2. יוצרים שירות קצה עורפי גלובלי באמצעות סכמת איזון העומסים EXTERNAL_PASSTHROUGH.

    gcloud beta compute backend-services create lb-backend-service-tcp-80 \
      --load-balancing-scheme=EXTERNAL_PASSTHROUGH \
      --health-checks=hc-tcp-80 \
      --global
    
  3. מוסיפים את קבוצות המכונות כקצה עורפי לשירות הקצה העורפי.

    מוסיפים את קבוצת המכונות באזור us-west1-a לשירות הקצה העורפי.

    gcloud beta compute backend-services add-backend lb-backend-service-tcp-80 \
        --instance-group=ig-us-tcp-80 \
        --instance-group-zone=us-west1-a \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.7 \
        --global
    

    מוסיפים את קבוצת המופעים באזור europe-west2-a לשירות הקצה העורפי.

    gcloud beta compute backend-services add-backend lb-backend-service-tcp-80 \
        --instance-group=ig-eu-tcp-80 \
        --instance-group-zone=europe-west2-a \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.7 \
        --global
    
  4. יוצרים כלל העברה גלובלי להצגת תעבורת נתונים של TCP:80.

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

    כלל ההעברה מפנה לכתובות IP מכל קבוצת זמינות.

    לתנועת IPv4:

    gcloud beta compute forwarding-rules create lb-forwarding-rule-tcp-80-ipv4 \
      --load-balancing-scheme=EXTERNAL_PASSTHROUGH \
      --ip-protocol=TCP \
      --ports=80 \
      --backend-service=lb-backend-service-tcp-80 \
      --global \
      --ip-addresses=lb-ipv4-ag0,lb-ipv4-ag1
    

    לתנועת IPv6:

    gcloud beta compute forwarding-rules create lb-forwarding-rule-tcp-80-ipv6 \
      --load-balancing-scheme=EXTERNAL_PASSTHROUGH \
      --ip-protocol=TCP \
      --ports=80 \
      --backend-service=lb-backend-service-tcp-80 \
      --global \
      --ip-addresses=lb-ipv6-ag0,lb-ipv6-ag1
    

הגדרת מאזן עומסים לתעבורה של TCP:8080 ו-UDP

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

יצירת כללים לחומת האש כדי לאפשר רק תעבורת נתונים מסוג TCP:8080 ו-UDP

כדי להגדיר את סביבת הייצור בצורה מאובטחת, צריך ליצור שני כללים נפרדים בחומת האש:

  • כלל חומת אש של בדיקת תקינות, שמוגדר לאפשר תעבורת נתונים נכנסת (ingress) מ:

  • כלל חומת אש של תעבורת משתמשים, שמוגדר לאפשר תעבורת נתונים נכנסת (ingress) מהמקורות הבאים:

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

שימו לב לנקודות הבאות:

  • אם האפליקציה שלכם מציגה תוכן לכל משתמשי האינטרנט ללא הגבלה, צריך להגדיר טווחי כתובות IP של מקור 0.0.0.0/0 לתנועת IPv4 ו-::/0 לתנועת IPv6.

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

gcloud

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

  1. כדי לאפשר לתעבורת IPv4 להגיע לשרתי קצה בעורף בקבוצות המכונות ig-us-l3-default ו-ig-eu-l3-default, יוצרים את כלל חומת האש הבא.

    gcloud compute firewall-rules create allow-traffic-l3-default-ipv4 \
        --network=lb-network \
        --target-tags=allow-traffic-l3-default \
        --allow=tcp:8080,udp \
        --source-ranges=0.0.0.0/0
    
  2. כדי לאפשר לתעבורת IPv6 להגיע לשרתי קצה בעורף בקבוצות המכונות ig-us-l3-default ו-ig-eu-l3-default, יוצרים את כלל חומת האש הבא.

    gcloud compute firewall-rules create allow-traffic-l3-default-ipv6 \
        --network=lb-network \
        --target-tags=allow-traffic-l3-default \
        --allow=tcp:8080,udp \
        --source-ranges=::/0
    

יצירת מכונות וירטואליות של בק-אנד

בדוגמה הזו של איזון עומסים, יוצרים קבוצות של מופעי מכונה מנוהלים באזורים us-west1-a ו-europe-west2-a. קבוצת מופעי מכונה מנוהלים מורכבת ממופעי מכונות וירטואליות שמארחים את שרתי הבק-אנד של מאזן העומסים. למטרות הדגמה, השרתים העורפיים מציגים את שמות המארחים שלהם. סקריפט ההפעלה מגדיר גם את שרת Apache להאזנה ביציאה 8080 במקום ביציאה 80.

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

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

סוג התנועה במאזן העומסים סוג המערך של ממשק הרשת של מכונה וירטואלית בקצה העורפי סוג ה-Stack של רשת המשנה של VPC
תנועה מסוג IPv4 בלבד IPV4_ONLY IPV4_ONLY או IPV4_IPV6
IPV4_IPV6 IPV4_IPV6
תנועה ב-IPv6 בלבד IPV6_ONLY IPV6_ONLY או IPV4_IPV6
IPV4_IPV6 IPV4_IPV6
תנועה ב-IPv4 וב-IPv6 IPV4_IPV6 IPV4_IPV6

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

בדוגמה הזו, יוצרים תבניות של מכונות אזוריות באזורים us-west1 ו-europe-west2.

gcloud

  1. יצירת תבנית של הגדרות מכונה באזור us-west1.

    כדי ליצור מכונות וירטואליות של קצה עורפי עם ממשקי רשת IPv4 בלבד, משתמשים בפקודה הבאה.

    gcloud compute instance-templates create ig-template-us-l3-default \
        --region=us-west1 \
        --network=lb-network \
        --subnet=lb-subnet-us \
        --stack-type=IPV4_ONLY \
        --tags=allow-traffic-l3-default \
        --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
        sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf
        systemctl restart apache2'
    

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

    gcloud compute instance-templates create ig-template-us-l3-default \
        --region=us-west1 \
        --network=lb-network \
        --subnet=lb-subnet-us \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPV4_IPV6 \
        --tags=allow-traffic-l3-default \
        --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
        sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf
        systemctl restart apache2'
    

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

    gcloud compute instance-templates create ig-template-us-l3-default \
        --region=us-west1 \
        --network=lb-network \
        --subnet=lb-subnet-us \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPV6_ONLY \
        --tags=allow-traffic-l3-default \
        --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
        sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf
        systemctl restart apache2'
    
  2. יצירת תבנית של הגדרות מכונה באזור europe-west2.

    כדי ליצור מכונות וירטואליות של קצה עורפי עם ממשקי רשת IPv4 בלבד, משתמשים בפקודה הבאה.

    gcloud compute instance-templates create ig-template-eu-l3-default \
        --region=europe-west2 \
        --network=lb-network \
        --subnet=lb-subnet-eu \
        --stack-type=IPV4_ONLY \
        --tags=allow-traffic-l3-default \
        --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
        sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf
        systemctl restart apache2'
    

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

    gcloud compute instance-templates create ig-template-eu-l3-default \
        --region=europe-west2 \
        --network=lb-network \
        --subnet=lb-subnet-eu \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPV4_IPV6 \
        --tags=allow-traffic-l3-default \
        --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
        sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf
        systemctl restart apache2'
    

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

    gcloud compute instance-templates create ig-template-eu-l3-default \
        --region=europe-west2 \
        --network=lb-network \
        --subnet=lb-subnet-eu \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPV6_ONLY \
        --tags=allow-traffic-l3-default \
        --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
        sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf
        systemctl restart apache2'
    

יצירת קבוצות של מופעי מכונה מנוהלים לפי אזור

בדוגמה הזו, יוצרים שתי קבוצות של מופעי מכונה מנוהלים באזורים – אחת באזור us-west1-a והשנייה באזור europe-west2-a.

gcloud

  1. יוצרים קבוצת מופעי מכונה מנוהלים באזור us-west1-a.

    gcloud compute instance-groups managed create ig-us-l3-default \
      --template=ig-template-us-l3-default \
      --size=2 \
      --zone=us-west1-a
    
  2. יוצרים קבוצת מופעי מכונה מנוהלים באזור europe-west2-a.

    gcloud compute instance-groups managed create ig-eu-l3-default \
      --template=ig-template-eu-l3-default \
      --size=2 \
      --zone=europe-west2-a
    

יצירת רכיבי Cloud Load Balancing

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

gcloud

  1. יוצרים בדיקת תקינות של TCP שמוגדרת ליצירת TCP:8080 בקשות לבדיקות תקינות (probes).

    gcloud compute health-checks create tcp hc-tcp-8080 \
      --global \
      --port=8080
    
  2. יוצרים שירות קצה עורפי גלובלי באמצעות סכמת איזון העומסים EXTERNAL_PASSTHROUGH.

    gcloud beta compute backend-services create lb-backend-service-l3-default \
      --load-balancing-scheme=EXTERNAL_PASSTHROUGH \
      --health-checks=hc-tcp-8080 \
      --global
    
  3. מוסיפים את קבוצות המכונות כקצה עורפי לשירות הקצה העורפי.

    מוסיפים את קבוצת המכונות באזור us-west1-a לשירות הקצה העורפי.

    gcloud beta compute backend-services add-backend lb-backend-service-l3-default \
        --instance-group=ig-us-l3-default \
        --instance-group-zone=us-west1-a \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.7 \
        --global
    

    מוסיפים את קבוצת המכונות באזור europe-west2-a לשירות הקצה העורפי.

    gcloud beta compute backend-services add-backend lb-backend-service-l3-default \
        --instance-group=ig-eu-l3-default \
        --instance-group-zone=europe-west2-a \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.7 \
        --global
    
  4. יוצרים כלל העברה גלובלי עם השדה ip-protocol שמוגדר לערך L3_DEFAULT כדי לטפל בכל תעבורת פרוטוקול ה-IP (תעבורת TCP מלבד יציאה 80,‏ UDP,‏ ESP ו-ICMP). צריך ליצור שני כללי העברה כדי לטפל בתנועה של IPv4 ו-IPv6.

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

    כלל ההעברה מפנה לכתובות IP מכל קבוצת זמינות.

    לתנועת IPv4:

    gcloud beta compute forwarding-rules create lb-forwarding-rule-l3-default-ipv4 \
      --load-balancing-scheme=EXTERNAL_PASSTHROUGH \
      --ip-protocol=L3_DEFAULT \
      --ports=all \
      --backend-service=lb-backend-service-l3-default \
      --global \
      --ip-addresses=lb-ipv4-ag0,lb-ipv4-ag1
    

    לתנועת IPv6:

    gcloud beta compute forwarding-rules create lb-forwarding-rule-l3-default-ipv6 \
      --load-balancing-scheme=EXTERNAL_PASSTHROUGH \
      --ip-protocol=L3_DEFAULT \
      --ports=all \
      --backend-service=lb-backend-service-l3-default \
      --global \
      --ip-addresses=lb-ipv6-ag0,lb-ipv6-ag1
    

בדיקת מאזן העומסים

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

קבלת כתובות ה-IP החיצוניות של מאזן העומסים

  1. קבלת כתובות ה-IP השמורות שמצורפות לכלל ההעברה. כלל ההעברה בשני מאזני העומסים משתמש באותו צמד של כתובות IP, כך שאפשר להשתמש בדגל lb-forwarding-rule-tcp-80-ipv4 או בדגל lb-forwarding-rule-l3-default-ipv4 כדי לראות את כתובות ה-IP החיצוניות.

      gcloud compute forwarding-rules describe lb-forwarding-rule-tcp-80-ipv4 \
          --global
    

    הפונקציה מחזירה שתי כתובות IP, אחת לכל קבוצת זמינות. בשלבים הבאים נתייחס לכתובות ה-IP האלה כאל IP_ADDRESS_AVAILABILITY_GROUP_0 ו-IP_ADDRESS_AVAILABILITY_GROUP_1.

הפניית תנועה למאזן העומסים

ההליך הזה שולח תעבורה חיצונית למאזן העומסים. מריצים את הבדיקות הבאות כדי לוודא שתנועת TCP ביציאה 80 מאוזנת על ידי קבוצות המופעים ig-us-tcp-80 או ig-eu-tcp-80, ושכל שאר התנועה (TCP:8080 ו-UDP) מאוזנת על ידי קבוצות המופעים ig-us-l3-default או ig-eu-l3-default.

אימות ההתנהגות באמצעות בקשות TCP ביציאה 80

  1. שולחים בקשות אינטרנט (דרך TCP ביציאה 80) למאזן העומסים באמצעות curl כדי ליצור קשר עם כתובת ה-IP שלו.

    • מלקוחות עם קישוריות IPv4, מריצים את הפקודה הבאה:

      while true; do curl -m1 IP_ADDRESS_AVAILABILITY_GROUP_0; done
      

    שימו לב לטקסט שמוחזר על ידי הפקודה curl. בטקסט מוצג השם של המכונה הווירטואלית בעורף המערכת שמייצרת את התשובה – לדוגמה, Page served from: VM_NAME. התשובות מגיעות רק ממופעים בקבוצות המופעים ig-us-tcp-80 או ig-eu-tcp-80.

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

אימות ההתנהגות באמצעות בקשות TCP ביציאה 8080

שולחים בקשות אינטרנט (דרך TCP ביציאה 8080) למאזן העומסים באמצעות curl כדי ליצור קשר עם כתובת ה-IP שלו.

  • מלקוחות עם קישוריות IPv4, מריצים את הפקודה הבאה:

    while true; do curl -m1 IP_ADDRESS_AVAILABILITY_GROUP_0:8080; done
    

    שימו לב לטקסט שמוחזר על ידי הפקודה curl. התשובות מגיעות רק ממופעים בקבוצות המופעים ig-us-l3-default או ig-eu-l3-default.

    השורה הזו מראה שתעבורת TCP שנשלחת לכתובת ה-IP של מאזן העומסים ביציאה 8080 מטופלת על ידי כלל ההעברה L3_DEFAULT.

בדיקה של טבלת הניתוב המקומית לכתובות ה-IP של מאזן העומסים

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

כדי לבדוק את המסלולים המקומיים במכונת ה-VM של השרת העורפי, מתחברים למכונת ה-VM של השרת העורפי באמצעות SSH ומריצים את הפקודה הבאה:

  ip route list table local

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

local 10.1.2.5 dev ens4 proto kernel scope host src 10.1.2.5
local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1
local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1
broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1
local 136.124.69.214 dev ens4 proto 66 scope host
local 136.124.83.205 dev ens4 proto 66 scope host

בדוגמה הקודמת, 136.124.69.214 ו-136.124.83.205 הם כתובות ה-IP שהוקצו לכלל ההעברה של איזון העומסים. הערכים local 136.124.69.214 dev ens4 proto 66 scope host ו-local 136.124.83.205 dev ens4 proto 66 scope host בטבלת הניתוב המקומית של המכונה הווירטואלית מאפשרים למערכת לקבל חבילות שמיועדות לכתובות ה-IP של מאזן העומסים. Google Cloud סביבת האורחים אחראית להוספת הרשומה הזו.

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

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

  ip addr list

הפלט אמור להיראות כך: כתובות ה-IP‏ (136.124.69.214 ו-136.124.83.205) מופיעות בטבלת הניתוב המקומית, אבל הן לא מוגדרות בממשק הרשת.

1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute
       valid_lft forever preferred_lft forever
2: ens4:  mtu 1460 qdisc fq_codel state UP group default qlen 1000
    link/ether 42:01:0a:01:02:0d brd ff:ff:ff:ff:ff:ff
    altname enp0s4
    inet 10.1.2.13/32 metric 100 scope global dynamic ens4
       valid_lft 84283sec preferred_lft 84283sec
    inet6 fe80::4001:aff:fe01:20d/64 scope link
       valid_lft forever preferred_lft forever

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