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

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

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

בדוגמה הזו, אנחנו משתמשים במאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי כדי להפיץ את התעבורה במכונה וירטואלית (VM) בקצה העורפי באזור us-west1. למאזן העומסים יש כלל העברה עם פרוטוקול L3_DEFAULT לטיפול ב-TCP, ב-UDP, ב-ICMP, ב-ICMPv6, ב-SCTP, ב-ESP, ב-AH וב-GRE.

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

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

הרשאות

כדי לקבל את ההרשאות שדרושות להשלמת המדריך הזה, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:

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

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

הגדרת מאזן עומסים לתעבורה ברמה L3_DEFAULT

השלבים בקטע הזה מתארים את ההגדרות הבאות:

  • דוגמה לשימוש ברשת VPC במצב מותאם אישית בשם lb-network. אפשר להשתמש ברשת במצב אוטומטי אם רוצים לטפל רק בתנועת IPv4. עם זאת, תנועה מסוג IPv6 דורשת תת-רשת במצב מותאם אישית.
  • תת-רשת single-stack (הערך של stack-type מוגדר ל-IPv4), שנדרשת לתנועת נתונים ב-IPv4. כשיוצרים רשת משנה עם סוג אחד של כתובות ברשת VPC במצב מותאם אישית, בוחרים טווח כתובות IPv4 לרשת המשנה. לתעבורת IPv6 נדרשת רשת משנה עם מערך כפול (stack-typeמוגדר כ-IPV4_IPV6). כשיוצרים רשת משנה עם מערך כפול ברשת VPC במצב מותאם אישית, בוחרים סוג גישה ל-IPv6 לרשת המשנה. בדוגמה הזו, הגדרנו את הפרמטר ipv6-access-type של רשת המשנה (subnet) לערך INTERNAL. המשמעות היא שאפשר להקצות למכונות וירטואליות חדשות ברשת המשנה הזו גם כתובות IPv4 פנימיות וגם כתובות IPv6 פנימיות.
  • כללי חומת אש שמאפשרים חיבורים נכנסים למכונות וירטואליות של שרתים עורפיים.
  • קבוצת המכונות של שרת עורפי (backend instance) ורכיבי מאזן העומסים שמשמשים בדוגמה הזו נמצאים באזור וברשת המשנה האלה:
    • אזור: us-west1
    • תת-רשת: lb-subnet, עם טווח כתובות IPv4 ראשי 10.1.2.0/24. אתם בוחרים את טווח כתובות ה-IPv4 שמוגדר בתת-הרשת, אבל טווח כתובות ה-IPv6 מוקצה באופן אוטומטי. ‫Google מספקת בלוק IPv6 CIDR בגודל קבוע (/64).
  • מכונה וירטואלית בבק-אנד בקבוצת מופעי מכונה מנוהלים באזור us-west1-a.
  • מכונה וירטואלית של לקוח לבדיקת חיבורים לשרתי הקצה העורפי.
  • מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי עם הרכיבים הבאים:
    • בדיקת תקינות של שירות הקצה העורפי.
    • שירות לקצה העורפי באזור us-west1 עם הפרוטוקול שמוגדר ל-UNSPECIFIED כדי לנהל את חלוקת החיבורים לקבוצת המכונות האזורית.
    • כלל העברה עם הפרוטוקול L3_DEFAULT והיציאה ALL.

הגדרת רשת, אזור ורשת משנה

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

המסוף

כדי לתמוך בתנועה מסוג IPv4 ו-IPv6, פועלים לפי השלבים הבאים:

  1. נכנסים לדף VPC networks במסוף Google Cloud .

    מעבר לרשתות VPC

  2. לוחצים על יצירת רשת VPC.

  3. בשדה Name (שם), מזינים lb-network.

  4. כדי להגדיר טווחי כתובות IPv6 פנימיות ברשתות משנה ברשת הזו, צריך לבצע את השלבים הבאים:

    1. בשדה VPC network ULA internal IPv6 range (טווח IPv6 פנימי של ULA ברשת VPC), בוחרים באפשרות Enabled (מופעל).
    2. בקטע הקצאת טווח פנימי של IPv6, בוחרים באפשרות אוטומטית או ידנית.
  5. בקטע Subnet creation mode (מצב יצירת רשת משנה), בוחרים באפשרות Custom (בהתאמה אישית).

  6. בקטע New subnet (רשת משנה חדשה), מציינים את פרמטרי ההגדרה הבאים של רשת משנה:

    1. בשדה Name (שם), מזינים lb-subnet.
    2. בשדה אזור, בוחרים באפשרות us-west1.
    3. כדי ליצור רשת משנה עם שני פרוטוקולים, בוחרים באפשרות IPv4 and IPv6 (dual-stack) (IPv4 ו-IPv6 (שני פרוטוקולים)) בשדה IP stack type (סוג ערימת ה-IP).
    4. בשדה IPv4 range, מזינים 10.1.2.0/24.
    5. בשדה IPv6 access type, בוחרים באפשרות Internal.
  7. לוחצים על סיום.

  8. לוחצים על יצירה.

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

  1. נכנסים לדף VPC networks במסוף Google Cloud .

    מעבר לרשתות VPC

  2. לוחצים על יצירת רשת VPC.

  3. בשדה Name (שם), מזינים lb-network.

  4. בקטע Subnets (רשתות משנה):

    • מגדירים את מצב יצירת רשתות משנה לבהתאמה אישית.
    • בקטע New subnet (רשת משנה חדשה), מזינים את הפרטים הבאים:
      • Name (שם): lb-subnet
      • אזור: us-west1
      • סוג מחסנית פרוטוקולי IP: IPv4 (מחסנית יחידה)
      • טווח כתובות IP: 10.1.2.0/24
    • לוחצים על סיום.
  5. לוחצים על יצירה.

gcloud

גם עבור תנועה ב-IPv4 וגם עבור תנועה ב-IPv6, משתמשים בפקודות הבאות:

  1. כדי ליצור רשת VPC חדשה במצב מותאם אישית, מריצים את הפקודה gcloud compute networks create.

    כדי להגדיר טווחי IPv6 פנימיים בכל רשת משנה ברשת הזו, משתמשים בדגל --enable-ula-internal-ipv6. האפשרות הזו מקצה קידומת /48 ULA מתוך טווח fd20::/20 שמשמש את Google Cloud לטווחים פנימיים של רשתות משנה ב-IPv6.

    gcloud compute networks create lb-network \
     --subnet-mode=custom \
     --enable-ula-internal-ipv6
    
  2. בתוך lb-network, יוצרים רשת משנה לשרתי קצה עורפיים באזור us-west1.

    כדי ליצור את רשתות המשנה, מריצים את הפקודה gcloud compute networks subnets create:

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

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

  1. כדי ליצור רשת VPC בהתאמה אישית, משתמשים בפקודה gcloud compute networks create:

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. כדי ליצור את רשת המשנה לשרתי קצה עורפיים באזור us-west1 ברשת lb-network, משתמשים בפקודה gcloud compute networks subnets create.

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

API

גם עבור תנועה ב-IPv4 וגם עבור תנועה ב-IPv6, משתמשים בפקודות הבאות:

  1. יוצרים רשת VPC חדשה במצב מותאם אישית. שולחים בקשת POST אל ה-method‏ networks.insert.

    כדי להגדיר טווחי IPv6 פנימיים ברשתות משנה ברשת הזו, מגדירים את enableUlaInternalIpv6 ל-true. באפשרות הזו מוקצה טווח /48 מתוך הטווח fd20::/20 שבו Google משתמשת לטווחים פנימיים של רשתות משנה IPv6.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks
    {
      "autoCreateSubnetworks": false,
      "name": "lb-network",
      "mtu": MTU,
      "enableUlaInternalIpv6": true,
    }
    

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

    • PROJECT_ID: מזהה הפרויקט שבו נוצרה רשת ה-VPC.
    • MTU: יחידת השידור המקסימלית של הרשת. הערך של MTU יכול להיות 1460 (ברירת מחדל) או 1500. לפני שמגדירים את ה-MTU ל-1500, כדאי לעיין בסקירה הכללית על יחידת השידור המקסימלית.
  2. שולחים בקשת POST אל ה-method‏ subnetworks.insert.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks
    {
    "ipCidrRange": "10.1.2.0/24",
    "network": "lb-network",
    "name": "lb-subnet"
    "stackType": IPV4_IPV6,
    "ipv6AccessType": Internal
    }
    

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

  1. שולחים בקשת POST אל ה-method‏ networks.insert. מחליפים את PROJECT_ID במזהה שלGoogle Cloud הפרויקט.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks
    {
    "name": "lb-network",
    "autoCreateSubnetworks": false
    }
    
  2. שולחים שתי בקשות POST אל ה-method‏ subnetworks.insert:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks
    {
    "name": "lb-subnet",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "ipCidrRange": "10.1.2.0/24",
    "privateIpGoogleAccess": false
    }
    

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

בדוגמה הזו נעשה שימוש בכללים הבאים של חומת האש:

  • fw-allow-lb-access: כלל כניסה (ingress) שחל על כל היעדים ברשת ה-VPC, שמאפשר תעבורה ממקורות בטווחים 10.1.2.0/24. הכלל הזה מאפשר תנועה נכנסת מכל לקוח שנמצא ברשת המשנה.

  • fw-allow-lb-access-ipv6: כלל תעבורה נכנסת (ingress) שחל על כל יעדי התעבורה ברשת ה-VPC, ומאפשר תעבורה ממקורות בטווח IPv6 שהוגדר ברשת המשנה. הכלל הזה מאפשר תנועה נכנסת של IPv6 מכל לקוח שנמצא ברשת המשנה.

  • fw-allow-ssh: כלל תעבורת נתונים נכנסת (ingress) שחל על המכונות שמתבצע עליהן איזון עומסים, שמאפשר קישוריות SSH נכנסת ביציאה 22 ב-TCP מכל כתובת. אפשר לבחור טווח IP של מקור עם הגבלות רבות יותר עבור הכלל הזה – לדוגמה, אפשר לציין רק את טווחי ה-IP של המערכת שממנה מתחילים סשנים של SSH. בדוגמה הזו נעשה שימוש בתג היעד allow-ssh כדי לזהות את מכונות ה-VM שאליהן התג צריך להתייחס.

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

  • fw-allow-health-check-ipv6: כלל תעבורת נתונים נכנסת (ingress) שחל על המופעים שמתבצע איזון העומסים שלהם, שמאפשר תעבורת נתונים ממערכות בדיקת תקינות (2600:2d00:1:b029::/64) של Google Cloud . בדוגמה הזו נעשה שימוש בתג היעד allow-health-check-ipv6 כדי לזהות את המופעים שצריך להחיל עליהם את הכלל.

בלי כללי חומת האש האלה, הכלל default deny ingress חוסם תנועה נכנסת למופעי ה-Backend.

המסוף

  1. נכנסים לדף Firewall policies במסוף Google Cloud .

    לדף Firewall policies

  2. כדי לאפשר לתעבורת נתונים מסוג IPv4 TCP,‏ UDP ו-ICMP להגיע לקבוצת מכונות העורף ig-a:

    • לוחצים על יצירת כלל לחומת האש.
    • Name (שם): fw-allow-lb-access
    • רשת: lb-network
    • עדיפות: 1000
    • כיוון התנועה: כניסה
    • פעולה בהתאמה: אישור
    • יעדים: כל המופעים ברשת
    • מסנן מקור: טווחי IPv4
    • טווחים של כתובות IPv4 של המקור: 10.1.2.0/24
    • פרוטוקולים ויציאות: בוחרים באפשרות פרוטוקולים ויציאות שצוינו.
      • בוחרים באפשרות TCP ומזינים את הערך ALL.
      • בוחרים באפשרות UDP.
      • בוחרים באפשרות אחר ומזינים ICMP.
  3. לוחצים על יצירה.

  4. כדי לאפשר חיבורי SSH נכנסים:

    • לוחצים על יצירת כלל לחומת האש.
    • Name (שם): fw-allow-ssh
    • רשת: lb-network
    • עדיפות: 1000
    • כיוון התנועה: כניסה
    • פעולה בהתאמה: אישור
    • יעדים: תגי יעד שצוינו
    • תגי טירגוט: allow-ssh
    • מסנן מקור: טווחי IPv4
    • טווחים של כתובות IPv4 של המקור: 0.0.0.0/0
    • פרוטוקולים ויציאות: בוחרים באפשרות פרוטוקולים ויציאות שצוינו, ואז מקלידים tcp:22.
  5. לוחצים על יצירה.

  6. כדי לאפשר לתעבורת נתונים מסוג IPv6 TCP,‏ UDP ו-ICMP להגיע לקבוצת מכונות עורפיות ig-a:

    • לוחצים על יצירת כלל לחומת האש.
    • Name (שם): fw-allow-lb-access-ipv6
    • רשת: lb-network
    • עדיפות: 1000
    • כיוון התנועה: כניסה
    • פעולה בהתאמה: אישור
    • יעדים: כל המופעים ברשת
    • מסנן מקור: טווחים של IPv6
    • טווחי IPv6 של המקור: IPV6_ADDRESS שהוקצו ב-lb-subnet
    • פרוטוקולים ויציאות: בוחרים באפשרות פרוטוקולים ויציאות שצוינו.
      • בוחרים באפשרות TCP ומזינים את הערך 0-65535.
      • בוחרים באפשרות UDP.
      • בוחרים באפשרות אחר ובפרוטוקול ICMPv6 מזינים 58.
  7. לוחצים על יצירה.

  8. כדי לאפשר בדיקות תקינות של Google Cloud IPv6:

    • לוחצים על יצירת כלל לחומת האש.
    • Name (שם): fw-allow-health-check-ipv6
    • רשת: lb-network
    • עדיפות: 1000
    • כיוון התנועה: כניסה
    • פעולה בהתאמה: אישור
    • יעדים: תגי יעד שצוינו
    • תגי טירגוט: allow-health-check-ipv6
    • מסנן מקור: טווחים של IPv6
    • טווחים של כתובות IPv6 של המקור: 2600:2d00:1:b029::/64
    • Protocols and ports: Allow all
  9. לוחצים על יצירה.

  10. כדי לאפשר Google Cloud בדיקות תקינות של IPv4:

    • לוחצים על יצירת כלל לחומת האש.
    • Name (שם): fw-allow-health-check
    • רשת: lb-network
    • עדיפות: 1000
    • כיוון התנועה: כניסה
    • פעולה בהתאמה: אישור
    • יעדים: תגי יעד שצוינו
    • תגי טירגוט: allow-health-check
    • מסנן מקור: טווחי IPv4
    • טווחי IPv4 של המקור: 130.211.0.0/22 ו-35.191.0.0/16
    • Protocols and ports: Allow all
  11. לוחצים על יצירה.

gcloud

  1. כדי לאפשר לתעבורת TCP ב-IPv4 להגיע לקבוצת השרתים העורפיים ig-a, יוצרים את הכלל הבא:

    gcloud compute firewall-rules create fw-allow-lb-access \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --source-ranges=10.1.2.0/24 \
        --rules=tcp,udp,icmp
    
  2. יוצרים את כלל חומת האש fw-allow-ssh כדי לאפשר קישוריות SSH למכונות וירטואליות באמצעות תג הרשת allow-ssh. אם לא מציינים את source-ranges,‏Google Cloud מפרש את הכלל כאילו הוא מתייחס לכל מקור.

    gcloud compute firewall-rules create fw-allow-ssh \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-ssh \
        --rules=tcp:22
    
  3. כדי לאפשר לתעבורת IPv6 להגיע לקבוצת השרתים העורפיים ig-a, יוצרים את הכלל הבא:

    gcloud compute firewall-rules create fw-allow-lb-access-ipv6 \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --source-ranges=IPV6_ADDRESS \
        --rules=all
    

    מחליפים את IPV6_ADDRESS בכתובת ה-IPv6 שהוקצתה ב-lb-subnet.

  4. יוצרים את כלל חומת האש fw-allow-health-check כדי לאפשר בדיקות תקינות. Google Cloud

    gcloud compute firewall-rules create fw-allow-health-check \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-health-check \
        --source-ranges=130.211.0.0/22,35.191.0.0/16 \
        --rules=tcp,udp,icmp
    
  5. יוצרים את הכלל fw-allow-health-check-ipv6 כדי לאפשר Google Cloudבדיקות תקינות של IPv6.

    gcloud compute firewall-rules create fw-allow-health-check-ipv6 \
       --network=lb-network \
       --action=allow \
       --direction=ingress \
       --target-tags=allow-health-check-ipv6 \
       --source-ranges=2600:2d00:1:b029::/64 \
       --rules=tcp,udp,icmp
    

API

  1. כדי ליצור את הכלל fw-allow-lb-access בחומת האש, שולחים בקשת POST אל ה-method‏ firewalls.insert. מחליפים את PROJECT_ID במזהה שלGoogle Cloud הפרויקט.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
    {
    "name": "fw-allow-lb-access",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "priority": 1000,
    "sourceRanges": [
      "10.1.2.0/24"
    ],
    "allPorts": true,
    "allowed": [
      {
        "IPProtocol": "tcp"
      },
      {
        "IPProtocol": "udp"
      },
      {
        "IPProtocol": "icmp"
      }
    ],
    "direction": "INGRESS",
    "logConfig": {
      "enable": false
    },
    "disabled": false
    }
    
  2. כדי ליצור את הכלל של חומת האש fw-allow-lb-access-ipv6, שולחים בקשת POST אל ה-method‏ firewalls.insert.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
    {
     "name": "fw-allow-lb-access-ipv6",
     "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
     "priority": 1000,
     "sourceRanges": [
       "IPV6_ADDRESS"
     ],
     "allPorts": true,
     "allowed": [
       {
          "IPProtocol": "tcp"
        },
        {
          "IPProtocol": "udp"
        },
        {
          "IPProtocol": "58"
        }
     ],
     "direction": "INGRESS",
     "logConfig": {
        "enable": false
     },
     "disabled": false
    }
    

    מחליפים את IPV6_ADDRESS בכתובת IPv6 שהוקצתה ב-lb-subnet.

  3. כדי ליצור את כלל חומת האש fw-allow-ssh, שולחים בקשת POST אל ה-method‏ firewalls.insert:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
    {
    "name": "fw-allow-ssh",
         "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "priority": 1000,
    "sourceRanges": [
      "0.0.0.0/0"
    ],
    "targetTags": [
      "allow-ssh"
    ],
    "allowed": [
     {
       "IPProtocol": "tcp",
       "ports": [
         "22"
       ]
     }
    ],
    "direction": "INGRESS",
    "logConfig": {
     "enable": false
    },
    "disabled": false
    }
    
  4. כדי ליצור את כלל חומת האש fw-allow-health-check, שולחים בקשת POST אל ה-method‏ firewalls.insert:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
    {
    "name": "fw-allow-health-check",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "priority": 1000,
    "sourceRanges": [
      "130.211.0.0/22",
      "35.191.0.0/16"
    ],
    "targetTags": [
      "allow-health-check"
    ],
    "allowed": [
      {
        "IPProtocol": "tcp"
      },
      {
        "IPProtocol": "udp"
      },
      {
        "IPProtocol": "icmp"
      }
    ],
    "direction": "INGRESS",
    "logConfig": {
      "enable": false
    },
    "disabled": false
    }
    
  5. כדי ליצור את הכלל של חומת האש fw-allow-health-check-ipv6, שולחים בקשת POST אל ה-method‏ firewalls.insert.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
    {
    "name": "fw-allow-health-check-ipv6",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "priority": 1000,
    "sourceRanges": [
      "2600:2d00:1:b029::/64"
    ],
    "targetTags": [
      "allow-health-check-ipv6"
    ],
    "allowed": [
      {
        "IPProtocol": "tcp"
      },
      {
        "IPProtocol": "udp"
      }
    ],
    "direction": "INGRESS",
    "logConfig": {
      "enable": false
    },
    "disabled": false
    }
    

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

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

כדי לטפל בתנועה של IPv4 ו-IPv6, צריך להגדיר את מכונות ה-VM של הקצה העורפי כ-dual-stack. מגדירים את stack-type של המכונה הווירטואלית לערך IPV4_IPV6. המכונות הווירטואליות מקבלות בירושה גם את ההגדרה ipv6-access-type (בדוגמה הזו, INTERNAL) מרשת המשנה. פרטים נוספים על הדרישות של IPv6 זמינים במאמר סקירה כללית של מאזן עומסי רשת פנימי מסוג העברת תנועה (passthrough): כללי העברה.

אם רוצים להשתמש במכונות וירטואליות קיימות כשרתי קצה עורפי, צריך לעדכן את המכונות הווירטואליות כדי שיהיו בעלות תמיכה ב-dual-stack באמצעות הפקודה gcloud compute instances network-interfaces update.

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

כדי לפשט את ההוראות, המכונות הווירטואליות של הבק-אנד מריצות Debian GNU/Linux 12.

יצירת קבוצת המופעים

המסוף

כדי לתמוך בתנועה מסוג IPv4 ו-IPv6, פועלים לפי השלבים הבאים:

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

    כניסה לדף Instance templates

    1. לוחצים על Create instance template.
    2. בשדה Name (שם), מזינים vm-a1.
    3. מוודאים שדיסק האתחול מוגדר לקובץ אימג' של Debian, כמו Debian GNU/Linux 12 (bookworm)‎. בהוראות האלה נעשה שימוש בפקודות שזמינות רק ב-Debian, כמו apt-get.
    4. מרחיבים את הקטע אפשרויות מתקדמות.
    5. מרחיבים את הקטע ניהול ומעתיקים את הסקריפט הבא לשדה סקריפט לטעינה בזמן ההפעלה. סקריפט לטעינה בזמן ההפעלה גם מגדיר את שרת Apache להאזנה ביציאה 8080 במקום ביציאה 80.

      #! /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
      
    6. מרחיבים את הקטע Networking (רשת) ומציינים את הפרטים הבאים:

      1. בשדה Network tags (תגי רשת), מוסיפים את הערכים allow-ssh ו-allow-health-check-ipv6.
      2. בקטע Network interfaces, לוחצים על ממשק default ומגדירים את השדות הבאים:
        • רשת: lb-network
        • Subnetwork: lb-subnet
        • סוג מחסנית IP: IPv4 ו-IPv6 (מחסנית כפולה)
    7. לוחצים על יצירה.

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

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

    כניסה לדף Instance templates

  2. לוחצים על Create instance template.

    1. בשדה Name (שם), מזינים vm-a1.
    2. מוודאים שדיסק האתחול מוגדר לקובץ אימג' של Debian, כמו Debian GNU/Linux 12 (bookworm)‎. בהוראות האלה נעשה שימוש בפקודות שזמינות רק ב-Debian, כמו apt-get.
    3. מרחיבים את הקטע אפשרויות מתקדמות.
    4. מרחיבים את הקטע ניהול ומעתיקים את הסקריפט הבא לשדה סקריפט לטעינה בזמן ההפעלה. סקריפט לטעינה בזמן ההפעלה גם מגדיר את שרת Apache להאזנה ביציאה 8080 במקום ביציאה 80.

      #! /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
      
    5. מרחיבים את הקטע Networking (רשת) ומציינים את הפרטים הבאים:

      1. בשדה Network tags (תגי רשת), מוסיפים את הערכים allow-ssh ו-allow-health-check.
      2. בקטע Network interfaces, לוחצים על ממשק default ומגדירים את השדות הבאים:
        • רשת: lb-network
        • Subnetwork: lb-subnet
        • סוג מחסנית פרוטוקולי IP: IPv4 (מחסנית יחידה)
    6. לוחצים על יצירה.

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

    כניסה לדף Instance groups

    1. לוחצים על יצירת קבוצת מופעים.
    2. בוחרים באפשרות New managed instance group (stateless) (קבוצת מופעי מכונה מנוהלים חדשה (בלי שמירת מצב)). מידע נוסף מופיע במאמר קבוצות של מכונות וירטואליות בלי שמירת מצב או עם שמירת מצב.
    3. בשדה Name (שם), מזינים ig-a.
    4. בקטע מיקום, בוחרים באפשרות אזור יחיד.
    5. בקטע אזור, בוחרים באפשרות us-west1.
    6. בשדה Zone, בוחרים באפשרות us-west1-a.
    7. בשדה תבנית של הגדרות מכונה, בוחרים באפשרות vm-a1.
    8. מציינים את מספר המופעים שרוצים ליצור בקבוצה.

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

      • בקטע מצב שינוי גודל אוטומטי, בוחרים באפשרות Off:do not autoscale.
      • בשדה מספר מופעים מקסימלי, מזינים 2.
    9. לוחצים על יצירה.

gcloud

ההוראות ל-gcloud במדריך הזה מבוססות על ההנחה שאתם משתמשים ב-Cloud Shell או בסביבה אחרת שבה מותקן bash.

  1. יוצרים תבנית של הגדרות מכונה עם שרת HTTP באמצעות הפקודה gcloud compute instance-templates create.

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

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

    gcloud compute instance-templates create vm-a1 \
        --region=us-west1 \
        --network=lb-network \
        --subnet=lb-subnet \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPV4_IPV6 \
        --tags=allow-ssh \
        --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'
    

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

    gcloud compute instance-templates create vm-a1 \
        --region=us-west1 \
        --network=lb-network \
        --subnet=lb-subnet \
        --tags=allow-ssh \
        --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. יוצרים קבוצת מופעי מכונה מנוהלים באזור באמצעות הפקודה gcloud compute instance-groups managed create.

    gcloud compute instance-groups managed create ig-a \
        --zone us-west1-a \
        --size 2 \
        --template vm-a1
    

api

כדי לטפל בתנועה של IPv4 ו-IPv6, פועלים לפי השלבים הבאים:.

  1. כדי ליצור מכונה וירטואלית, שולחים בקשות POST ל-method‏ instances.insert:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    {
    "name": "vm-a1",
    "tags": {
     "items": [
       "allow-health-check-ipv6",
       "allow-ssh"
     ]
    },
    "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/machineTypes/e2-standard-2",
    "canIpForward": false,
    "networkInterfaces": [
     {
       "stackType": "IPV4_IPV6",
       "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
       "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
       "accessConfigs": [
         {
           "type": "ONE_TO_ONE_NAT",
           "name": "external-nat",
           "networkTier": "PREMIUM"
         }
       ]
     }
    ],
    "disks": [
     {
       "type": "PERSISTENT",
       "boot": true,
       "mode": "READ_WRITE",
       "autoDelete": true,
       "deviceName": "vm-a1",
       "initializeParams": {
         "sourceImage": "projects/debian-cloud/global/images/DEBIAN_IMAGE_NAME",
         "diskType": "projects/PROJECT_ID/zones/ZONE/diskTypes/pd-standard",
         "diskSizeGb": "10"
       }
     }
    ],
    "metadata": {
     "items": [
       {
         "key": "startup-script",
         "value": "#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\nvm_hostname="$(curl -H "Metadata-Flavor:Google" \\\nhttp://metadata.google.internal/computeMetadata/v1/instance/name)"\necho "Page served from: $vm_hostname" | \\\ntee /var/www/html/index.html\nsed -ire "s/^Listen 80$/Listen 8080/g" /etc/\\napache2/ports.conf\nsystemctl restart apache2"
       }
     ]
    },
    "scheduling": {
     "preemptible": false
    },
    "deletionProtection": false
    }
    

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

  1. כדי ליצור מכונה וירטואלית, שולחים בקשות POST ל-method‏ instances.insert:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    {
    "name": "vm-a1",
    "tags": {
     "items": [
       "allow-health-check",
       "allow-ssh"
     ]
    },
    "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/machineTypes/e2-standard-2",
    "canIpForward": false,
    "networkInterfaces": [
     {
       "stackType": "IPV4",
       "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
       "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
       "accessConfigs": [
         {
           "type": "ONE_TO_ONE_NAT",
           "name": "external-nat",
           "networkTier": "PREMIUM"
         }
       ]
     }
    ],
    "disks": [
     {
       "type": "PERSISTENT",
       "boot": true,
       "mode": "READ_WRITE",
       "autoDelete": true,
       "deviceName": "vm-a1",
       "initializeParams": {
         "sourceImage": "projects/debian-cloud/global/images/DEBIAN_IMAGE_NAME",
         "diskType": "projects/PROJECT_ID/zones/ZONE/diskTypes/pd-standard",
         "diskSizeGb": "10"
       }
     }
    ],
    "metadata": {
     "items": [
       {
         "key": "startup-script",
         "value": "#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\nvm_hostname="$(curl -H "Metadata-Flavor:Google" \\\nhttp://metadata.google.internal/computeMetadata/v1/instance/name)"\necho "Page served from: $vm_hostname" | \\\ntee /var/www/html/index.html\nsed -ire "s/^Listen 80$/Listen 8080/g" /etc/\\napache2/ports.conf\nsystemctl restart apache2"
       }
     ]
    },
    "scheduling": {
     "preemptible": false
    },
    "deletionProtection": false
    }
    
  2. כדי ליצור קבוצת מופעים, שולחים בקשת POST אל ה-method‏ instanceGroups.insert.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups
    
    {
    "name": "ig-a",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet"
    }
    
  3. כדי להוסיף מכונות לכל קבוצת מכונות, שולחים בקשת POST אל ה-method‏ instanceGroups.addInstances.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a/addInstances
    
    {
    "instances": [
    {
     "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a1"
    }
    ]
    }
    

יצירת מכונה וירטואלית של לקוח

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

בשביל תנועת IPv4 ו-IPv6:

המסוף

  1. נכנסים לדף VM instances במסוף Google Cloud .

    כניסה לדף VM instances

  2. לוחצים על Create instance.

  3. מגדירים את Name לערך vm-client-ipv6.

  4. מגדירים את Zone לערך us-west1-a.

  5. מרחיבים את הקטע אפשרויות מתקדמות ומבצעים את השינויים הבאים:

    • מרחיבים את Networking ומוסיפים את allow-ssh אל Network tags.
    • בקטע Network interfaces, לוחצים על Edit, מבצעים את השינויים הבאים ולוחצים על Done:
      • רשת: lb-network
      • Subnet: lb-subnet
      • סוג מחסנית IP: IPv4 ו-IPv6 (מחסנית כפולה)
      • כתובת IP פנימית ראשית: זמנית (אוטומטית)
      • כתובת IP חיצונית: זמנית
  6. לוחצים על יצירה.

gcloud

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

gcloud compute instances create vm-client-ipv6 \
    --zone=us-west1-a \
    --image-family=debian-12 \
    --image-project=debian-cloud \
    --stack-type=IPV4_IPV6 \
    --tags=allow-ssh \
    --subnet=lb-subnet

api

שולחים בקשת POST אל ה-method‏ instances.insert.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances

{
 "name": "vm-client-ipv6",
 "tags": {
   "items": [
     "allow-ssh"
   ]
 },
 "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/machineTypes/e2-standard-2",
 "canIpForward": false,
 "networkInterfaces": [
   {
     "stackType": "IPV4_IPV6",
     "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
     "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
     "accessConfigs": [
       {
         "type": "ONE_TO_ONE_NAT",
         "name": "external-nat",
         "networkTier": "PREMIUM"
       }
     ]
   }
 ],
 "disks": [
   {
     "type": "PERSISTENT",
     "boot": true,
     "mode": "READ_WRITE",
     "autoDelete": true,
     "deviceName": "vm-client",
     "initializeParams": {
       "sourceImage": "projects/debian-cloud/global/images/debian-image-name",
       "diskType": "projects/PROJECT_ID/zones/us-west1-a/diskTypes/pd-standard",
       "diskSizeGb": "10"
     }
   }
 ],
 "scheduling": {
   "preemptible": false
 },
 "deletionProtection": false
}

בשביל IPv4 traffic:

המסוף

  1. נכנסים לדף VM instances במסוף Google Cloud .

    כניסה לדף VM instances

  2. לוחצים על Create instance.

  3. בשדה Name (שם), מזינים vm-client.

  4. בשדה Zone (אזור), מזינים us-west1-a.

  5. מרחיבים את הקטע אפשרויות מתקדמות.

  6. מרחיבים את Networking ומגדירים את השדות הבאים:

    1. בשדה Network tags (תגי רשת), מזינים allow-ssh.
    2. בקטע Network interfaces (ממשקי רשת), בוחרים באפשרויות הבאות:
      • רשת: lb-network
      • Subnet: lb-subnet
  7. לוחצים על יצירה.

gcloud

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

gcloud compute instances create vm-client \
    --zone=us-west1-a \
    --image-family=debian-12 \
    --image-project=debian-cloud \
    --tags=allow-ssh \
    --subnet=lb-subnet

API

שולחים בקשת POST אל ה-method‏ instances.insert. מחליפים את PROJECT_ID במזהה של Google Cloud הפרויקט.

 POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances
 {
    "name": "vm-client",
    "tags": {
      "items": [
        "allow-ssh"
      ]
  },
    "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/machineTypes/e2-standard-2",
    "canIpForward": false,
    "networkInterfaces": [
      {
        "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
        "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
        "accessConfigs": [
          {
            "type": "ONE_TO_ONE_NAT",
            "name": "external-nat",
            "networkTier": "PREMIUM"
          }
        ]
      }
    ],
    "disks": [
      {
        "type": "PERSISTENT",
        "boot": true,
        "mode": "READ_WRITE",
        "autoDelete": true,
        "deviceName": "vm-client",
        "initializeParams": {
          "sourceImage": "projects/debian-cloud/global/images/debian-image-name",
          "diskType": "projects/PROJECT_ID/zones/us-west1-a/diskTypes/pd-standard",
          "diskSizeGb": "10"
        }
      }
    ],
    "scheduling": {
      "preemptible": false
     },
    "deletionProtection": false
  }
  

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

יצירת מאזן עומסים לכמה פרוטוקולים.

gcloud

  1. יוצרים בדיקת תקינות HTTP ליציאה 80. בדיקת התקינות הזו משמשת לאימות התקינות של שרתי קצה בענן בקבוצת המופעים ig-a.

    gcloud compute health-checks create http hc-http-80 \
        --region=us-west1 \
        --port=80
    
  2. יוצרים את שירות הקצה העורפי עם הפרוטוקול שמוגדר ל-UNSPECIFIED:

    gcloud compute backend-services create be-ilb-l3-default \
        --load-balancing-scheme=internal \
        --protocol=UNSPECIFIED \
        --region=us-west1 \
        --health-checks=hc-http-80 \
        --health-checks-region=us-west1
    
  3. מוסיפים את קבוצת המכונות לשירות הקצה העורפי:

    gcloud compute backend-services add-backend be-ilb-l3-default \
        --region=us-west1 \
        --instance-group=ig-a \
        --instance-group-zone=us-west1-a
    
  4. לתעבורת נתונים של IPv6: יוצרים כלל העברה עם הפרוטוקול שמוגדר ל-L3_DEFAULT כדי לטפל בכל תעבורת הנתונים של פרוטוקול IPv6 הנתמך. צריך להגדיר את כל היציאות עם כללי העברה של L3_DEFAULT.

    gcloud compute forwarding-rules create fr-ilb-ipv6 \
       --region=us-west1 \
       --load-balancing-scheme=internal \
       --subnet=lb-subnet \
       --ip-protocol=L3_DEFAULT \
       --ports=ALL \
       --backend-service=be-ilb-l3-default \
       --backend-service-region=us-west1 \
       --ip-version=IPV6
    
  5. לתעבורת נתונים של IPv4: יוצרים כלל העברה עם הפרוטוקול שמוגדר ל-L3_DEFAULT כדי לטפל בכל תעבורת הנתונים של פרוטוקול IPv4 הנתמך. צריך להגדיר את כל היציאות עם כללי העברה של L3_DEFAULT. צריך להשתמש ב-10.1.2.99 ככתובת ה-IP הפנימית.

    gcloud compute forwarding-rules create fr-ilb-l3-default \
       --region=us-west1 \
       --load-balancing-scheme=internal \
       --network=lb-network \
       --subnet=lb-subnet \
       --address=10.1.2.99 \
       --ip-protocol=L3_DEFAULT \
       --ports=ALL \
       --backend-service=be-ilb-l3-default \
       --backend-service-region=us-west1
    

API

  1. כדי ליצור את בדיקת תקינות, שולחים בקשת POST אל ה-method‏ regionHealthChecks.insert. מחליפים את PROJECT_ID במזהה שלGoogle Cloud הפרויקט.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/regionHealthChecks
    
    {
    "name": "hc-http-80",
    "type": "HTTP",
    "httpHealthCheck": {
     "port": 80
    }
    }
    
  2. כדי ליצור את השירות לקצה עורפי אזורי, שולחים בקשת POST אל ה-method‏ regionBackendServices.insert:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices
    
    {
    "name": "be-ilb-l3-default",
    "backends": [
     {
       "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a",
       "balancingMode": "CONNECTION"
     }
    ],
    "healthChecks": [
     "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/healthChecks/hc-http-80"
    ],
    "loadBalancingScheme": "INTERNAL",
    "protocol": "UNSPECIFIED",
    "connectionDraining": {
     "drainingTimeoutSec": 0
    }
    }
    
  3. לתנועת IPv6: יוצרים את כלל ההעברה על ידי שליחת בקשת POST אל ה-method‏ forwardingRules.insert.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules
    
    {
    "name": "fr-ilb-ipv6",
    "IPProtocol": "L3_DEFAULT",
    "allPorts": true,
    "loadBalancingScheme": "INTERNAL",
    "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
    "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb-l3-default",
    "ipVersion": "IPV6",
    "networkTier": "PREMIUM"
    }
    
  4. לתנועת IPv4: יוצרים את כלל ההעברה על ידי שליחת בקשת POST אל ה-method‏ forwardingRules.insert:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules
    
    {
    "name": "fr-ilb-l3-default",
    "IPAddress": "10.1.2.99",
    "IPProtocol": "L3_DEFAULT",
    "allPorts": true,
    "loadBalancingScheme": "INTERNAL",
    "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb-l3-default",
    "networkTier": "PREMIUM"
    }
    

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

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

בדיקת החיבור ממכונה וירטואלית של לקוח

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

gcloud:IPv6

  1. מתחברים למופע ה-VM של הלקוח.

    gcloud compute ssh vm-client-ipv6 --zone=us-west1-a
    
  2. תאר את כלל ההעברה של IPv6‏ fr-ilb-ipv6. שימו לב לIPV6_ADDRESS בתיאור.

    gcloud compute forwarding-rules describe fr-ilb-ipv6 --region=us-west1
    
  3. מריצים את הפקודה הבאה מלקוחות עם קישוריות IPv6. מחליפים את IPV6_ADDRESS בכתובת ה-IPv6 הארעית בכלל ההעברה fr-ilb-ipv6.

    curl -m 10 -s http://IPV6_ADDRESS:80
    

    לדוגמה, אם כתובת ה-IPv6 שהוקצתה היא [fd20:1db0:b882:802:0:46:0:0/96]:80, הפקודה צריכה להיראות כך:

    curl -m 10 -s http://[fd20:1db0:b882:802:0:46:0:0]:80
    

gcloud:IPv4

  1. מתחברים למופע ה-VM של הלקוח.

    gcloud compute ssh vm-client --zone=us-west1-a
    
  2. תאר את כלל ההעברה של IPv4‏ fr-ilb.

    gcloud compute forwarding-rules describe fr-ilb --region=us-west1
    
  3. שולחים בקשת אינטרנט למאזן העומסים באמצעות curl כדי ליצור קשר עם כתובת ה-IP שלו. חוזרים על הבקשה כדי לראות שהתשובות מגיעות ממכונות וירטואליות שונות בעורף. השם של המכונה הווירטואלית שמייצרת את התגובה מוצג בטקסט בתגובת ה-HTML, בהתאם לתוכן של /var/www/html/index.html בכל מכונה וירטואלית בעורף. תשובות צפויות נראות כך: Page served from: vm-a1.

    curl http://10.1.2.99
    

    כלל ההעברה מוגדר להצגת יציאות 80 ו-53. כדי לשלוח תעבורה ליציאות האלה, מוסיפים נקודתיים (:) ואת מספר היציאה אחרי כתובת ה-IP, כך:

    curl http://10.1.2.99:80
    

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

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

gcloud:IPv6

  1. מתחברים למופע ה-VM של הלקוח.

    gcloud compute ssh vm-client-ipv6 --zone=us-west1-a
    
  2. מנסים לבצע פינג לכתובת ה-IPv6 של מאזן העומסים. מחליפים את IPV6_ADDRESS בכתובת ה-IPv6 הארעית בכלל ההעברה fr-ilb-ipv6.

    שימו לב שמתקבלת תשובה ושהפקודה ping פועלת בדוגמה הזו.

    ping6 IPV6_ADDRESS
    

    לדוגמה, אם כתובת ה-IPv6 שהוקצתה היא [2001:db8:1:1:1:1:1:1/96], הפקודה תהיה:

    ping6 2001:db8:1:1:1:1:1:1
    

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

    @vm-client: ping IPV6_ADDRESS
    PING IPV6_ADDRESS (IPV6_ADDRESS) 56(84) bytes of data.
    64 bytes from IPV6_ADDRESS: icmp_seq=1 ttl=64 time=1.58 ms
    

gcloud:IPv4

  1. מתחברים למופע ה-VM של הלקוח.

    gcloud compute ssh vm-client --zone=us-west1-a
    
  2. מנסים לבצע פינג לכתובת ה-IPv4 של מאזן העומסים. שימו לב שמתקבלת תשובה ושהפקודה ping פועלת בדוגמה הזו.

    ping 10.1.2.99
    

    הפלט שיתקבל:

    @vm-client: ping 10.1.2.99
    PING 10.1.2.99 (10.1.2.99) 56(84) bytes of data.
    64 bytes from 10.1.2.99: icmp_seq=1 ttl=64 time=1.58 ms
    64 bytes from 10.1.2.99: icmp_seq=2 ttl=64 time=0.242 ms
    64 bytes from 10.1.2.99: icmp_seq=3 ttl=64 time=0.295 ms
    

אפשרויות הגדרה נוספות

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

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

התרשים הבא מציג את הארכיטקטורה של הדוגמה הזו.

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

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

  • כללי העברה עם כמה יציאות:

    • פרוטוקול TCP עם יציאות 80,8080
    • פרוטוקול L3_DEFAULT עם יציאות ALL
  • כללי העברה עם כל היציאות:

    • פרוטוקול TCP עם יציאות ALL
    • פרוטוקול L3_DEFAULT עם יציאות ALL

שמירת כתובת IPv4 פנימית סטטית

שומרים כתובת IP פנימית סטטית בשביל 10.1.2.99 ומגדירים את הדגל --purpose שלה לערך SHARED_LOADBALANCER_VIP. חובה להשתמש בדגל --purpose כדי שכללי העברה רבים יוכלו להשתמש באותה כתובת IP פנימית.

gcloud

משתמשים בפקודה gcloud compute addresses create:

gcloud compute addresses create internal-lb-ipv4 \
    --region us-west1 \
    --subnet lb-subnet \
    --purpose SHARED_LOADBALANCER_VIP \
    --addresses 10.1.2.99

API

מבצעים קריאה ל-addresses.insert. מחליפים את PROJECT_ID במזהה שלGoogle Cloud הפרויקט.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/addresses

גוף הבקשה חייב לכלול את addressType, שצריך להיות INTERNAL, את name של הכתובת ואת subnetwork שאליה שייכת כתובת ה-IP. חובה לציין את הערך address כ-10.1.2.99.

{
  "addressType": "INTERNAL",
  "name": "internal-lb-ipv4",
  "subnetwork": "regions/us-west1/subnetworks/lb-subnet",
  "purpose": "SHARED_LOADBALANCER_VIP",
  "address": "10.1.2.99"
}

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

מגדירים שלושה מאזני עומסים עם הרכיבים הבאים:

  • למאזן העומסים הראשון יש כלל העברה עם פרוטוקול TCP ויציאה 80. תנועת TCP שמגיעה לכתובת ה-IP הפנימית ביציאה 80 מטופלת על ידי כלל ההעברה TCP.
  • למאזן העומסים השני יש כלל העברה עם פרוטוקול UDP ויציאה 53. תעבורת UDP שמגיעה לכתובת ה-IP הפנימית ביציאה 53 מטופלת על ידי כלל ההעברה UDP.
  • למאזן העומסים השלישי יש כלל העברה עם פרוטוקול L3_DEFAULT ויציאה ALL. כל התנועה האחרת שלא תואמת לכללי ההעברה TCP או UDP מטופלת על ידי כלל ההעברה L3_DEFAULT.
  • כל שלושת מאזני העומסים חולקים את אותה כתובת IP פנימית סטטית (internal-lb-ipv4) בכללי ההעברה שלהם.

יצירת מאזן העומסים הראשון

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

gcloud

  1. יוצרים את שירות הקצה העורפי לתנועת TCP:

    gcloud compute backend-services create be-ilb \
        --load-balancing-scheme=internal \
        --protocol=tcp \
        --region=us-west1 \
        --health-checks=hc-http-80 \
        --health-checks-region=us-west1
    
  2. מוסיפים את קבוצת המכונות לשירות הקצה העורפי:

    gcloud compute backend-services add-backend be-ilb \
        --region=us-west1 \
        --instance-group=ig-a \
        --instance-group-zone=us-west1-a
    
  3. יוצרים כלל העברה לשירות לקצה העורפי. משתמשים בכתובת IP פנימית סטטית שמורה (internal-lb-ipv4) בשביל כתובת ה-IP הפנימית.

    gcloud compute forwarding-rules create fr-ilb \
        --region=us-west1 \
        --load-balancing-scheme=internal \
        --network=lb-network \
        --subnet=lb-subnet \
        --address=internal-lb-ipv4 \
        --ip-protocol=TCP \
        --ports=80 \
        --backend-service=be-ilb \
        --backend-service-region=us-west1
    

API

  1. כדי ליצור את השירות לקצה עורפי אזורי, שולחים בקשת POST אל ה-method‏ regionBackendServices.insert. מחליפים את PROJECT_ID במזהה שלGoogle Cloud הפרויקט.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices
    {
    "name": "be-ilb",
    "backends": [
     {
       "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a",
       "balancingMode": "CONNECTION"
     }
    ],
    "healthChecks": [
     "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/healthChecks/hc-http-80"
    ],
    "loadBalancingScheme": "INTERNAL",
    "protocol": "TCP",
    "connectionDraining": {
     "drainingTimeoutSec": 0
    }
    }
    

  2. Create the forwarding rule by making a POST request to the forwardingRules.insert method:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules
    
    {
    "name": "fr-ilb",
    "IPAddress": "internal-lb-ipv4",
    "IPProtocol": "TCP",
    "ports": [
     "80"
    ],
    "loadBalancingScheme": "INTERNAL",
    "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb",
    "networkTier": "PREMIUM"
    }
    

יצירת מאזן העומסים השני

יוצרים את מאזן העומסים השני לתנועת UDP ביציאה 53.

gcloud

  1. יוצרים את שירות הקצה העורפי עם הפרוטוקול שמוגדר ל-UDP:

    gcloud compute backend-services create be-ilb-udp \
        --load-balancing-scheme=internal \
        --protocol=UDP \
        --region=us-west1 \
        --health-checks=hc-http-80 \
        --health-checks-region=us-west1
    
  2. מוסיפים את קבוצת המכונות לשירות הקצה העורפי:

    gcloud compute backend-services add-backend be-ilb-udp \
        --region=us-west1 \
        --instance-group=ig-a \
        --instance-group-zone=us-west1-a
    
  3. יוצרים כלל העברה לשירות לקצה העורפי. משתמשים בכתובת IP פנימית סטטית שמורה (internal-lb-ipv4) בשביל כתובת ה-IP הפנימית.

    gcloud compute forwarding-rules create fr-ilb-udp \
        --region=us-west1 \
        --load-balancing-scheme=internal \
        --network=lb-network \
        --subnet=lb-subnet \
        --address=internal-lb-ipv4 \
        --ip-protocol=UDP \
        --ports=53 \
        --backend-service=be-ilb-udp \
        --backend-service-region=us-west1
    

API

  1. כדי ליצור את השירות לקצה עורפי אזורי, שולחים בקשת POST אל ה-method‏ regionBackendServices.insert. מחליפים את PROJECT_ID במזהה שלGoogle Cloud הפרויקט.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices
    {
    "name": "be-ilb-udp",
    "backends": [
     {
      "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a",
      "balancingMode": "CONNECTION"
     }
    ],
    "healthChecks": [
     "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/healthChecks/hc-http-80"
    ],
    "loadBalancingScheme": "INTERNAL",
    "protocol": "UDP",
    "connectionDraining": {
     "drainingTimeoutSec": 0
    }
    }
    
  2. כדי ליצור את כלל ההעברה, שולחים בקשת POST אל ה-method‏ forwardingRules.insert:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules
    
    {
    "name": "fr-ilb-udp",
    "IPAddress": "internal-lb-ipv4",
    "IPProtocol": "UDP",
    "ports": [
     "53"
    ],
    "loadBalancingScheme": "INTERNAL",
    "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb-udp",
    "networkTier": "PREMIUM"
    }
    

יצירת מאזן העומסים השלישי

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

gcloud

יוצרים את כלל ההעברה עם הפרוטוקול שמוגדר ל-L3_DEFAULT כדי לטפל בכל תעבורת הפרוטוקול הנתמכת האחרת של IPv4. משתמשים בכתובת ה-IP הפנימית הסטטית השמורה (internal-lb-ipv4) ככתובת ה-IP הפנימית.

gcloud compute forwarding-rules create fr-ilb-l3-default \
    --region=us-west1 \
    --load-balancing-scheme=internal \
    --network=lb-network \
    --subnet=lb-subnet \
    --address=internal-lb-ipv4 \
    --ip-protocol=L3_DEFAULT \
    --ports=ALL \
    --backend-service=be-ilb-l3-default \
    --backend-service-region=us-west1

API

כדי ליצור את כלל ההעברה, שולחים בקשת POST אל ה-method‏ forwardingRules.insert. מחליפים את PROJECT_ID במזהה שלGoogle Cloud הפרויקט.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules

{
"name": "fr-ilb-l3-default",
"IPAddress": "internal-lb-ipv4",
"IPProtocol": "L3_DEFAULT",
"ports": [
  "ALL"
],
"loadBalancingScheme": "INTERNAL",
"subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
"network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
"backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb-l3-default",
"networkTier": "PREMIUM"
}

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

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

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