במדריך הזה אנחנו משתמשים בדוגמה כדי ללמד אתכם את היסודות של Google Cloud מאזני עומסי רשת פנימיים להעברת סיגנל ללא שינוי. לפני שממשיכים במדריך הזה, כדאי להכיר את המושגים הבאים:
- מושגים שקשורים למאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי
- איך פועלים מאזני עומסי רשת פנימיים להעברת סיגנל ללא שינוי
- סקירה כללית על כללי חומת אש
- מושגים שקשורים לבדיקות תקינות
לחצו על תראו לי איך כדי לקרוא הסבר מפורט על המשימה ישירות במסוף Google Cloud :
הרשאות
כדי לפעול לפי המדריך הזה, צריך ליצור מופעים ולשנות רשת בפרויקט. צריכות להיות לכם הרשאות בעלים או עריכה בפרויקט, או שיוקצו לכם כל תפקידי ה-IAM הבאים ב-Compute Engine:
| משימה | התפקיד הנדרש |
|---|---|
| יצירת רשתות, רשתות משנה ורכיבים של מאזן עומסים | אדמין ברשת Compute ( roles/compute.networkAdmin)
|
| הוספה והסרה של כללים לחומת האש | אדמין לענייני אבטחה ב-Compute ( roles/compute.securityAdmin)
|
| יצירת מופעים | אדמין מכונות של Compute ( roles/compute.instanceAdmin)
|
מידע נוסף זמין במדריכים הבאים:
הגדרת מאזן עומסים עם רשתות משנה ושרתי בק-אנד מסוג IPv4 בלבד
במדריך הזה מוסבר איך להגדיר ולבדוק מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי. בשלבים שבקטע הזה מוסבר איך להגדיר את הדברים הבאים:
- דוגמה לשימוש ברשת VPC במצב מותאם אישית בשם
lb-network. - תת-רשת single-stack (הערך של
stack-typeמוגדר ל-IPv4), שנדרשת לתנועת נתונים ב-IPv4. כשיוצרים רשת משנה עם מחסנית אחת ברשת VPC במצב מותאם אישית, בוחרים טווח של רשת משנה IPv4 לרשת המשנה. - כללי חומת אש שמאפשרים חיבורים נכנסים למכונות וירטואליות (VM) של שרתים עורפיים.
- קבוצת המכונות העורפיות, שנמצאת באזור ובתת-הרשת הבאים בדוגמה הזו:
- אזור:
us-west1 - תת-רשת:
lb-subnet, עם טווח כתובות IPv4 ראשי10.1.2.0/24.
- אזור:
- ארבע מכונות וירטואליות בבק-אנד: שתי מכונות וירטואליות בקבוצת מכונות לא מנוהלת בתחום
us-west1-aושתי מכונות וירטואליות בקבוצת מכונות לא מנוהלת בתחוםus-west1-c. כדי להדגים גישה גלובלית, בדוגמה הזו נוצרת מכונת VM שנייה של לקוח לבדיקה באזור ובתת-רשת שונים:- אזור:
europe-west1 - רשת משנה:
europe-subnet, עם טווח כתובות IP ראשי10.3.4.0/24
- אזור:
- מכונת VM של לקוח אחת לבדיקת חיבורים.
- הרכיבים הבאים של מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי:
- בדיקת תקינות של שירות הקצה העורפי.
- שירות פנימי לקצה עורפי באזור
us-west1לניהול חלוקת החיבורים לשתי קבוצות של מופעי מכונה אזוריים. - כלל העברה פנימי וכתובת IP פנימית לחלק הקדמי של מאזן העומסים.
הארכיטקטורה של הדוגמה הזו נראית כך:
הגדרת רשת, אזור ורשת משנה
כדי ליצור את הרשת ואת רשת המשנה לדוגמה, פועלים לפי השלבים הבאים.
המסוף
נכנסים לדף VPC networks במסוף Google Cloud .
לוחצים על יצירת רשת VPC.
בשדה Name (שם), מזינים
lb-network.בקטע Subnets (רשתות משנה), מבצעים את הפעולות הבאות:
- מגדירים את מצב יצירת רשתות משנה לבהתאמה אישית.
- בקטע New subnet (רשת משנה חדשה), מזינים את הפרטים הבאים:
- Name (שם):
lb-subnet - אזור:
us-west1 - סוג מחסנית פרוטוקולי IP: IPv4 (מחסנית יחידה)
- טווח כתובות IP:
10.1.2.0/24
- Name (שם):
- לוחצים על סיום.
- לוחצים על הוספת רשת משנה ומזינים את הפרטים הבאים:
- Name (שם):
europe-subnet - אזור:
europe-west1 - סוג מחסנית פרוטוקולי IP: IPv4 (מחסנית יחידה)
- טווח כתובות IP:
10.3.4.0/24
- Name (שם):
- לוחצים על סיום.
לוחצים על יצירה.
gcloud
יוצרים את רשת ה-VPC המותאמת אישית:
gcloud compute networks create lb-network --subnet-mode=custom
ברשת
lb-network, יוצרים רשת משנה לשרתי קצה באזורus-west1:gcloud compute networks subnets create lb-subnet \ --network=lb-network \ --range=10.1.2.0/24 \ --region=us-west1ברשת
lb-network, יוצרים רשת משנה נוספת לבדיקת גישה גלובלית באזורeurope-west1:gcloud compute networks subnets create europe-subnet \ --network=lb-network \ --range=10.3.4.0/24 \ --region=europe-west1
API
שולחים בקשת POST אל ה-method networks.insert.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks
{
"routingConfig": {
"routingMode": "REGIONAL"
},
"name": "lb-network",
"autoCreateSubnetworks": false
}
שולחים שתי בקשות 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
}
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/europe-west1/subnetworks
{
"name": "europe-subnet",
"network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
"ipCidrRange": "10.3.4.0/24",
"privateIpGoogleAccess": false
}
הגדרת כללים לחומת אש
בדוגמה הזו נעשה שימוש בכללים הבאים של חומת האש:
fw-allow-lb-access: כלל כניסה (ingress) שחל על כל היעדים ברשת ה-VPC, ומאפשר תעבורה ממקורות בטווחים10.1.2.0/24ו-10.3.4.0/24. הכלל הזה מאפשר תנועה נכנסת מכל לקוח שנמצא באחת משתי רשתות המשנה. בהמשך תוכלו להגדיר ולבדוק גישה גלובלית.
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כדי לזהות את המופעים שבהם הכלל צריך לחול.
בלי כללי חומת האש האלה, הכלל default deny ingress חוסם תנועה נכנסת למופעי ה-Backend.
המסוף
נכנסים לדף Firewall policies במסוף Google Cloud .
כדי לאפשר תעבורת נתונים ברשת משנה, לוחצים על יצירת כלל חומת אש ומזינים את הפרטים הבאים:
- Name (שם):
fw-allow-lb-access - רשת:
lb-network - עדיפות:
1000 - כיוון התנועה: תעבורת נתונים נכנסת (ingress)
- פעולה במקרה של התאמה: אישור
- יעדים: כל המופעים ברשת
- מסנן מקור: טווחים של IPv4
- טווחים של כתובות IPv4 של המקור:
10.1.2.0/24 - פרוטוקולים ויציאות: אישור הכול
- Name (שם):
לוחצים על יצירה.
כדי לאפשר חיבורי SSH נכנסים, לוחצים שוב על יצירת כלל חומת אש ומזינים את הפרטים הבאים:
- Name (שם):
fw-allow-ssh - רשת:
lb-network - עדיפות:
1000 - כיוון התנועה: תעבורת נתונים נכנסת (ingress)
- פעולה במקרה של התאמה: אישור
- יעדים: תגי יעד שצוינו
- תגי טירגוט:
allow-ssh - מסנן מקור: טווחים של IPv4
- טווחים של כתובות IPv4 של המקור:
0.0.0.0/0 - פרוטוקולים ויציאות: בוחרים באפשרות פרוטוקולים ויציאות שצוינו, מסמנים את תיבת הסימון TCP ומזינים
22ביציאות.
- Name (שם):
לוחצים על יצירה.
כדי לאפשר Google Cloud בדיקות תקינות, לוחצים על יצירת כלל חומת אש בפעם השלישית ומזינים את הפרטים הבאים:
- Name (שם):
fw-allow-health-check - רשת:
lb-network - עדיפות:
1000 - כיוון התנועה: תעבורת נתונים נכנסת (ingress)
- פעולה במקרה של התאמה: אישור
- יעדים: תגי יעד שצוינו
- תגי טירגוט:
allow-health-check - מסנן מקור: טווחים של IPv4
- טווחי IPv4 של המקור:
130.211.0.0/22ו-35.191.0.0/16 - פרוטוקולים ויציאות: אישור הכול
- Name (שם):
לוחצים על יצירה.
gcloud
יוצרים את כלל חומת האש
fw-allow-lb-accessכדי לאפשר תקשורת מתוך תת-הרשת:gcloud compute firewall-rules create fw-allow-lb-access \ --network=lb-network \ --action=allow \ --direction=ingress \ --source-ranges=10.1.2.0/24,10.3.4.0/24 \ --rules=tcp,udp,icmpיוצרים את כלל חומת האש
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יוצרים את הכלל
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
API
כדי ליצור את הכלל של חומת האש fw-allow-lb-access, שולחים בקשת POST אל ה-method firewalls.insert.
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", "10.3.4.0/24"
],
"allowed": [
{
"IPProtocol": "tcp"
},
{
"IPProtocol": "udp"
},
{
"IPProtocol": "icmp"
}
],
"direction": "INGRESS",
"logConfig": {
"enable": false
},
"disabled": false
}
כדי ליצור את הכלל של חומת האש 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
}
כדי ליצור את הכלל של חומת האש 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
}
יצירת מכונות וירטואליות בעורף וקבוצות של מופעים
בדוגמה הזו יש שתי קבוצות של מופעי מכונה לא מנוהלים, ולכל אחת מהן יש שני מכונות וירטואליות של קצה עורפי (שרת). כדי להדגים את האופי האזורי של מאזני עומסי רשת פנימיים להעברת סיגנל ללא שינוי, שתי קבוצות המופעים ממוקמות באזורים נפרדים, us-west1-a ו-us-west1-c.
- קבוצת המופעים
ig-aמכילה את שתי המכונות הווירטואליות האלה:vm-a1vm-a2
- קבוצת המופעים
ig-cמכילה את שתי המכונות הווירטואליות האלה:vm-c1vm-c2
התנועה לכל ארבעת מכונות ה-VM בקצה העורפי מאוזנת.
כדי לתמוך בדוגמה הזו ובאפשרויות ההגדרה הנוספות, כל אחת מארבע המכונות הווירטואליות מריצה שרת אינטרנט של Apache שמקשיב ליציאות ה-TCP הבאות: 80, 8008, 8080, 8088, 443 ו-8443.
לכל מכונה וירטואלית מוקצית כתובת IP פנימית בפורמט lb-subnet וכתובת IP חיצונית (ציבורית) זמנית. אפשר להסיר את כתובות ה-IP החיצוניות בהמשך.
לא נדרשות כתובות IP חיצוניות למכונות הווירטואליות של ה-Backend, אבל הן שימושיות בדוגמה הזו כי הן מאפשרות למכונות הווירטואליות של ה-Backend להוריד את Apache מהאינטרנט, והן יכולות להתחבר באמצעות SSH.
כברירת מחדל, Apache מוגדר להתחבר לכל כתובת IP. מאזני עומסי רשת פנימיים להעברת סיגנל ללא שינוי מעבירים מנות תוך שמירה על כתובת ה-IP של היעד. מוודאים שתוכנת השרת שפועלת במכונות הווירטואליות של הקצה העורפי מאזינה לכתובת ה-IP של כלל ההעברה הפנימי של מאזן העומסים. אם מגדירים כמה כללי העברה פנימיים, צריך לוודא שהתוכנה מאזינה לכתובת ה-IP הפנימית שמשויכת לכל אחד מהם. כתובת ה-IP של היעד של חבילת נתונים שמועברת למכונה וירטואלית (VM) בקצה העורפי על ידי מאזן עומסי רשת פנימי מסוג העברת סיגנל ללא שינוי היא כתובת ה-IP הפנימית של כלל ההעברה.
כדי לפשט את ההוראות, מכונות ה-VM של ה-Backend פועלות ב-Debian GNU/Linux 12.
המסוף
יצירת מכונות וירטואליות של קצה עורפי
נכנסים לדף VM instances במסוף Google Cloud .
חוזרים על שלבים 3 עד 8 לכל מכונה וירטואלית, ומשתמשים בשילובים הבאים של שם ואזור.
- שם:
vm-a1, אזור:us-west1-a - שם:
vm-a2, אזור:us-west1-a - שם:
vm-c1, אזור:us-west1-c - שם:
vm-c2, אזור:us-west1-c
- שם:
לוחצים על Create instance.
מגדירים את השם כמו שמופיע בשלב 2.
בשדה Region, בוחרים
us-west1, ובשדה Zone, בוחרים אזור כמו שמוסבר בשלב 2.בקטע Boot disk מוודאים שהאפשרות Debian GNU/Linux 12 (bookworm) מסומנת באפשרויות של דיסק האתחול. אם צריך, לוחצים על שינוי כדי לשנות את התמונה.
לוחצים על אפשרויות מתקדמות.
לוחצים על Networking ומגדירים את השדות הבאים:
- בשדה Network tags (תגי רשת), מזינים את הערכים
allow-sshו-allow-health-check. - בקטע Network interfaces (ממשקי רשת), בוחרים באפשרויות הבאות:
- רשת:
lb-network - Subnet:
lb-subnet - סוג מחסנית פרוטוקולי IP: IPv4 (מחסנית יחידה)
- כתובת IPv4 פנימית ראשית: זמנית (אוטומטית)
- כתובת IPv4 חיצונית: זמנית
- רשת:
- בשדה Network tags (תגי רשת), מזינים את הערכים
לוחצים על ניהול, ואז בשדה סקריפט לטעינה בזמן ההפעלה מזינים את הסקריפט הבא. התוכן של הסקריפט זהה בכל ארבעת המכונות הווירטואליות.
#! /bin/bash if [ -f /etc/startup_script_completed ]; then exit 0 fi apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl file_ports="/etc/apache2/ports.conf" file_http_site="/etc/apache2/sites-available/000-default.conf" file_https_site="/etc/apache2/sites-available/default-ssl.conf" http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088" http_vh_prts="*:80 *:8008 *:8080 *:8088" https_listen_prts="Listen 443\nListen 8443" https_vh_prts="*:443 *:8443" 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 prt_conf="$(cat "$file_ports")" prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")" prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")" echo "$prt_conf" | tee "$file_ports" http_site_conf="$(cat "$file_http_site")" http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")" echo "$http_site_conf_2" | tee "$file_http_site" https_site_conf="$(cat "$file_https_site")" https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")" echo "$https_site_conf_2" | tee "$file_https_site" systemctl restart apache2 touch /etc/startup_script_completedלוחצים על יצירה.
יצירת קבוצות של מכונות וירטואליות
נכנסים לדף Instance groups במסוף Google Cloud .
כדי ליצור שתי קבוצות של מכונות וירטואליות לא מנוהלות, שבכל אחת מהן יש שתי מכונות וירטואליות, חוזרים על השלבים הבאים ומשתמשים בשילובים האלה.
- שם קבוצת המופעים:
ig-a, אזור:us-west1-a, מכונות וירטואליות:vm-a1ו-vm-a2 - שם קבוצת המופעים:
ig-c, אזור:us-west1-c, מכונות וירטואליות:vm-c1ו-vm-c2
- שם קבוצת המופעים:
לוחצים על יצירת קבוצת מופעים.
לוחצים על קבוצת מופעים חדשה לא מנוהלת.
מגדירים את השם כמו שמוסבר בשלב 2.
בקטע Location, בוחרים באפשרות
us-west1בשדה Region, ואז בוחרים Zone כמו שמוסבר בשלב 2.בקטע רשת, בוחרים באפשרות
lb-network.בשדה Subnetwork, בוחרים באפשרות
lb-subnet.בקטע VM instances, מוסיפים את המכונות הווירטואליות כמו שמוסבר בשלב 2.
לוחצים על יצירה.
gcloud
כדי ליצור את ארבע מכונות ה-VM, מריצים את הפקודה הבאה ארבע פעמים, ומשתמשים בארבעת השילובים האלה עבור
[VM-NAME]ו-[ZONE]. תוכן הסקריפט זהה בכל ארבע המכונות הווירטואליות.VM-NAME:vm-a1,ZONE:us-west1-aVM-NAME:vm-a2,ZONE:us-west1-aVM-NAME:vm-c1,ZONE:us-west1-cVM-NAME:vm-c2,ZONE:us-west1-c
gcloud compute instances create VM-NAME \ --zone=ZONE \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh,allow-health-check \ --subnet=lb-subnet \ --metadata=startup-script='#! /bin/bash if [ -f /etc/startup_script_completed ]; then exit 0 fi apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl file_ports="/etc/apache2/ports.conf" file_http_site="/etc/apache2/sites-available/000-default.conf" file_https_site="/etc/apache2/sites-available/default-ssl.conf" http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088" http_vh_prts="*:80 *:8008 *:8080 *:8088" https_listen_prts="Listen 443\nListen 8443" https_vh_prts="*:443 *:8443" 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 prt_conf="$(cat "$file_ports")" prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")" prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")" echo "$prt_conf" | tee "$file_ports" http_site_conf="$(cat "$file_http_site")" http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")" echo "$http_site_conf_2" | tee "$file_http_site" https_site_conf="$(cat "$file_https_site")" https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")" echo "$https_site_conf_2" | tee "$file_https_site" systemctl restart apache2 touch /etc/startup_script_completed'יוצרים את שתי הקבוצות של מופעי מכונה לא מנוהלים בכל אזור:
gcloud compute instance-groups unmanaged create ig-a \ --zone=us-west1-a gcloud compute instance-groups unmanaged create ig-c \ --zone=us-west1-cמוסיפים את המכונות הווירטואליות לקבוצות המופעים המתאימות:
gcloud compute instance-groups unmanaged add-instances ig-a \ --zone=us-west1-a \ --instances=vm-a1,vm-a2 gcloud compute instance-groups unmanaged add-instances ig-c \ --zone=us-west1-c \ --instances=vm-c1,vm-c2
API
למכונות הווירטואליות, משתמשים בשמות ובאזורים הבאים:
VM-NAME:vm-a1,ZONE:us-west1-aVM-NAME:vm-a2,ZONE:us-west1-aVM-NAME:vm-c1,ZONE:us-west1-cVM-NAME:vm-c2,ZONE:us-west1-c
כדי לקבל את הגרסה הנוכחית של DEBIAN_IMAGE_NAME, מריצים את הפקודה הבאה של gcloud:
gcloud compute images list \ --filter="family=debian-12"
יוצרים ארבע מכונות וירטואליות (VM) בעורף על ידי שליחת ארבע בקשות POST ל-method instances.insert:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
{
"name": "VM-NAME",
"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": [
{
"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-NAME",
"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\nfile_ports=\"/etc/apache2/ports.conf\"\nfile_http_site=\"/etc/apache2/sites-available/000-default.conf\"\nfile_https_site=\"/etc/apache2/sites-available/default-ssl.conf\"\nhttp_listen_prts=\"Listen 80\\nListen 8008\\nListen 8080\\nListen 8088\"\nhttp_vh_prts=\"*:80 *:8008 *:8080 *:8088\"\nhttps_listen_prts=\"Listen 443\\nListen 8443\"\nhttps_vh_prts=\"*:443 *:8443\"\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\nprt_conf=\"$(cat \"$file_ports\")\"\nprt_conf_2=\"$(echo \"$prt_conf\" | sed \"s|Listen 80|${http_listen_prts}|\")\"\nprt_conf=\"$(echo \"$prt_conf_2\" | sed \"s|Listen 443|${https_listen_prts}|\")\"\necho \"$prt_conf\" | tee \"$file_ports\"\nhttp_site_conf=\"$(cat \"$file_http_site\")\"\nhttp_site_conf_2=\"$(echo \"$http_site_conf\" | sed \"s|*:80|${http_vh_prts}|\")\"\necho \"$http_site_conf_2\" | tee \"$file_http_site\"\nhttps_site_conf=\"$(cat \"$file_https_site\")\"\nhttps_site_conf_2=\"$(echo \"$https_site_conf\" | sed \"s|_default_:443|${https_vh_prts}|\")\"\necho \"$https_site_conf_2\" | tee \"$file_https_site\"\nsystemctl restart apache2"
}
]
},
"scheduling": {
"preemptible": false
},
"deletionProtection": false
}
כדי ליצור שתי קבוצות של מופעי מכונה, שולחים בקשת 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"
}
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups
{
"name": "ig-c",
"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"
}
כדי להוסיף מכונות לכל קבוצת מכונות, שולחים בקשת 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",
"instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a2"
}
]
}
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups/ig-c/addInstances
{
"instances": [
{
"instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instances/vm-c1",
"instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instances/vm-c2"
}
]
}
הגדרת רכיבים של מאזן עומסים
בשלבים האלה מוגדרים כל הרכיבים הפנימיים של מאזן עומסי רשת מסוג העברת סיגנל ללא שינוי, החל מבדיקת תקינות ושירות לקצה העורפי, ולאחר מכן הרכיבים של הקצה הקדמי:
בדיקת תקינות. בדוגמה הזו, משתמשים בבדיקת תקינות של HTTP שבודקת קוד סטטוס של HTTP
200 OK. מידע נוסף זמין בקטע בדיקת תקינות.שירות לקצה העורפי. מכיוון שצריך להעביר תנועת HTTP דרך מאזן העומסים הפנימי, צריך להשתמש ב-TCP ולא ב-UDP.
כלל העברה. בדוגמה הזו נוצר כלל העברה פנימי יחיד.
כתובת IP פנימית. בדוגמה הזו, מציינים כתובת IP פנימית,
10.1.2.99, כשיוצרים את כלל ההעברה.
המסוף
התחלת ההגדרה
נכנסים לדף Load balancing במסוף Google Cloud .
- לוחצים על Create load balancer (יצירת מאזן עומסים).
- בקטע Type of load balancer (סוג מאזן העומסים), בוחרים באפשרות Network Load Balancer (TCP/UDP/SSL) (מאזן עומסים ברשת (TCP/UDP/SSL)) ולוחצים על Next (הבא).
- בקטע Proxy or passthrough (פרוקסי או העברה), בוחרים באפשרות Passthrough load balancer (מאזן עומסים להעברה) ולוחצים על Next (הבא).
- בקטע גלוי לכולם או פנימי, בוחרים באפשרות פנימי ולוחצים על הבא.
- לוחצים על Configure (הגדרה).
הגדרה בסיסית
בדף Create internal passthrough Network Load Balancer (יצירת מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי), מזינים את הפרטים הבאים:
- שם של מאזן עומסים:
be-ilb - אזור:
us-west1 - רשת:
lb-network
הגדרת הקצוות העורפיים
- לוחצים על Backend configuration.
ברשימה בדיקת תקינות, לוחצים על יצירת בדיקת תקינות ומזינים את הפרטים הבאים.
- שם:
hc-http-80 - פרוטוקול: HTTP
- יציאה:
80 - פרוטוקול proxy: ללא
- בקשה:
/
שימו לב: כשמשתמשים במסוף Google Cloud כדי ליצור מאזן עומסים, בדיקת התקינות היא גלובלית. אם רוצים ליצור בדיקת תקינות אזורית, משתמשים ב-
gcloudאו ב-API.- שם:
לוחצים על יצירה.
כדי לטפל בתנועה של IPv4 בלבד, בקטע New Backend, בשדה IP stack type, בוחרים באפשרות IPv4 (single-stack).
ברשימה Instance group, בוחרים את קבוצת המכונות
ig-cולוחצים על Done.לוחצים על הוספת קצה עורפי וחוזרים על השלב כדי להוסיף את קבוצת המופעים
ig-a.לפני שממשיכים, מוודאים שלצד הגדרות ה-Backend מופיע סימן וי כחול.
הגדרת הקצה הקדמי
- לוחצים על Frontend configuration.
- בקטע New Frontend IP and port, מבצעים את הפעולות הבאות:
- בשדה Name (שם), מזינים
fr-ilb. - בשדה רשת משנה, בוחרים באפשרות
lb-subnet. - בקטע Internal IP purpose, ברשימה IP address, בוחרים באפשרות Create IP address, מזינים את הפרטים הבאים ולוחצים על Reserve.
- שם:
ip-ilb - IP version: IPv4
- כתובת IP סטטית: אני רוצה לבחור
- כתובת IP מותאמת אישית:
10.1.2.99
- שם:
- בקטע יציאות, בוחרים באפשרות כמה ואז בשדה מספרי יציאות מזינים
80,8008,8080ו-8088. - לפני שממשיכים, מוודאים שלצד Frontend configuration מופיע סימן וי כחול.
- בשדה Name (שם), מזינים
בדיקת ההגדרות האישיות
- לוחצים על Review and finalize.
- בודקים את הגדרות ההגדרה של מאזן העומסים.
- אופציונלי: לוחצים על Equivalent code (קוד מקביל) כדי לראות את בקשת API בארכיטקטורת REST שתשמש ליצירת מאזן העומסים.
- לוחצים על יצירה.
gcloud
יוצרים בדיקת תקינות חדשה של HTTP ברמה האזורית כדי לבדוק את הקישוריות של HTTP למכונות הווירטואליות ביציאה 80.
gcloud compute health-checks create http hc-http-80 \ --region=us-west1 \ --port=80יוצרים את שירות הקצה העורפי לתנועת HTTP:
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מוסיפים את שתי קבוצות המופעים לשירות ה-Backend:
gcloud compute backend-services add-backend be-ilb \ --region=us-west1 \ --instance-group=ig-a \ --instance-group-zone=us-west1-a gcloud compute backend-services add-backend be-ilb \ --region=us-west1 \ --instance-group=ig-c \ --instance-group-zone=us-west1-cיוצרים כלל העברה לשירות לקצה העורפי. כשיוצרים את כלל ההעברה, מציינים
10.1.2.99לכתובת ה-IP הפנימית ברשת המשנה.gcloud compute forwarding-rules create fr-ilb \ --region=us-west1 \ --load-balancing-scheme=internal \ --network=lb-network \ --subnet=lb-subnet \ --address=10.1.2.99 \ --ip-protocol=TCP \ --ports=80,8008,8080,8088 \ --backend-service=be-ilb \ --backend-service-region=us-west1
API
כדי ליצור את בדיקת תקינות, שולחים בקשת POST אל ה-method regionHealthChecks.insert.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/regionHealthChecks
{
"name": "hc-http-80",
"type": "HTTP",
"httpHealthCheck": {
"port": 80
}
}
כדי ליצור את השירות לקצה עורפי אזורי, שולחים בקשת POST אל ה-method regionBackendServices.insert.
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"
},
{
"group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups/ig-c",
"balancingMode": "CONNECTION"
}
],
"healthChecks": [
"https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/healthChecks/hc-http-80"
],
"loadBalancingScheme": "INTERNAL",
"connectionDraining": {
"drainingTimeoutSec": 0
}
}
כדי ליצור את כלל ההעברה, שולחים בקשת POST אל ה-method forwardingRules.insert.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules
{
"name": "fr-ilb",
"IPAddress": "10.1.2.99",
"IPProtocol": "TCP",
"ports": [
"80", "8008", "8080", "8088"
],
"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"
}
בדיקת מאזן העומסים
בבדיקות האלה מוסבר איך לאמת את ההגדרה של מאזן העומסים ואיך ללמוד על ההתנהגות הצפויה שלו.
יצירת מכונה וירטואלית של לקוח
בדוגמה הזו נוצרת מכונה וירטואלית של לקוח (vm-client) באותו אזור שבו נמצאות המכונות הווירטואליות של השרת (בק-אנד). הלקוח משמש לאימות ההגדרה של מאזן העומסים ולהדגמת ההתנהגות הצפויה כפי שמתואר בקטע בדיקה.
המסוף
נכנסים לדף VM instances במסוף Google Cloud .
לוחצים על Create instance.
בשדה Name (שם), מזינים
vm-client.בשדה אזור, בוחרים באפשרות
us-west1.בשדה Zone, בוחרים באפשרות
us-west1-a.לוחצים על אפשרויות מתקדמות.
לוחצים על Networking ומגדירים את השדות הבאים:
- בשדה Network tags (תגי רשת), מזינים
allow-ssh. - בקטע Network interfaces (ממשקי רשת), בוחרים באפשרויות הבאות:
- רשת:
lb-network - Subnet:
lb-subnet
- רשת:
- בשדה Network tags (תגי רשת), מזינים
לוחצים על יצירה.
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.
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
}
בדיקת החיבור ממכונה וירטואלית של לקוח
בבדיקה הזו מתבצעת פנייה למאזן העומסים ממכונה וירטואלית נפרדת של לקוח, כלומר לא ממכונה וירטואלית של קצה עורפי ששייכת למאזן העומסים. ההתנהגות הצפויה היא שהטראפיק יתחלק בין ארבע המכונות הווירטואליות של השרת העורפי כי לא הוגדרה זיקה לסשן.
מתחברים למופע ה-VM של הלקוח.
gcloud compute ssh vm-client --zone=us-west1-a
שולחים בקשת אינטרנט למאזן העומסים באמצעות
curlכדי ליצור קשר עם כתובת ה-IP שלו. חוזרים על הבקשה כדי לראות שהתשובות מגיעות ממכונות וירטואליות שונות בעורף. שם המכונה הווירטואלית שמייצרת את התגובה מוצג בטקסט בתגובת ה-HTML, בהתאם לתוכן של/var/www/html/index.htmlבכל מכונה וירטואלית של השרת העורפי. לדוגמה, תשובות צפויות נראות כך:Page served from: vm-a1ו-Page served from: vm-a2.curl http://10.1.2.99
כלל ההעברה מוגדר להעברת נתונים ביציאות
80,8008,8080ו-8088. כדי לשלוח תנועה ליציאות האחרות האלה, מוסיפים נקודתיים (:) ואת מספר היציאה אחרי כתובת ה-IP, כך:curl http://10.1.2.99:8008
אם מוסיפים תווית שירות לכלל ההעברה הפנימית, אפשר להשתמש ב-DNS פנימי כדי ליצור קשר עם מאזן העומסים באמצעות שם השירות שלו.
curl http://web-test.fr-ilb.il4.us-west1.lb.PROJECT_ID.internal
ביצוע פינג לכתובת ה-IP של מאזן העומסים
הבדיקה הזו מדגימה התנהגות צפויה: אי אפשר לבצע פינג לכתובת ה-IP של מאזן העומסים. הסיבה לכך היא שמאזני עומסי רשת פנימיים להעברת סיגנל ללא שינוי מיושמים בתכנות של רשת וירטואלית – הם לא מכשירים נפרדים.
מתחברים למופע ה-VM של הלקוח.
gcloud compute ssh vm-client --zone=us-west1-a
מנסים לשלוח פינג לכתובת ה-IP של מאזן העומסים. שימו לב שלא מתקבלת תשובה, ושהפקודה
pingמגיעה לזמן קצוב לתפוגה אחרי 10 שניות בדוגמה הזו.timeout 10 ping 10.1.2.99
שליחת בקשות ממכונות וירטואליות עם איזון עומסים
הבדיקה הזו מדגימה שכאשר מכונת VM של בק-אנד שולחת חבילות לכתובת ה-IP של כלל ההעברה של מאזן העומסים שלה, הבקשות האלה מנותבות חזרה אל עצמה. זה קורה ללא קשר למצב בדיקת התקינות של המכונה הווירטואלית בעורף.
מאזני עומסים פנימיים של רשת להעברת סיגנל ללא שינוי מיושמים באמצעות תכנות של רשת וירטואלית והגדרת מכונה וירטואלית במערכת ההפעלה של האורח. במכונות וירטואליות של Linux, סביבת האורח יוצרת נתיב לכתובת ה-IP של איזון העומסים בטבלת הניתוב המקומית של מערכת ההפעלה.
מכיוון שהנתיב המקומי הזה נמצא בתוך המכונה הווירטואלית עצמה (ולא בנתיב ברשת ה-VPC), חבילות שנשלחות לכתובת ה-IP של מאזן העומסים לא מעובדות על ידי רשת ה-VPC. במקום זאת, מנות שנשלחות לכתובת ה-IP של איזון העומסים נשארות במערכת ההפעלה של המכונה הווירטואלית.
מתחברים למכונת VM של בק-אנד, כמו
vm-a1:gcloud compute ssh vm-a1 --zone=us-west1-a
שולחים בקשת אינטרנט למאזן העומסים (לפי כתובת IP או שם שירות) באמצעות
curl. התשובה מגיעה מאותה מכונה וירטואלית בעורף המערכת ששולחת את הבקשה. תשובות חוזרות ונשנות לבקשות זהות. התגובה הצפויה כשבודקים מ-vm-a1היא תמידPage served from: vm-a1.curl http://10.1.2.99
בודקים את טבלת הניתוב המקומית ומחפשים יעד שתואם לכתובת ה-IP של מאזן העומסים עצמו,
10.1.2.99. הנתיב הזה הוא חלק חיוני במאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי, אבל הוא גם מדגים למה בקשה ממכונה וירטואלית מאחורי מאזן העומסים תמיד מקבלת תגובה מאותה מכונה וירטואלית.ip route show table local | grep 10.1.2.99
כשמכונה וירטואלית של בק-אנד במאזן עומסי רשת פנימי מסוג passthrough שולחת חבילות לכתובת ה-IP של כלל ההעברה של מאזן העומסים, החבילות תמיד מנותבות חזרה למכונה הווירטואלית ששולחת את הבקשה. הסיבה לכך היא שמאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי הוא מאזן עומסים להעברת סיגנל ללא שינוי, והוא מיושם על ידי יצירת נתיב מקומי לכתובת ה-IP של מאזן העומסים במערכת ההפעלה של האורח במכונה הווירטואלית, כפי שמצוין בקטע הזה. אם יש לכם תרחיש שימוש שבו בק-אנד עם איזון עומסים צריך לשלוח תנועת TCP לכתובת ה-IP של מאזן העומסים, ואתם רוצים שהתנועה תתחלק כאילו היא הגיעה מבק-אנד ללא איזון עומסים, כדאי להשתמש במקום זאת במאזן עומסי רשת פנימי אזורי.
מידע נוסף זמין במאמר בנושא מאזני עומסי רשת פנימיים להעברת סיגנל ללא שינוי כנקודות מעבר הבאות.
הגדרת מאזן עומסים עם רשתות משנה וקצוות עורפיים בתצורת dual-stack
במאמר הזה מוסבר איך להגדיר ולבדוק מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי שתומך בתנועת IPv4 ובתנועת IPv6. בשלבים שבקטע הזה מוסבר איך להגדיר את הפריטים הבאים:
- בדוגמה שבדף הזה נעשה שימוש ברשת VPC במצב מותאם אישית בשם
lb-network-dual-stack. תנועה של IPv6 דורשת רשת משנה במצב מותאם אישית. - תת-רשת dual-stack (
stack-typeמוגדר ל-IPV4_IPV6), שנדרשת לתנועה ב-IPv6. כשיוצרים רשת משנה עם פרוטוקול כפול ברשת VPC במצב מותאם אישית, בוחרים סוג גישה ל-IPv6 עבור רשת המשנה. בדוגמה הזו, הגדרנו את הפרמטרipv6-access-typeשל רשת המשנה ל-INTERNAL. המשמעות היא שאפשר להקצות למכונות וירטואליות חדשות ברשת המשנה הזו גם כתובות IPv4 פנימיות וגם כתובות IPv6 פנימיות. הוראות מפורטות זמינות במאמר בנושא הוספת רשת משנה עם תמיכה ב-IPv4 ו-IPv6 במסמכי ה-VPC. - כללי חומת אש שמאפשרים חיבורים נכנסים למכונות וירטואליות של שרתים עורפיים.
- קבוצת המכונות העורפיות, שנמצאת באזור ובתת-הרשת הבאים בדוגמה הזו:
- אזור:
us-west1 - תת-רשת:
lb-subnet, עם טווח כתובות IPv4 ראשי10.1.2.0/24. אתם בוחרים איזה טווח כתובות IPv4 להגדיר בתת-הרשת, אבל טווח כתובות ה-IPv6 מוקצה באופן אוטומטי. Google מספקת בלוק CIDR של IPv6 בגודל קבוע (/64).
- אזור:
- ארבע מכונות וירטואליות בבק-אנד עם תמיכה ב-dual-stack: שתי מכונות וירטואליות בקבוצת מכונות לא מנוהלת בתחום
us-west1-aושתי מכונות וירטואליות בקבוצת מכונות לא מנוהלת בתחוםus-west1-c. כדי להדגים גישה גלובלית, בדוגמה הזו נוצרת מכונה וירטואלית שנייה של לקוח לבדיקה באזור וברשת משנה שונים:- אזור:
europe-west1 - רשת משנה:
europe-subnet, עם טווח כתובות IP ראשי10.3.4.0/24
- אזור:
- מכונת VM של לקוח אחת לבדיקת חיבורים.
- הרכיבים הבאים של מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי:
- בדיקת תקינות של שירות הקצה העורפי.
- שירות פנימי לקצה עורפי באזור
us-west1לניהול חלוקת החיבורים לשתי קבוצות של מופעי מכונה אזוריים. - שני כללי העברה פנימיים לקצה הקדמי של מאזן העומסים.
התרשים הבא מציג את הארכיטקטורה של הדוגמה הזו:
הגדרת רשת, אזור ורשת משנה
מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי שמתואר בדף הזה נוצר ברשת VPC במצב מותאם אישית בשם lb-network-dual-stack.
כדי להגדיר רשתות משנה עם טווחי IPv6 פנימיים, צריך להפעיל טווח IPv6 פנימי של ULA ברשת VPC. טווחים של רשתות משנה פנימיות של IPv6 מוקצים מתוך הטווח הזה.
המסוף
נכנסים לדף VPC networks במסוף Google Cloud .
לוחצים על יצירת רשת VPC.
בשדה Name (שם), מזינים
lb-network-dual-stack.כדי להגדיר טווחי כתובות IPv6 פנימיות ברשתות משנה ברשת הזו, צריך לבצע את השלבים הבאים:
- בקטע Private IPv6 address settings (הגדרות של כתובות IPv6 פרטיות), בוחרים באפשרות Configure a ULA internal IPv6 range for this VPC Network (הגדרת טווח פנימי של כתובות IPv6 מסוג ULA לרשת ה-VPC הזו).
- בקטע הקצאת טווח פנימי של IPv6, בוחרים באפשרות אוטומטית או ידנית.
אם בוחרים באפשרות Manually, צריך להזין טווח של
/48מתוך הטווחfd20::/20. אם הטווח נמצא בשימוש, תתבקשו לספק טווח אחר.
בקטע Subnet creation mode (מצב יצירת רשת משנה), בוחרים באפשרות Custom (בהתאמה אישית).
בקטע New subnet (רשת משנה חדשה), מציינים את פרמטרי ההגדרה הבאים של רשת משנה:
- Name (שם):
lb-subnet - אזור:
us-west1 - סוג מחסנית IP: IPv4 ו-IPv6 (מחסנית כפולה)
- טווח IPv4:
10.1.2.0/24. - סוג הגישה ל-IPv6: פנימי
- Name (שם):
לוחצים על סיום.
לוחצים על הוספת רשת משנה ומזינים את הפרטים הבאים:
- Name (שם):
europe-subnet - אזור:
europe-west1 - סוג מחסנית פרוטוקולי IP: IPv4 (מחסנית יחידה)
- טווח כתובות IP:
10.3.4.0/24
- Name (שם):
לוחצים על סיום.
לוחצים על יצירה.
gcloud
כדי ליצור רשת VPC חדשה במצב מותאם אישית, מריצים את הפקודה
gcloud compute networks create.כדי להגדיר טווחי IPv6 פנימיים בכל רשת משנה ברשת הזו, משתמשים בדגל
--enable-ula-internal-ipv6. האפשרות הזו מקצה קידומת/48ULA מתוך טווחfd20::/20שמשמש את Google Cloud לטווחים פנימיים של רשתות משנה ב-IPv6. אם רוצים לבחור את טווח ה-IPv6/48שהוקצה, משתמשים בדגל--internal-ipv6-rangeכדי לציין טווח.gcloud compute networks create lb-network-dual-stack \ --subnet-mode=custom \ --enable-ula-internal-ipv6 \ --internal-ipv6-range=ULA_IPV6_RANGE \ --bgp-routing-mode=regional
מחליפים את
ULA_IPV6_RANGEבתחילית/48מתוך טווחfd20::/20שמשמש את Google לטווחים פנימיים של רשתות משנה ב-IPv6. אם לא משתמשים בדגל--internal-ipv6-range, Google בוחרת קידומת/48לרשת, כמוfd20:bc7:9a1c::/48.ברשת
NETWORK, יוצרים רשת משנה עבור שרתים עורפיים באזורus-west1ורשת משנה נוספת לבדיקת גישה גלובלית באזורeurope-west1.כדי ליצור את רשתות המשנה, מריצים את הפקודה
gcloud compute networks subnets create.gcloud compute networks subnets create lb-subnet \ --network=lb-network-dual-stack \ --range=10.1.2.0/24 \ --region=us-west1 \ --stack-type=IPV4_IPV6 \ --ipv6-access-type=INTERNAL
gcloud compute networks subnets create europe-subnet \ --network=lb-network-dual-stack \ --range=10.3.4.0/24 \ --region=europe-west1 \ --stack-type=IPV4_IPV6 \ --ipv6-access-type=INTERNAL
API
יוצרים רשת VPC חדשה במצב מותאם אישית.
כדי להגדיר טווחי IPv6 פנימיים ברשתות משנה ברשת הזו, מגדירים את enableUlaInternalIpv6 כ-true. באפשרות הזו מוקצה טווח /48 מתוך הטווח fd20::/20 שבו Google משתמשת לטווחים פנימיים של רשתות משנה IPv6. אם רוצים לבחור את טווח כתובות ה-IPv6 שיוקצה, צריך להשתמש גם בשדה internalIpv6Range כדי לציין טווח./48
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks
{
"autoCreateSubnetworks": false,
"name": "lb-network-dual-stack",
"mtu": MTU,
"enableUlaInternalIpv6": true,
"internalIpv6Range": "ULA_IPV6_RANGE",
"routingConfig": {
"routingMode": "DYNAMIC_ROUTING_MODE"
}
}
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט שבו נוצרה רשת ה-VPC. -
MTU: יחידת השידור המקסימלית של הרשת. הערך של MTU יכול להיות1460(ברירת מחדל) או1500. לפני שמגדירים את ה-MTU ל-1500, כדאי לעיין בסקירה הכללית על יחידת השידור המקסימלית. -
ULA_IPV6_RANGE: קידומת/48מתוך הטווחfd20::/20שמשמש את Google לטווחים פנימיים של רשתות משנה ב-IPv6. אם לא תציינו ערך ל-internalIpv6Range, Google תבחר קידומת/48לרשת.
DYNAMIC_ROUTING_MODE: globalאוregionalכדי לשלוט בהתנהגות של פרסום ניתוב (route advertisement) של Cloud Routers ברשת. מידע נוסף זמין במאמר בנושא מצב ניתוב דינמי.מידע נוסף זמין במאמר בנושא השיטה
networks.insert.
שולחים שתי בקשות 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-dual-stack",
"name": "lb-subnet"
"stackType": IPV4_IPV6,
"ipv6AccessType": Internal
}
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks
{
"ipCidrRange": "10.3.4.0/24",
"network": "lb-network-dual-stack",
"name": "europe-subnet"
"stackType": IPV4_IPV6,
"ipv6AccessType": Internal
}
הגדרת כללים לחומת אש
בדוגמה הזו נעשה שימוש בכללים הבאים של חומת האש:
fw-allow-lb-access: כלל תעבורה נכנסת שחל על כל היעדים ברשת ה-VPC, שמאפשר תעבורה ממקורות בטווחים10.1.2.0/24ו-10.3.4.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.
המסוף
נכנסים לדף Firewall policies במסוף Google Cloud .
כדי ליצור את כלל חומת האש שיאפשר תנועה ברשת המשנה, לוחצים על יצירת כלל חומת אש ומזינים את הפרטים הבאים:
- Name (שם):
fw-allow-lb-access - רשת:
lb-network-dual-stack - עדיפות:
1000 - כיוון התנועה: תעבורת נתונים נכנסת (ingress)
- פעולה במקרה של התאמה: אישור
- יעדים: כל המופעים ברשת
- מסנן מקור: טווחים של IPv4
- טווחי IPv4 של המקור:
10.1.2.0/24ו-10.3.4.0/24 - פרוטוקולים ויציאות: אישור הכול
- Name (שם):
לוחצים על יצירה.
כדי לאפשר תעבורה של רשת משנה IPv6, לוחצים שוב על יצירת כלל חומת אש ומזינים את הפרטים הבאים:
- Name (שם):
fw-allow-lb-access-ipv6 - רשת:
lb-network-dual-stack - עדיפות:
1000 - כיוון התנועה: תעבורת נתונים נכנסת (ingress)
- פעולה במקרה של התאמה: אישור
- יעדים: כל המופעים ברשת
- מסנן מקור: טווחים של IPv6
- טווחי IPv6 של המקור: IPV6_ADDRESS שהוקצו ב-
lb-subnet - פרוטוקולים ויציאות: אישור הכול
- Name (שם):
לוחצים על יצירה.
כדי לאפשר חיבורי SSH נכנסים, לוחצים שוב על יצירת כלל חומת אש ומזינים את הפרטים הבאים:
- Name (שם):
fw-allow-ssh - רשת:
lb-network-dual-stack - עדיפות:
1000 - כיוון התנועה: תעבורת נתונים נכנסת (ingress)
- פעולה במקרה של התאמה: אישור
- יעדים: תגי יעד שצוינו
- תגי טירגוט:
allow-ssh - מסנן מקור: טווחים של IPv4
- טווחים של כתובות IPv4 של המקור:
0.0.0.0/0 - פרוטוקולים ויציאות: בוחרים באפשרות פרוטוקולים ויציאות שצוינו, מסמנים את תיבת הסימון TCP ומזינים
22ביציאות.
- Name (שם):
לוחצים על יצירה.
כדי לאפשר בדיקות תקינות של Google Cloud IPv6, לוחצים שוב על יצירת כלל חומת אש ומזינים את הפרטים הבאים:
- Name (שם):
fw-allow-health-check-ipv6 - רשת:
lb-network-dual-stack - עדיפות:
1000 - כיוון התנועה: תעבורת נתונים נכנסת (ingress)
- פעולה במקרה של התאמה: אישור
- יעדים: תגי יעד שצוינו
- תגי טירגוט:
allow-health-check-ipv6 - מסנן מקור: טווחים של IPv6
- טווחים של כתובות IPv6 של המקור:
2600:2d00:1:b029::/64 - פרוטוקולים ויציאות: אישור הכול
- Name (שם):
לוחצים על יצירה.
כדי לאפשר בדיקות תקינות, לוחצים שוב על יצירת כלל חומת אש ומזינים את הפרטים הבאים: Google Cloud
- Name (שם):
fw-allow-health-check - רשת:
lb-network-dual-stack - עדיפות:
1000 - כיוון התנועה: תעבורת נתונים נכנסת (ingress)
- פעולה במקרה של התאמה: אישור
- יעדים: תגי יעד שצוינו
- תגי טירגוט:
allow-health-check - מסנן מקור: טווחים של IPv4
- טווחי IPv4 של המקור:
130.211.0.0/22ו-35.191.0.0/16 - פרוטוקולים ויציאות: אישור הכול
- Name (שם):
לוחצים על יצירה.
gcloud
יוצרים את כלל חומת האש
fw-allow-lb-accessכדי לאפשר תקשורת עם תת-הרשת:gcloud compute firewall-rules create fw-allow-lb-access \ --network=lb-network-dual-stack \ --action=allow \ --direction=ingress \ --source-ranges=10.1.2.0/24,10.3.4.0/24 \ --rules=allיוצרים את כלל חומת האש
fw-allow-lb-access-ipv6כדי לאפשר תקשורת עם תת-הרשת:gcloud compute firewall-rules create fw-allow-lb-access-ipv6 \ --network=lb-network-dual-stack \ --action=allow \ --direction=ingress \ --source-ranges=IPV6_ADDRESS \ --rules=allמחליפים את
IPV6_ADDRESSבכתובת ה-IPv6 שהוקצתה ב-lb-subnet.יוצרים את כלל חומת האש
fw-allow-sshכדי לאפשר קישוריות SSH למכונות וירטואליות עם תג הרשתallow-ssh. אם לא מציינים אתsource-ranges,Google Cloud מפרש את הכלל כאילו הוא מתייחס לכל מקור.gcloud compute firewall-rules create fw-allow-ssh \ --network=lb-network-dual-stack \ --action=allow \ --direction=ingress \ --target-tags=allow-ssh \ --rules=tcp:22יוצרים את כלל
fw-allow-health-check-ipv6כדי לאפשר בדיקות תקינות שלGoogle Cloud IPv6.gcloud compute firewall-rules create fw-allow-health-check-ipv6 \ --network=lb-network-dual-stack \ --action=allow \ --direction=ingress \ --target-tags=allow-health-check-ipv6 \ --source-ranges=2600:2d00:1:b029::/64 \ --rules=tcp,udpיוצרים את הכלל
fw-allow-health-checkכדי לאפשר Google Cloudבדיקות תקינות.gcloud compute firewall-rules create fw-allow-health-check \ --network=lb-network-dual-stack \ --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
API
כדי ליצור את הכלל של חומת האש
fw-allow-lb-access, שולחים בקשתPOSTאל ה-methodfirewalls.insert.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-dual-stack", "priority": 1000, "sourceRanges": [ "10.1.2.0/24", "10.3.4.0/24" ], "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" }, { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }כדי ליצור את הכלל של חומת האש
fw-allow-lb-access-ipv6, שולחים בקשתPOSTאל ה-methodfirewalls.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-dual-stack", "priority": 1000, "sourceRanges": [ "IPV6_ADDRESS" ], "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" }, { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }מחליפים את
IPV6_ADDRESSבכתובת IPv6 שהוקצתה ב-lb-subnet.כדי ליצור את הכלל של חומת האש
fw-allow-ssh, שולחים בקשתPOSTאל ה-methodfirewalls.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-dual-stack", "priority": 1000, "sourceRanges": [ "0.0.0.0/0" ], "targetTags": [ "allow-ssh" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }כדי ליצור את הכלל של חומת האש
fw-allow-health-check-ipv6, שולחים בקשתPOSTאל ה-methodfirewalls.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-dual-stack", "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 }כדי ליצור את הכלל של חומת האש
fw-allow-health-check, שולחים בקשתPOSTאל ה-methodfirewalls.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-dual-stack", "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 }
יצירת מכונות וירטואליות בעורף וקבוצות של מופעים
בדוגמה הזו יש שתי קבוצות של מופעי מכונה לא מנוהלים, ולכל אחת מהן יש שני מכונות וירטואליות של קצה עורפי (שרת). כדי להדגים את האופי האזורי של מאזני עומסי רשת פנימיים להעברת סיגנל ללא שינוי, שתי קבוצות המופעים ממוקמות באזורים נפרדים, us-west1-a ו-us-west1-c.
- קבוצת המופעים
ig-aמכילה את שתי המכונות הווירטואליות האלה:vm-a1vm-a2
- קבוצת המופעים
ig-cמכילה את שתי המכונות הווירטואליות האלה:vm-c1vm-c2
התנועה לכל ארבעת מכונות ה-VM בקצה העורפי מאוזנת.
כדי לתמוך בדוגמה הזו ובאפשרויות ההגדרה הנוספות, כל אחת מארבע המכונות הווירטואליות מפעילה שרת אינטרנט של Apache שמקשיב ליציאות ה-TCP הבאות: 80, 8008, 8080, 8088, 443 ו-8443.
לכל מכונה וירטואלית מוקצית כתובת IP פנימית בפורמט lb-subnet וכתובת IP חיצונית (ציבורית) זמנית. אפשר להסיר את כתובות ה-IP החיצוניות בהמשך.
לא נדרשות כתובות IP חיצוניות למכונות הווירטואליות של ה-Backend, אבל הן שימושיות בדוגמה הזו כי הן מאפשרות למכונות הווירטואליות של ה-Backend להוריד את Apache מהאינטרנט, והן יכולות להתחבר באמצעות SSH.
כברירת מחדל, Apache מוגדר להתחבר לכל כתובת IP. מאזני עומסי רשת פנימיים להעברת סיגנל ללא שינוי מעבירים מנות תוך שמירה על כתובת ה-IP של היעד.
מוודאים שתוכנת השרת שפועלת במכונות הווירטואליות של הקצה העורפי מאזינה לכתובת ה-IP של כלל ההעברה הפנימי של מאזן העומסים. אם מגדירים כמה כללי העברה פנימיים, צריך לוודא שהתוכנה מאזינה לכתובת ה-IP הפנימית שמשויכת לכל אחד מהם. כתובת ה-IP של היעד של חבילת נתונים שמועברת למכונה וירטואלית (VM) בקצה העורפי על ידי מאזן עומסי רשת פנימי מסוג העברת סיגנל ללא שינוי היא כתובת ה-IP הפנימית של כלל ההעברה.
אם אתם משתמשים בקבוצות מופעי מכונה מנוהלים, ודאו שסוג מחסנית הרשת המשנית תואם לסוג המחסנית של תבניות הגדרות המכונה שבהן משתמשות קבוצות מופעי המכונה המנוהלים. רשת המשנה צריכה להיות בעלת תמיכה כפולה במצבי פעולה אם קבוצת מופעי מכונה מנוהלים משתמשת בתבנית של הגדרות מכונה עם תמיכה כפולה במצבי פעולה.
כדי לפשט את ההוראות, מכונות ה-VM של ה-Backend פועלות ב-Debian GNU/Linux 12.
המסוף
יצירת מכונות וירטואליות של קצה עורפי
נכנסים לדף VM instances במסוף Google Cloud .
חוזרים על שלבים 3 עד 8 לכל מכונה וירטואלית, ומשתמשים בשילובים הבאים של שם ואזור.
- שם:
vm-a1, אזור:us-west1-a - שם:
vm-a2, אזור:us-west1-a - שם:
vm-c1, אזור:us-west1-c - שם:
vm-c2, אזור:us-west1-c
- שם:
לוחצים על Create instance.
מגדירים את השם כמו שמופיע בשלב 2.
בשדה Region, בוחרים באפשרות
us-west1ובוחרים Zone כמו שמוסבר בשלב 2.בקטע Boot disk מוודאים שהאפשרות Debian GNU/Linux 12 (bookworm) מסומנת באפשרויות של דיסק האתחול. אם צריך, לוחצים על שינוי כדי לשנות את התמונה.
לוחצים על אפשרויות מתקדמות.
לוחצים על Networking ומגדירים את השדות הבאים:
- בשדה Network tags (תגי רשת), מזינים את הערכים
allow-sshו-allow-health-check-ipv6. - בקטע Network interfaces (ממשקי רשת), בוחרים באפשרויות הבאות:
- רשת:
lb-network-dual-stack - Subnet:
lb-subnet - סוג מחסנית IP: IPv4 ו-IPv6 (מחסנית כפולה)
- כתובת IPv4 פנימית ראשית: זמנית (אוטומטית)
- כתובת IPv4 חיצונית: זמנית
- רשת:
לוחצים על ניהול, ואז בשדה סקריפט לטעינה בזמן ההפעלה מזינים את הסקריפט הבא. התוכן של הסקריפט זהה בכל ארבעת המכונות הווירטואליות.
#! /bin/bash if [ -f /etc/startup_script_completed ]; then exit 0 fi apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl file_ports="/etc/apache2/ports.conf" file_http_site="/etc/apache2/sites-available/000-default.conf" file_https_site="/etc/apache2/sites-available/default-ssl.conf" http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088" http_vh_prts="*:80 *:8008 *:8080 *:8088" https_listen_prts="Listen 443\nListen 8443" https_vh_prts="*:443 *:8443" 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 prt_conf="$(cat "$file_ports")" prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")" prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")" echo "$prt_conf" | tee "$file_ports" http_site_conf="$(cat "$file_http_site")" http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")" echo "$http_site_conf_2" | tee "$file_http_site" https_site_conf="$(cat "$file_https_site")" https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")" echo "$https_site_conf_2" | tee "$file_https_site" systemctl restart apache2 touch /etc/startup_script_completed
- בשדה Network tags (תגי רשת), מזינים את הערכים
לוחצים על יצירה.
יצירת קבוצות של מופעי מכונה
נכנסים לדף Instance groups במסוף Google Cloud .
כדי ליצור שתי קבוצות של מכונות וירטואליות לא מנוהלות, שבכל אחת מהן יש שתי מכונות וירטואליות, חוזרים על השלבים הבאים ומשתמשים בשילובים האלה.
- שם קבוצת המופעים:
ig-a, אזור:us-west1-a, מכונות וירטואליות:vm-a1ו-vm-a2 - שם קבוצת המופעים:
ig-c, אזור:us-west1-c, מכונות וירטואליות:vm-c1ו-vm-c2
- שם קבוצת המופעים:
לוחצים על יצירת קבוצת מופעים.
לוחצים על קבוצת מופעים חדשה לא מנוהלת.
מגדירים את השם כמו שמוסבר בשלב 2.
בקטע Location, בוחרים באפשרות
us-west1בשדה Region, ואז בוחרים Zone כמו שמוסבר בשלב 2.בקטע רשת, בוחרים באפשרות
lb-network-dual-stack.בשדה רשת משנה, בוחרים באפשרות
lb-subnet.בקטע VM instances, מוסיפים את המכונות הווירטואליות כמו שמוסבר בשלב 2.
לוחצים על יצירה.
gcloud
כדי ליצור את ארבע המכונות הווירטואליות, מריצים את הפקודה
gcloud compute instances createארבע פעמים, ומשתמשים בארבעת השילובים האלה ל-[VM-NAME]ול-[ZONE]. תוכן הסקריפט זהה בכל ארבע המכונות הווירטואליות.VM-NAME:vm-a1,ZONE:us-west1-aVM-NAME:vm-a2,ZONE:us-west1-aVM-NAME:vm-c1,ZONE:us-west1-cVM-NAME:vm-c2,ZONE:us-west1-cgcloud compute instances create VM-NAME \ --zone=ZONE \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh,allow-health-check-ipv6 \ --subnet=lb-subnet \ --stack-type=IPV4_IPV6 \ --metadata=startup-script='#! /bin/bash if [ -f /etc/startup_script_completed ]; then exit 0 fi apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl file_ports="/etc/apache2/ports.conf" file_http_site="/etc/apache2/sites-available/000-default.conf" file_https_site="/etc/apache2/sites-available/default-ssl.conf" http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088" http_vh_prts="*:80 *:8008 *:8080 *:8088" https_listen_prts="Listen 443\nListen 8443" https_vh_prts="*:443 *:8443" 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 prt_conf="$(cat "$file_ports")" prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")" prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")" echo "$prt_conf" | tee "$file_ports" http_site_conf="$(cat "$file_http_site")" http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")" echo "$http_site_conf_2" | tee "$file_http_site" https_site_conf="$(cat "$file_https_site")" https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")" echo "$https_site_conf_2" | tee "$file_https_site" systemctl restart apache2 touch /etc/startup_script_completed'
יוצרים את שתי הקבוצות של מופעי מכונה לא מנוהלים בכל אזור:
gcloud compute instance-groups unmanaged create ig-a \ --zone=us-west1-a gcloud compute instance-groups unmanaged create ig-c \ --zone=us-west1-cמוסיפים את המכונות הווירטואליות לקבוצות המופעים המתאימות:
gcloud compute instance-groups unmanaged add-instances ig-a \ --zone=us-west1-a \ --instances=vm-a1,vm-a2 gcloud compute instance-groups unmanaged add-instances ig-c \ --zone=us-west1-c \ --instances=vm-c1,vm-c2
api
למכונות הווירטואליות, משתמשים בשמות ובאזורים הבאים:
VM-NAME:vm-a1,ZONE:us-west1-aVM-NAME:vm-a2,ZONE:us-west1-aVM-NAME:vm-c1,ZONE:us-west1-cVM-NAME:vm-c2,ZONE:us-west1-c
כדי לקבל את DEBIAN_IMAGE_NAME הנוכחי, מריצים את הפקודה הבאה של gcloud:
gcloud compute images list \ --filter="family=debian-12"
יוצרים ארבע מכונות וירטואליות (VM) בעורף על ידי שליחת ארבע בקשות POST ל-method instances.insert:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
{
"name": "VM-NAME",
"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-dual-stack",
"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-NAME",
"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\nfile_ports=\"/etc/apache2/ports.conf\"\nfile_http_site=\"/etc/apache2/sites-available/000-default.conf\"\nfile_https_site=\"/etc/apache2/sites-available/default-ssl.conf\"\nhttp_listen_prts=\"Listen 80\\nListen 8008\\nListen 8080\\nListen 8088\"\nhttp_vh_prts=\"*:80 *:8008 *:8080 *:8088\"\nhttps_listen_prts=\"Listen 443\\nListen 8443\"\nhttps_vh_prts=\"*:443 *:8443\"\nvm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\nhttp://169.254.169.254/computeMetadata/v1/instance/name)\"\necho \"Page served from: $vm_hostname\" | \\\ntee /var/www/html/index.html\nprt_conf=\"$(cat \"$file_ports\")\"\nprt_conf_2=\"$(echo \"$prt_conf\" | sed \"s|Listen 80|${http_listen_prts}|\")\"\nprt_conf=\"$(echo \"$prt_conf_2\" | sed \"s|Listen 443|${https_listen_prts}|\")\"\necho \"$prt_conf\" | tee \"$file_ports\"\nhttp_site_conf=\"$(cat \"$file_http_site\")\"\nhttp_site_conf_2=\"$(echo \"$http_site_conf\" | sed \"s|*:80|${http_vh_prts}|\")\"\necho \"$http_site_conf_2\" | tee \"$file_http_site\"\nhttps_site_conf=\"$(cat \"$file_https_site\")\"\nhttps_site_conf_2=\"$(echo \"$https_site_conf\" | sed \"s|_default_:443|${https_vh_prts}|\")\"\necho \"$https_site_conf_2\" | tee \"$file_https_site\"\nsystemctl restart apache2"
}
]
},
"scheduling": {
"preemptible": false
},
"deletionProtection": false
}
כדי ליצור שתי קבוצות של מופעי מכונה, שולחים בקשת 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-dual-stack",
"subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet"
}
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups
{
"name": "ig-c",
"network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network-dual-stack",
"subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet"
}
כדי להוסיף מכונות לכל קבוצת מכונות, שולחים בקשת 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",
"instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a2"
}
]
}
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups/ig-c/addInstances
{
"instances": [
{
"instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instances/vm-c1",
"instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instances/vm-c2"
}
]
}
הגדרת רכיבים של מאזן עומסים
בשלבים האלה מוגדרים כל הרכיבים הפנימיים של מאזן עומסי רשת מסוג העברת סיגנל ללא שינוי, החל מבדיקת תקינות ושירות לקצה העורפי, ולאחר מכן הרכיבים של הקצה הקדמי:
בדיקת תקינות. בדוגמה הזו, משתמשים בבדיקת תקינות של HTTP שבודקת קוד מצב HTTP
200 OK. מידע נוסף זמין בקטע בנושא בדיקות תקינות בסקירה הכללית של מאזן עומסי רשת פנימי מסוג passthrough.שירות לקצה העורפי. מכיוון שצריך להעביר תנועת HTTP דרך מאזן העומסים הפנימי, צריך להשתמש ב-TCP ולא ב-UDP.
כלל העברה. בדוגמה הזו נוצרים שני כללי העברה פנימיים לתנועת IPv4 ו-IPv6.
כתובת IP פנימית. בדוגמה הזו, מציינים כתובת IP פנימית,
10.1.2.99, כשיוצרים את כלל ההעברה של IPv4. מידע נוסף זמין במאמר בנושא כתובת IP פנימית. אתם בוחרים איזו כתובת IPv4 להגדיר, אבל כתובת ה-IPv6 מוקצית באופן אוטומטי.
המסוף
התחלת ההגדרה
נכנסים לדף Load balancing במסוף Google Cloud .
- לוחצים על Create load balancer (יצירת מאזן עומסים).
- בקטע Type of load balancer (סוג מאזן העומסים), בוחרים באפשרות Network Load Balancer (TCP/UDP/SSL) (מאזן עומסים ברשת (TCP/UDP/SSL)) ולוחצים על Next (הבא).
- בקטע Proxy or passthrough (פרוקסי או העברה), בוחרים באפשרות Passthrough load balancer (מאזן עומסים להעברה) ולוחצים על Next (הבא).
- בקטע גלוי לכולם או פנימי, בוחרים באפשרות פנימי ולוחצים על הבא.
- לוחצים על Configure (הגדרה).
הגדרה בסיסית
בדף Create internal passthrough Network Load Balancer (יצירת מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי), מזינים את הפרטים הבאים:
- שם של מאזן עומסים:
be-ilb - אזור:
us-west1 - רשת:
lb-network-dual-stack
הגדרת הקצה העורפי
- לוחצים על Backend configuration.
- ברשימה בדיקת תקינות, לוחצים על יצירת בדיקת תקינות ומזינים את הפרטים הבאים:
- Name (שם):
hc-http-80 - היקף: אזורי
- Protocol: HTTP
- יציאה:
80 - פרוטוקול פרוקסי:
NONE - בקשה:
/
- Name (שם):
- לוחצים על יצירה.
- בקטע New Backend (קצה עורפי חדש), בשדה IP stack type (סוג ערימת IP), בוחרים באפשרות IPv4 and IPv6 (dual-stack) (IPv4 ו-IPv6 (ערימה כפולה)).
- בקטע Instance group, בוחרים את קבוצת המכונות
ig-aולוחצים על Done. - לוחצים על הוספת קצה עורפי וחוזרים על השלב כדי להוסיף את קבוצת המופעים
ig-c. - מוודאים שמופיע סימן וי כחול לצד Backend configuration.
הגדרות הקצה הקדמי
- לוחצים על Frontend configuration. בקטע New Frontend IP and port, מבצעים את הפעולות הבאות:
- בשדה Name (שם), מזינים
fr-ilb-ipv6. - כדי לטפל בתעבורת IPv6:
- בשביל IP version, בוחרים IPv6.
- בשדה Subnetwork, בוחרים באפשרות
lb-subnet. טווח כתובות ה-IPv6 בכלל ההעברה הוא תמיד זמני. - בשדה יציאות, בוחרים באפשרות כמה, ואז בשדה מספר יציאה מזינים
80,8008,8080,8088. - לוחצים על סיום.
- כדי לטפל בתעבורת IPv4:
- לוחצים על Add frontend IP and port.
- בשדה Name (שם), מזינים
fr-ilb. - בשדה רשת משנה, בוחרים באפשרות
lb-subnet. - בקטע Internal IP purpose, ברשימה כתובת IP, בוחרים באפשרות Create IP address, מזינים את הפרטים הבאים ולוחצים על Reserve.
- שם:
ip-ilb - IP version: IPv4
- כתובת IP סטטית: אני רוצה לבחור
- כתובת IP מותאמת אישית:
10.1.2.99
- שם:
- בקטע יציאות, בוחרים באפשרות כמה, ואז בשדה מספרי יציאות מזינים
80,8008,8080ו-8088. - לוחצים על סיום.
- לפני שממשיכים, מוודאים שלצד Frontend configuration מופיע סימן וי כחול.
- בשדה Name (שם), מזינים
בדיקת ההגדרות האישיות
- לוחצים על Review and finalize. בודקים את כל ההגדרות.
- אם ההגדרות נכונות, לוחצים על יצירה. יצירת מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי נמשכת כמה דקות.
gcloud
יוצרים בדיקת תקינות חדשה של HTTP ברמה האזורית כדי לבדוק את הקישוריות של HTTP למכונות הווירטואליות ביציאה 80.
gcloud compute health-checks create http hc-http-80 \ --region=us-west1 \ --port=80יוצרים את שירות הקצה העורפי לתנועת HTTP:
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מוסיפים את שתי קבוצות המופעים לשירות ה-Backend:
gcloud compute backend-services add-backend be-ilb \ --region=us-west1 \ --instance-group=ig-a \ --instance-group-zone=us-west1-a gcloud compute backend-services add-backend be-ilb \ --region=us-west1 \ --instance-group=ig-c \ --instance-group-zone=us-west1-cיוצרים שני כללי העברה לשירות לקצה העורפי. כשיוצרים את כלל ההעברה של IPv4, צריך לציין
10.1.2.99לכתובת ה-IP הפנימית ברשת המשנה של כתובות IPv4.gcloud compute forwarding-rules create fr-ilb \ --region=us-west1 \ --load-balancing-scheme=internal \ --subnet=lb-subnet \ --address=10.1.2.99 \ --ip-protocol=TCP \ --ports=80,8008,8080,8088 \ --backend-service=be-ilb \ --backend-service-region=us-west1gcloud compute forwarding-rules create fr-ilb-ipv6 \ --region=us-west1 \ --load-balancing-scheme=internal \ --subnet=lb-subnet \ --ip-protocol=TCP \ --ports=80,8008,8080,8088 \ --backend-service=be-ilb \ --backend-service-region=us-west1 \ --ip-version=IPV6
api
כדי ליצור את בדיקת תקינות, שולחים בקשת POST אל ה-method regionHealthChecks.insert.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/regionHealthChecks
{
"name": "hc-http-80",
"type": "HTTP",
"httpHealthCheck": {
"port": 80
}
}
כדי ליצור את השירות לקצה עורפי אזורי, שולחים בקשת POST אל ה-method regionBackendServices.insert.
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"
},
{
"group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups/ig-c",
"balancingMode": "CONNECTION"
}
],
"healthChecks": [
"https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/healthChecks/hc-http-80"
],
"loadBalancingScheme": "INTERNAL",
"connectionDraining": {
"drainingTimeoutSec": 0
}
}
כדי ליצור את כלל ההעברה, שולחים בקשת POST אל ה-method forwardingRules.insert.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules
{
"name": "fr-ilb-ipv6",
"IPProtocol": "TCP",
"ports": [
"80", "8008", "8080", "8088"
],
"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",
"ipVersion": "IPV6",
"networkTier": "PREMIUM"
}
כדי ליצור את כלל ההעברה, שולחים בקשת POST אל ה-method forwardingRules.insert.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules
{
"name": "fr-ilb",
"IPAddress": "10.1.2.99",
"IPProtocol": "TCP",
"ports": [
"80", "8008", "8080", "8088"
],
"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",
"networkTier": "PREMIUM"
}
בדיקת מאזן העומסים
כדי לבדוק את מאזן העומסים, יוצרים מכונת VM של לקוח באותו אזור שבו נמצא מאזן העומסים, ואז שולחים תעבורה מהלקוח למאזן העומסים.
יצירת מכונה וירטואלית של לקוח
בדוגמה הזו נוצרת מכונה וירטואלית של לקוח (vm-client) באותו אזור שבו נמצאות המכונות הווירטואליות של השרת (בק-אנד). הלקוח משמש לאימות ההגדרה של מאזן העומסים ולהדגמת ההתנהגות הצפויה כפי שמתואר בקטע בדיקה.
המסוף
נכנסים לדף VM instances במסוף Google Cloud .
לוחצים על Create instance.
בשדה Name (שם), מזינים
vm-client.בשדה אזור, בוחרים באפשרות
us-west1.בשדה Zone, בוחרים באפשרות
us-west1-a.לוחצים על אפשרויות מתקדמות.
לוחצים על Networking ומגדירים את השדות הבאים:
- בשדה Network tags (תגי רשת), מזינים
allow-ssh. - בקטע Network interfaces (ממשקי רשת), בוחרים באפשרויות הבאות:
- רשת:
lb-network-dual-stack - Subnet:
lb-subnet - סוג מחסנית IP: IPv4 ו-IPv6 (מחסנית כפולה)
- כתובת IP פנימית ראשית: זמנית (אוטומטית)
- כתובת IP חיצונית: זמנית
- רשת:
- לוחצים על סיום.
- בשדה Network tags (תגי רשת), מזינים
לוחצים על יצירה.
gcloud
המכונה הווירטואלית של הלקוח יכולה להיות בכל אזור באותו אזור שבו נמצא מאזן העומסים, והיא יכולה להשתמש בכל רשת משנה באותו אזור. בדוגמה הזו, הלקוח נמצא באזור us-west1-a והוא משתמש באותה רשת משנה כמו המכונות הווירטואליות של הבק-אנד.
gcloud compute instances create vm-client \
--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",
"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-dual-stack",
"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
}
בדיקת החיבור
בבדיקה הזו מתבצעת פנייה למאזן העומסים ממכונה וירטואלית נפרדת של לקוח, כלומר לא ממכונה וירטואלית של קצה עורפי ששייכת למאזן העומסים. ההתנהגות הצפויה היא שהתנועה תתחלק בין ארבעת המכונות הווירטואליות של ה-Backend.
מתחברים למופע ה-VM של הלקוח.
gcloud compute ssh vm-client --zone=us-west1-a
תאר את כלל ההעברה של IPv6
fr-ilb-ipv6. שימו לב לIPV6_ADDRESSבתיאור.gcloud compute forwarding-rules describe fr-ilb-ipv6 --region=us-west1
תאר את כלל ההעברה של IPv4
fr-ilb.gcloud compute forwarding-rules describe fr-ilb --region=us-west1
מלקוחות עם קישוריות 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
מלקוחות עם קישוריות IPv4, מריצים את הפקודה הבאה:
curl -m 10 -s http://10.1.2.99:80
מחליפים את ה-placeholders בערכים תקינים:
-
IPV6_ADDRESSהיא כתובת ה-IPv6 הזמנית בכלל ההעברהfr-ilb-ipv6.
-
הגדרת מאזן עומסים עם רשתות משנה וקצה עורפי מסוג IPv6 בלבד
במאמר הזה מוסבר איך להגדיר ולבדוק מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי שתומך רק בתנועת IPv6. בשלבים שבקטע הזה מוסבר איך להגדיר את הפריטים הבאים:
- רשת VPC במצב מותאם אישית בשם
lb-network-ipv6-only. תנועת IPv6 דורשת תת-רשת במצב מותאם אישית. - רשת משנה פנימית IPv6-only בשם
lb-subnet-ipv6-only(stack-typeמוגדר כ-IPV6_ONLY), שנדרשת לתנועה מסוג IPv6-only. - כללי חומת אש שמאפשרים חיבורים נכנסים למכונות וירטואליות של שרתים עורפיים.
- קבוצת המופעים של ה-Backend, שנמצאת באזור וברשת המשנה הבאים בדוגמה הזו:
- אזור:
us-west1 - תת-רשת:
lb-subnet-ipv6-onlyטווח כתובות ה-IPv6 של תת-הרשת מוקצה באופן אוטומטי. Google מספקת בלוק CIDR של IPv6 בגודל קבוע (/64).
- אזור:
- ארבע מכונות וירטואליות בבק-אנד עם IPv6 בלבד – שתי מכונות וירטואליות בקבוצת מופעים לא מנוהלת באזור
us-west1-aושתי מכונות וירטואליות בקבוצת מופעים לא מנוהלת באזורus-west1-c. - שרת TCP של IPv6 במכונות הווירטואליות של העורף. השרת מאזין לחיבורים נכנסים בכתובת ה-IP הווירטואלית שצוינה בכלל ההעברה של מאזן העומסים ובממשק הרשת שצוין. השרת מקבל חיבורים נכנסים של לקוחות, שולח תגובה ואז סוגר את החיבור.
- מכונת VM של לקוח אחת לבדיקת חיבורים.
- הרכיבים הבאים של מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי:
- בדיקת תקינות של שירות הקצה העורפי
- שירות קצה עורפי פנימי באזור
us-west1לניהול חלוקת החיבורים לשתי קבוצות של מופעים אזוריים - כלל העברה של IPv6
אפשר גם להגדיר מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי עם קצה עורפי פנימי של IPv6 בלבד באמצעות מכונת VM שמשמשת כשער NAT. מידע נוסף על ההגדרה הזו זמין במאמר בנושא הגדרת מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי עם קצה עורפי פנימי מסוג IPv6 בלבד.
הגדרת רשת, אזור ורשת משנה
מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי שמתואר בדף הזה נוצר ברשת VPC במצב מותאם אישית בשם lb-network-ipv6-only.
כדי להגדיר רשתות משנה עם טווחי IPv6 פנימיים, צריך להפעיל טווח IPv6 פנימי של ULA ברשת VPC. טווחים של רשתות משנה פנימיות של IPv6 מוקצים מתוך הטווח הזה.
בהמשך, בקטע Install an IPv6 TCP server on the backend VMs using a startup Bash script במסמך הזה, נעשה שימוש בטווח של רשת המשנה הפנימית של IPv6 כדי ליצור כלל ניתוב לניתוב תנועה מרשת המשנה של ה-VPC דרך השער וממשק הרשת שצוינו.
המסוף
נכנסים לדף VPC networks במסוף Google Cloud .
לוחצים על יצירת רשת VPC.
בשדה Name (שם), מזינים
lb-network-ipv6-only.כדי להגדיר טווחי כתובות IPv6 פנימיות ברשתות משנה ברשת הזו, צריך לבצע את השלבים הבאים:
- בקטע Private IPv6 address settings (הגדרות של כתובות IPv6 פרטיות), בוחרים באפשרות Configure a ULA internal IPv6 range for this VPC Network (הגדרת טווח פנימי של כתובות IPv6 מסוג ULA לרשת ה-VPC הזו).
- בקטע הקצאת טווח פנימי של IPv6, בוחרים באפשרות אוטומטית או ידנית.
אם בוחרים באפשרות Manually, צריך להזין טווח של
/48מתוך הטווחfd20::/20. אם הטווח כבר בשימוש, תתבקשו לספק טווח אחר.
בקטע Subnet creation mode (מצב יצירת רשת משנה), בוחרים באפשרות Custom (בהתאמה אישית).
בקטע New subnet (רשת משנה חדשה), מציינים את פרמטרי ההגדרה הבאים של רשת משנה:
- Name (שם):
lb-subnet-ipv6-only - אזור:
us-west1 - סוג מחסנית IP: IPv6 (single-stack)
- סוג הגישה ל-IPv6: פנימי
- Name (שם):
לוחצים על סיום.
לוחצים על יצירה.
gcloud
כדי ליצור רשת VPC חדשה במצב מותאם אישית, מריצים את הפקודה
gcloud compute networks create.כדי להגדיר טווחים פנימיים של IPv6 בכל רשת משנה ברשת הזו, משתמשים בדגל
--enable-ula-internal-ipv6.gcloud compute networks create lb-network-ipv6-only \ --subnet-mode=custom \ --enable-ula-internal-ipv6 \ --bgp-routing-mode=regional
מגדירים רשת משנה עם
ipv6-access-typeשמוגדר ל-INTERNAL. המשמעות היא שלמכונות הווירטואליות ברשת המשנה הזו יכולות להיות רק כתובות IPv6 פנימיות.כדי ליצור את רשת המשנה, מריצים את הפקודהgcloud compute networks subnets create.gcloud compute networks subnets create lb-subnet-ipv6-only \ --network=lb-network-ipv6-only \ --region=us-west1 \ --stack-type=IPV6_ONLY \ --ipv6-access-type=INTERNAL
הגדרת כללים לחומת אש
בדוגמה הזו נעשה שימוש בכללים הבאים של חומת האש:
fw-allow-lb-access-ipv6-only: כלל כניסה שחל על כל היעדים ברשת ה-VPC, שמאפשר תנועה מכל מקורות ה-IPv6.
fw-allow-ssh: כלל תעבורת נתונים נכנסת שחל על המכונות שמתבצע עליהן איזון עומסים, שמאפשר קישוריות SSH נכנסת ביציאת TCP22מכל כתובת. אתם יכולים לבחור טווח IP של מקור מגביל יותר לכלל הזה. לדוגמה, אתם יכולים לציין רק את טווחי ה-IP של המערכת שממנה אתם מפעילים סשנים של SSH. בדוגמה הזו נעשה שימוש בתג היעדallow-sshכדי לזהות את מכונות ה-VM שצריך להחיל עליהן את התג.
fw-allow-health-check-ipv6-only: כלל כניסה שחל על המופעים שעוברים איזון עומסים, שמאפשר תעבורת נתונים ממערכות בדיקת תקינות (2600:2d00:1:b029::/64). בדוגמה הזו נעשה שימוש בתג היעדallow-health-check-ipv6כדי לזהות את המופעים שצריך להחיל עליהם את הכלל. Google Cloud
בלי כללי חומת האש האלה, הכלל default deny ingress חוסם תנועה נכנסת למופעי ה-Backend.
המסוף
נכנסים לדף Firewall policies במסוף Google Cloud .
כדי לאפשר תעבורה של רשת משנה ב-IPv6, לוחצים שוב על יצירת כלל חומת אש ומזינים את הפרטים הבאים:
- Name (שם):
fw-allow-lb-access-ipv6-only - רשת:
lb-network-ipv6-only - עדיפות:
1000 - כיוון התנועה: כניסה
- פעולה במקרה של התאמה: אישור
- יעדים: כל המופעים ברשת
- מסנן מקור: טווחים של IPv6
- טווחים של כתובות IPv6 של המקור:
::/0 - פרוטוקולים ויציאות: אישור הכול
- Name (שם):
לוחצים על יצירה.
כדי לאפשר חיבורי SSH נכנסים, לוחצים שוב על יצירת כלל חומת אש ומזינים את הפרטים הבאים:
- Name (שם):
fw-allow-ssh - רשת:
lb-network-ipv6-only - עדיפות:
1000 - כיוון התנועה: כניסה
- פעולה במקרה של התאמה: אישור
- יעדים: תגי יעד שצוינו
- תגי טירגוט:
allow-ssh - מסנן מקור: טווחים של IPv4
- טווחים של כתובות IPv4 של המקור:
0.0.0.0/0 - פרוטוקולים ויציאות: בוחרים באפשרות פרוטוקולים ויציאות שצוינו, מסמנים את תיבת הסימון TCP ומזינים
22ביציאות.
- Name (שם):
לוחצים על יצירה.
כדי לאפשר בדיקות תקינות של IPv6, לוחצים שוב על יצירת כלל חומת אש ומזינים את הפרטים הבאים: Google Cloud
- Name (שם):
fw-allow-health-check-ipv6-only - רשת:
lb-network-ipv6-only - עדיפות:
1000 - כיוון התנועה: כניסה
- פעולה במקרה של התאמה: אישור
- יעדים: תגי יעד שצוינו
- תגי טירגוט:
allow-health-check-ipv6 - מסנן מקור: טווחים של IPv6
- טווחים של כתובות IPv6 של המקור:
2600:2d00:1:b029::/64 - פרוטוקולים ויציאות: אישור הכול
- Name (שם):
לוחצים על יצירה.
gcloud
יוצרים את
fw-allow-lb-access-ipv6-onlyכלל חומת האש כדי לאפשר תעבורת IPv6 לכל המכונות הווירטואליות ברשת ה-VPC.gcloud compute firewall-rules create fw-allow-lb-access-ipv6-only \ --network=lb-network-ipv6-only \ --action=allow \ --direction=ingress \ --source-ranges=::/0 \ --rules=allיוצרים את כלל חומת האש
fw-allow-sshכדי לאפשר קישוריות SSH למכונות וירטואליות עם תג הרשתallow-ssh. אם לא מציינים אתsource-ranges,Google Cloud מפרש את הכלל כאילו הוא מתייחס לכל מקור.gcloud compute firewall-rules create fw-allow-ssh \ --network=lb-network-ipv6-only \ --action=allow \ --direction=ingress \ --target-tags=allow-ssh \ --rules=tcp:22יוצרים את כלל
fw-allow-health-check-ipv6כדי לאפשר בדיקות תקינות שלGoogle Cloud IPv6.gcloud compute firewall-rules create fw-allow-health-check-ipv6-only \ --network=lb-network-ipv6-only \ --action=allow \ --direction=ingress \ --target-tags=allow-health-check-ipv6 \ --source-ranges=2600:2d00:1:b029::/64 \ --rules=tcp,udp
יצירת מכונות וירטואליות בעורף וקבוצות של מופעים
בדוגמה הזו אנחנו משתמשים בשתי קבוצות של מופעי מכונה לא מנוהלים, שלכל אחת מהן יש שתי מכונות וירטואליות של קצה עורפי. כדי להדגים את האופי האזורי של מאזני עומסי רשת פנימיים להעברת סיגנל ללא שינוי, שתי קבוצות המופעים ממוקמות באזורים נפרדים, us-west1-a ו-us-west1-c.
- קבוצת המופעים
ig-aמכילה את שתי המכונות הווירטואליות האלה:vm-a1vm-a2
- קבוצת המופעים
ig-cמכילה את שתי המכונות הווירטואליות האלה:vm-c1vm-c2
התנועה לכל ארבעת מכונות ה-VM בקצה העורפי מאוזנת.
המסוף
יצירת מכונות וירטואליות של קצה עורפי
נכנסים לדף VM instances במסוף Google Cloud .
חוזרים על השלבים האלה לכל מכונה וירטואלית, באמצעות השילובים הבאים של שם ואזור.
- שם:
vm-a1, אזור:us-west1-a - שם:
vm-a2, אזור:us-west1-a - שם:
vm-c1, אזור:us-west1-c - שם:
vm-c2, אזור:us-west1-c
- שם:
לוחצים על Create instance.
מגדירים את השם כמו שמופיע בשלב 2.
בשדה Region, בוחרים באפשרות
us-west1ובוחרים Zone כמו שמוסבר בשלב 2.בקטע Boot disk מוודאים שהאפשרות Debian GNU/Linux 12 (bookworm) מסומנת באפשרויות של דיסק האתחול. אם צריך, לוחצים על שינוי כדי לשנות את התמונה.
לוחצים על אפשרויות מתקדמות.
לוחצים על Networking ומגדירים את השדות הבאים:
- בשדה Network tags (תגי רשת), מזינים את הערכים
allow-sshו-allow-health-check-ipv6. - בקטע Network interfaces (ממשקי רשת), בוחרים באפשרויות הבאות:
- רשת:
lb-network-ipv6-only - Subnet:
lb-subnet-ipv6-only - סוג מחסנית IP: IPv6 (single-stack)
- כתובת IPv6 פנימית ראשית: זמנית (אוטומטית)
- רשת:
- בשדה Network tags (תגי רשת), מזינים את הערכים
לוחצים על יצירה.
המכונה הווירטואלית בעורף המערכת צריכה להריץ שרת TCP של IPv6 שמקשיב לחיבורים נכנסים. מתקינים את השרת הזה במכונות הווירטואליות של הקצה העורפי אחרי שמגדירים את מאזן העומסים. הסיבה לכך היא שסקריפט השרת יוצר שקע שנקשר לכלל ההעברה של מאזן העומסים.
יצירת קבוצות של מופעי מכונה
נכנסים לדף Instance groups במסוף Google Cloud .
כדי ליצור שתי קבוצות של מכונות וירטואליות לא מנוהלות, שבכל אחת מהן יש שתי מכונות וירטואליות, חוזרים על השלבים הבאים ומשתמשים בשילובים האלה.
- שם קבוצת המופעים:
ig-a, אזור:us-west1-a, מכונות וירטואליות:vm-a1ו-vm-a2 - שם קבוצת המופעים:
ig-c, אזור:us-west1-c, מכונות וירטואליות:vm-c1ו-vm-c2
- שם קבוצת המופעים:
לוחצים על יצירת קבוצת מופעים.
לוחצים על קבוצת מופעים חדשה לא מנוהלת.
מגדירים את השם כמו שמוסבר בשלב 2.
בקטע Location, בוחרים באפשרות
us-west1בשדה Region, ואז בוחרים Zone כמו שמוסבר בשלב 2.בקטע רשת, בוחרים באפשרות
lb-network-ipv6-only.בשדה רשת משנה, בוחרים באפשרות
lb-subnet-ipv6-only.בקטע VM instances, מוסיפים את המכונות הווירטואליות כמו שמוסבר בשלב 2.
לוחצים על יצירה.
gcloud
כדי ליצור את ארבע המכונות הווירטואליות, מריצים את הפקודה
gcloud compute instances createארבע פעמים, ומשתמשים בארבעת השילובים האלה ל-[VM-NAME]ול-[ZONE].VM-NAME:vm-a1,ZONE:us-west1-aVM-NAME:vm-a2,ZONE:us-west1-aVM-NAME:vm-c1,ZONE:us-west1-cVM-NAME:vm-c2,ZONE:us-west1-c
gcloud beta compute instances create VM-NAME \ --zone=ZONE \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh,allow-health-check-ipv6 \ --subnet=lb-subnet-ipv6-only \ --stack-type=IPV6_ONLYהמכונה הווירטואלית בעורף המערכת צריכה להריץ שרת TCP של IPv6 שמקשיב לחיבורים נכנסים. מתקינים את השרת הזה במכונות הווירטואליות של הקצה העורפי אחרי שמגדירים את מאזן העומסים. הסיבה לכך היא שסקריפט השרת יוצר שקע שנקשר לכלל ההעברה של מאזן העומסים.
יוצרים את שתי הקבוצות של מופעי מכונה לא מנוהלים בכל אזור:
gcloud beta compute instance-groups unmanaged create ig-a \ --zone=us-west1-a gcloud beta compute instance-groups unmanaged create ig-c \ --zone=us-west1-cמוסיפים את המכונות הווירטואליות לקבוצות המופעים המתאימות:
gcloud beta compute instance-groups unmanaged add-instances ig-a \ --zone=us-west1-a \ --instances=vm-a1,vm-a2 gcloud beta compute instance-groups unmanaged add-instances ig-c \ --zone=us-west1-c \ --instances=vm-c1,vm-c2
הגדרת רכיבים של מאזן עומסים
בשלבים האלה מוגדרים כל הרכיבים הפנימיים של מאזן עומסי רשת מסוג העברת סיגנל ללא שינוי, החל מבדיקת תקינות ושירות לקצה העורפי, ולאחר מכן הרכיבים של הקצה הקדמי:
המסוף
התחלת ההגדרה
נכנסים לדף Load balancing במסוף Google Cloud .
- לוחצים על Create load balancer (יצירת מאזן עומסים).
- בקטע Type of load balancer (סוג מאזן העומסים), בוחרים באפשרות Network Load Balancer (TCP/UDP/SSL) (מאזן עומסים ברשת (TCP/UDP/SSL)) ולוחצים על Next (הבא).
- בקטע Proxy or passthrough (פרוקסי או העברה), בוחרים באפשרות Passthrough load balancer (מאזן עומסים להעברה) ולוחצים על Next (הבא).
- בקטע גלוי לכולם או פנימי, בוחרים באפשרות פנימי ולוחצים על הבא.
- לוחצים על Configure (הגדרה).
הגדרה בסיסית
בדף Create internal passthrough Network Load Balancer (יצירת מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי), מזינים את הפרטים הבאים:
- שם של מאזן עומסים:
ilb-ipv6-only - אזור:
us-west1 - רשת:
lb-network-ipv6-only
הגדרת הקצה העורפי
- לוחצים על Backend configuration.
- ברשימה בדיקת תקינות, לוחצים על יצירת בדיקת תקינות ומזינים את הפרטים הבאים:
- Name (שם):
hc-http-80 - היקף: אזורי
- Protocol: HTTP
- יציאה:
80 - פרוטוקול שרת proxy: ללא
- בקשה:
/
- Name (שם):
- לוחצים על יצירה.
- בקטע New Backend, בהגדרה IP stack type, בוחרים באפשרות IPv6 (single-stack).
- בקטע Instance group, בוחרים את קבוצת המכונות
ig-aולוחצים על Done. - לוחצים על הוספת קצה עורפי וחוזרים על השלב כדי להוסיף את קבוצת המופעים
ig-c. - מוודאים שמופיע סימן וי כחול לצד Backend configuration.
הגדרות הקצה הקדמי
- לוחצים על Frontend configuration. בקטע New Frontend IP and port מבצעים את הפעולות הבאות:
- בשדה Name (שם), מזינים
fr-ilb-ipv6-only. - כדי לטפל בתעבורת IPv6:
- בשביל IP version, בוחרים IPv6. שרת ה-TCP של IPv6 שתיצרו בקטע הבא יקשר ל-VIP של כלל ההעברה.
- בשדה Subnetwork, בוחרים באפשרות
lb-subnet-ipv6-only. טווח כתובות ה-IPv6 בכלל ההעברה הוא תמיד זמני. - בשדה יציאות, בוחרים באפשרות כמה, ואז בשדה מספר היציאה, מזינים
80,8008,8080,8088. - לוחצים על סיום.
- לפני שממשיכים, מוודאים שלצד Frontend configuration מופיע סימן אישור כחול.
- בשדה Name (שם), מזינים
בדיקת ההגדרות האישיות
- לוחצים על Review and finalize. בודקים את כל ההגדרות.
- אם ההגדרות נכונות, לוחצים על יצירה. יצירת מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי נמשכת כמה דקות.
gcloud
יוצרים בדיקת תקינות חדשה של HTTP ברמה האזורית כדי לבדוק את הקישוריות של HTTP למכונות הווירטואליות ביציאה 80.
gcloud beta compute health-checks create http hc-http-80 \ --region=us-west1 \ --port=80יוצרים את שירות הקצה העורפי:
gcloud beta compute backend-services create ilb-ipv6-only \ --load-balancing-scheme=INTERNAL \ --protocol=tcp \ --region=us-west1 \ --health-checks=hc-http-80 \ --health-checks-region=us-west1מוסיפים את שתי קבוצות המופעים לשירות ה-Backend:
gcloud beta compute backend-services add-backend ilb-ipv6-only \ --region=us-west1 \ --instance-group=ig-a \ --instance-group-zone=us-west1-agcloud beta compute backend-services add-backend ilb-ipv6-only \ --region=us-west1 \ --instance-group=ig-c \ --instance-group-zone=us-west1-cיוצרים את כלל ההעברה של IPv6 עם כתובת IPv6 זמנית.
gcloud beta compute forwarding-rules create fr-ilb-ipv6-only \ --region=us-west1 \ --load-balancing-scheme=INTERNAL \ --subnet=lb-subnet-ipv6-only \ --ip-protocol=TCP \ --ports=80,8008,8080,8088 \ --backend-service=ilb-ipv6-only \ --backend-service-region=us-west1 \ --ip-version=IPV6שרת ה-TCP של IPv6 שתיצרו בקטע הבא יקשר ל-VIP של כלל ההעברה.
התקנת שרת TCP של IPv6 במכונות הווירטואליות של ה-Backend באמצעות סקריפט Bash להפעלה
בדוגמה הזו, סקריפט לטעינה בזמן ההפעלה של Bash למכונות וירטואליות של קצה עורפי מכיל את הפקודות הבאות:
- פקודות רשת לניתוב כל החבילות היוצאות שמקורן ברשת משנה דרך שער וממשק רשת שצוינו.
- סקריפט שרת Python (
server.py), שהוא שרת TCP של IPv6, שמקשיב לחיבורים נכנסים בכתובת ה-VIP ובממשק הרשת שצוינו. הוא מקבל חיבורים נכנסים של לקוחות, שולח תגובה ואז סוגר את החיבור.
צריך להוסיף את הפרטים הבאים בסקריפט Bash:
- כתובת השער
- טווח תת-רשת
- ה-VIP של כלל ההעברה
- ממשק רשת
כדי לזהות את כתובת השער ואת טווח רשת המשנה, מריצים את הפקודה ip -6 route show table all במכונה הווירטואלית של הבק-אנד. מידע נוסף על הפקודות שמשמשות בסקריפט Bash להפעלה מופיע בסעיף נספח.
כדי להוסיף סקריפט לטעינה בזמן ההפעלה למופע של מכונה וירטואלית:
המסוף
ברשימת המכונות הווירטואליות שיצרתם קודם, לוחצים על המכונה הווירטואלית שצריך לעדכן.
לוחצים על Edit.
בקטע מטא-נתונים, מזינים את הסקריפט הבא בשדה סקריפט לטעינה בזמן ההפעלה.
#!/bin/bash # Replace these with your actual values. Run the 'ip -6 route show table all' command to find the correct values. GATEWAY_ADDRESS=fe80::57:2ff:fe36:ffbe SUBNET_RANGE=fd20:307:120c:2000::/64 # Add a custom default route to routing table 1. # The following command sends packets to the gateway using the network interface named 'ens4'. sudo ip route add default via $GATEWAY_ADDRESS dev ens4 table 1 # Add a source-based policy routing rule. # The following command adds a rule to route all outgoing packets originating # from a specified subnet. If the source address matches the subnet, # the system uses the default route defined in table 1 to forward the traffic. sudo ip -6 rule add from $SUBNET_RANGE table 1 # Allow the server to bind to a non-local IPv6 address--the VIP of the load balancer. sudo sysctl -w net.ipv6.ip_nonlocal_bind=1 # Overview: # This script sets up a simple IPv6 TCP server using Python's socket library. # The server binds to a specific network interface and listens on a specified Virtual IP (VIP) address and port (default: 80). # It accepts incoming client connections, sends a simple response ("Thank you for connecting"), and then closes the connection. # Key features: # - Uses IPv6 (AF_INET6) for networking. # - Binds to a specific network interface using SO_BINDTODEVICE. # - Handles multiple client connections in a loop. # - Demonstrates basic socket programming concepts like binding, listening, accepting, and sending data. # Note: Replace placeholders like 'FORWARDING_RULE_VIP' and 'ens4' with actual values for your setup. # Write the Python file locally. cat << 'EOF' > server.py # Import the socket library to work with network connections import socket import urllib.request # Fetch the VM hostname from Google Cloud metadata server def get_vm_hostname(): url = "http://metadata.google.internal/computeMetadata/v1/instance/name" req = urllib.request.Request(url, headers={"Metadata-Flavor": "Google"}) with urllib.request.urlopen(req) as response: return response.read().decode() vm_hostname = get_vm_hostname() # Create a socket object for IPv6 and TCP connections # AF_INET6 specifies IPv6, SOCK_STREAM specifies TCP server_socket = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) # Set the SO_REUSEADDR option to allow reusing the address # This is useful to avoid "address already in use" errors when restarting the server server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # Specify the network interface to bind the server to # Replace "ens4" with the name of your network interface interface_name = "ens4" # Get the index of the network interface interface_index = socket.if_nametoindex(interface_name) # Bind the socket to the specified network interface server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BINDTODEVICE, interface_name.encode()) # Bind the socket to an address and port # Replace 'FORWARDING_RULE_VIP' with the actual VIP (Virtual IP) address server_address = ('FORWARDING_RULE_VIP', 80, 0, 0) server_socket.bind(server_address) # Start listening for incoming connections # The argument '5' specifies the maximum number of queued connections server_socket.listen(5) # Print a message indicating that the server is ready to accept connections print(f"Server listening on {server_address}, bound to {interface_name}") # Serve incoming connections while True: client_socket, client_address = server_socket.accept() print(f"Accepted connection from {client_address}") # Generate response body body = f"Thank you for connecting to {vm_hostname}\n" # Construct a proper HTTP/1.1 response response = ( "HTTP/1.1 200 OK\r\n" f"Content-Length: {len(body)}\r\n" "Content-Type: text/plain\r\n" "Connection: close\r\n" "\r\n" f"{body}" ) # Send the response and close the connection client_socket.sendall(response.encode()) client_socket.close() EOF # Make the Python script executable chmod +x server.py # Run the server sudo python3 server.pyלוחצים על Save.
gcloud
יוצרים סקריפט לטעינה בזמן ההפעלה.
nano startup.sh
מוסיפים את הסקריפט הבא ושומרים את הקובץ.
#!/bin/bash # Replace these with your actual values. Run the 'ip -6 route show table all' command to find the correct values. GATEWAY_ADDRESS=fe80::57:2ff:fe36:ffbe SUBNET_RANGE=fd20:307:120c:2000::/64 # Add a custom default route to routing table 1. # The following command sends packets to the gateway using the network interface named 'ens4'. sudo ip route add default via $GATEWAY_ADDRESS dev ens4 table 1 # Add a source-based policy routing rule. # The following command adds a rule to route all outgoing packets originating # from a specified subnet. If the source address matches the subnet, # the system uses the default route defined in table 1 to forward the traffic. sudo ip -6 rule add from $SUBNET_RANGE table 1 # Allow the server to bind to a non-local IPv6 address--the VIP of the load balancer. sudo sysctl -w net.ipv6.ip_nonlocal_bind=1 # Overview: # This script sets up a simple IPv6 TCP server using Python's socket library. # The server binds to a specific network interface and listens on a specified Virtual IP (VIP) address and port (default: 80). # It accepts incoming client connections, sends a simple response ("Thank you for connecting"), and then closes the connection. # Key features: # - Uses IPv6 (AF_INET6) for networking. # - Binds to a specific network interface using SO_BINDTODEVICE. # - Handles multiple client connections in a loop. # - Demonstrates basic socket programming concepts like binding, listening, accepting, and sending data. # Note: Replace placeholders like 'FORWARDING_RULE_VIP' and 'ens4' with actual values for your setup. # Write the Python file locally. cat << 'EOF' > server.py # Import the socket library to work with network connections import socket import urllib.request # Fetch the VM hostname from Google Cloud metadata server def get_vm_hostname(): url = "http://metadata.google.internal/computeMetadata/v1/instance/name" req = urllib.request.Request(url, headers={"Metadata-Flavor": "Google"}) with urllib.request.urlopen(req) as response: return response.read().decode() vm_hostname = get_vm_hostname() # Create a socket object for IPv6 and TCP connections # AF_INET6 specifies IPv6, SOCK_STREAM specifies TCP server_socket = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) # Set the SO_REUSEADDR option to allow reusing the address # This is useful to avoid "address already in use" errors when restarting the server server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # Specify the network interface to bind the server to # Replace "ens4" with the name of your network interface interface_name = "ens4" # Get the index of the network interface interface_index = socket.if_nametoindex(interface_name) # Bind the socket to the specified network interface server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BINDTODEVICE, interface_name.encode()) # Bind the socket to an address and port # Replace 'FORWARDING_RULE_VIP' with the actual VIP (Virtual IP) address server_address = ('FORWARDING_RULE_VIP', 80, 0, 0) server_socket.bind(server_address) # Start listening for incoming connections # The argument '5' specifies the maximum number of queued connections server_socket.listen(5) # Print a message indicating that the server is ready to accept connections print(f"Server listening on {server_address}, bound to {interface_name}") # Serve incoming connections while True: client_socket, client_address = server_socket.accept() print(f"Accepted connection from {client_address}") # Generate response body body = f"Thank you for connecting to {vm_hostname}\n" # Construct a proper HTTP/1.1 response response = ( "HTTP/1.1 200 OK\r\n" f"Content-Length: {len(body)}\r\n" "Content-Type: text/plain\r\n" "Connection: close\r\n" "\r\n" f"{body}" ) # Send the response and close the connection client_socket.sendall(response.encode()) client_socket.close() EOF # Make the Python script executable chmod +x server.py # Run the server sudo python3 server.pyמוסיפים את קובץ המטא-נתונים למכונה הווירטואלית.
gcloud compute instances add-metadata VM-NAME \ --metadata-from-file=startup-script=startup.sh
בדיקת מאזן העומסים
כדי לבדוק את מאזן העומסים, יוצרים מכונת VM של לקוח באותו אזור שבו נמצא מאזן העומסים, ואז שולחים תעבורה מהלקוח למאזן העומסים.
יצירת מכונה וירטואלית של לקוח
בדוגמה הזו נוצרת מכונה וירטואלית של לקוח (vm-client) באותו אזור שבו נמצאות המכונות הווירטואליות של השרת (בק-אנד). הלקוח משמש לאימות ההגדרה של מאזן העומסים ולהדגמת ההתנהגות הצפויה כפי שמתואר בקטע בדיקה.
המסוף
נכנסים לדף VM instances במסוף Google Cloud .
לוחצים על Create instance.
בשדה Name (שם), מזינים
vm-client.בשדה אזור, בוחרים באפשרות
us-west1.בשדה Zone, בוחרים באפשרות
us-west1-a.לוחצים על אפשרויות מתקדמות.
לוחצים על Networking ומגדירים את השדות הבאים:
- בשדה Network tags (תגי רשת), מזינים
allow-ssh. - בקטע Network interfaces (ממשקי רשת), בוחרים באפשרויות הבאות:
- רשת:
lb-network-ipv6-only - Subnet:
lb-subnet-ipv6-only - סוג מחסנית IP: IPv6 (single-stack)
- רשת:
- לוחצים על סיום.
- בשדה Network tags (תגי רשת), מזינים
לוחצים על יצירה.
gcloud
המכונה הווירטואלית של הלקוח יכולה להיות בכל אזור באותו אזור שבו נמצא מאזן העומסים, והיא יכולה להשתמש בכל רשת משנה באותו אזור. בדוגמה הזו, הלקוח נמצא באזור us-west1-a והוא משתמש באותה רשת משנה כמו המכונות הווירטואליות של הבק-אנד.
gcloud beta compute instances create vm-client \
--zone=us-west1-a \
--image-family=debian-12 \
--image-project=debian-cloud \
--stack-type=IPV6_ONLY \
--tags=allow-ssh \
--subnet=lb-subnet-ipv6-only
בדיקת החיבור
בבדיקה הזו מתבצעת פנייה למאזן העומסים ממכונה וירטואלית נפרדת של לקוח, כלומר לא ממכונה וירטואלית של קצה עורפי ששייכת למאזן העומסים. ההתנהגות הצפויה היא שהתנועה תתחלק בין ארבעת המכונות הווירטואליות של ה-Backend.
מתחברים למכונה הווירטואלית של הלקוח באמצעות SSH.
gcloud compute ssh vm-client --zone=us-west1-a
תאר את כלל ההעברה של IPv6
fr-ilb-ipv6-only. שימו לב לIPV6_ADDRESSבתיאור.gcloud beta compute forwarding-rules describe fr-ilb-ipv6-only \ --region=us-west1מלקוחות עם קישוריות IPv6, מריצים את הפקודה הבאה:
curl http://IPV6_ADDRESS:80
לדוגמה, אם כתובת ה-IPv6 שהוקצתה היא
[fd20:307:120c:2000:0:1:0:0/96]:80, הפקודה צריכה להיראות כך:curl http://[fd20:307:120c:2000:0:1:0:0]:80
אפשרויות הגדרה נוספות
בקטע הזה מופיעות אפשרויות הגדרה נוספות ואלטרנטיביות לדוגמה שמופיעה למעלה. כל המשימות הן אופציונליות. אפשר לבצע אותן בכל סדר.
הפעלה של גישה גלובלית
אתם יכולים להפעיל גישה גלובלית למאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי לדוגמה, כדי שהלקוחות יוכלו לגשת אליו בכל האזורים.
שרתי הבק-אנד של מאזן העומסים לדוגמה עדיין צריכים להיות ממוקמים באזור אחד (us-west1).
כדי להגדיר גישה גלובלית, מבצעים את שינויי ההגדרה הבאים.
המסוף
עריכת כלל ההעברה של מאזן העומסים
נכנסים לדף Load balancing במסוף Google Cloud .
בעמודה Name (שם), לוחצים על מאזן עומסי הרשת הפנימי להעברת סיגנל ללא שינוי. מאזן העומסים לדוגמה נקרא
be-ilb.לוחצים על Frontend configuration.
לוחצים על Edit .
בקטע גישה גלובלית, בוחרים באפשרות הפעלה.
לוחצים על סיום.
לוחצים על עדכון.
בדף Load balancer details (פרטי מאזן העומסים), מוודאים שבהגדרות הקצה הקדמי מופיע Regional (REGION) with global access (אזורי (REGION) עם גישה גלובלית).
gcloud
מעדכנים את כלל ההעברה של מאזן העומסים לדוגמה,
fr-ilb, כך שיכלול את הדגל--allow-global-access.gcloud compute forwarding-rules update fr-ilb \ --region=us-west1 \ --allow-global-accessאפשר להשתמש בפקודה
forwarding-rules describeכדי לבדוק אם הופעלה גישה גלובלית לכלל העברה. לדוגמה:gcloud compute forwarding-rules describe fr-ilb \ --region=us-west1 \ --format="get(name,region,allowGlobalAccess)"המילה
Trueמופיעה בפלט, אחרי השם והאזור של כלל ההעברה, כשהגישה הגלובלית מופעלת.
API
שולחים בקשת PATCH אל ה-method forwardingRules/patch.
PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules/fr-ilb
{
"allowGlobalAccess": true
}
יצירת לקוח VM לבדיקת גישה גלובלית
המסוף
נכנסים לדף VM instances במסוף Google Cloud .
לוחצים על Create instance.
מגדירים את Name לערך
vm-client2.מגדירים את Region (אזור) לערך
europe-west1.מגדירים את Zone לערך
europe-west1-b.לוחצים על אפשרויות מתקדמות.
לוחצים על Networking ומגדירים את השדות הבאים:
- בשדה Network tags (תגי רשת), מזינים
allow-ssh. - בקטע Network interfaces (ממשקי רשת), בוחרים באפשרויות הבאות:
- רשת:
lb-network - Subnet:
europe-subnet
- רשת:
- בשדה Network tags (תגי רשת), מזינים
לוחצים על יצירה.
gcloud
המכונה הווירטואלית של הלקוח יכולה להיות בכל אזור באותו אזור שבו נמצא מאזן העומסים, והיא יכולה להשתמש בכל רשת משנה באותו אזור. בדוגמה הזו, הלקוח נמצא באזור europe-west1-b והוא משתמש באותה רשת משנה כמו המכונות הווירטואליות של הבק-אנד.
gcloud compute instances create vm-client2 \
--zone=europe-west1-b \
--image-family=debian-12 \
--image-project=debian-cloud \
--tags=allow-ssh \
--subnet=europe-subnet
API
שולחים בקשת POST אל ה-method instances.insert.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/europe-west1-b/instances
{
"name": "vm-client2",
"tags": {
"items": [
"allow-ssh"
]
},
"machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/europe-west1-b/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/europe-west1/subnetworks/europe-subnet",
"accessConfigs": [
{
"type": "ONE_TO_ONE_NAT",
"name": "external-nat",
"networkTier": "PREMIUM"
}
]
}
],
"disks": [
{
"type": "PERSISTENT",
"boot": true,
"mode": "READ_WRITE",
"autoDelete": true,
"deviceName": "vm-client2",
"initializeParams": {
"sourceImage": "projects/debian-cloud/global/images/debian-image-name",
"diskType": "projects/PROJECT_ID/zones/europe-west1-b/diskTypes/pd-standard",
"diskSizeGb": "10"
}
}
],
"scheduling": {
"preemptible": false
},
"deletionProtection": false
}
התחברות ללקוח ה-VM ובדיקת הקישוריות
כדי לבדוק את הקישוריות, מריצים את הפקודה הבאה:
gcloud compute ssh vm-client2 --zone=europe-west1-b
בודקים את החיבור למאזן העומסים בכל היציאות שהוגדרו, כמו שעשיתם
מ-vm-client באזור us-west1. בודקים את קישוריות ה-HTTP בארבע היציאות שהוגדרו בכלל ההעברה:
curl http://10.1.2.99 curl http://10.1.2.99:8008 curl http://10.1.2.99:8080 curl http://10.1.2.99:8088
הגדרת קבוצות של מופעי מכונה מנוהלים
ההגדרה לדוגמה יצרה שתי קבוצות של מופעים לא מנוהלים. במקום זאת, אתם יכולים להשתמש בקבוצות של מופעי מכונה מנוהלים, כולל קבוצות של מופעי מכונה מנוהלים אזוריים ואזוריים, כשרתי קצה (backend) למאזני עומסים פנימיים מסוג העברת תעבורה (passthrough) ברשת.
כדי ליצור קבוצות מופעי מכונה מנוהלים, צריך ליצור תבנית של הגדרות מכונה. בפרוצדורה הזו מוסבר איך להחליף את שתי קבוצות המכונות הלא מנוהלות באזורים מהדוגמה בקבוצת מופעי מכונה מנוהלים אחת באזור. קבוצת מופעי מכונה מנוהלים אזורית יוצרת באופן אוטומטי מכונות וירטואליות בכמה אזורים באזור, וכך קל יותר לפזר את תנועת הייצור בין האזורים.
קבוצות מנוהלות של מופעים תומכות גם בהתאמה אוטומטית לעומס ובתיקון תוכנה אוטומטי. אם משתמשים בהתאמה אוטומטית לעומס עם מאזני עומסי רשת פנימיים להעברת סיגנל ללא שינוי, אי אפשר לשנות את קנה המידה על סמך איזון העומסים.
בקטע הזה מוסבר איך לשנות את שירות לקצה העורפי של מאזן העומסים הפנימי לדוגמה מסוג passthrough Network Load Balancer, כך שישתמש בקבוצת מופעי מכונה מנוהלים אזורית.
המסוף
תבנית של הגדרות מכונה
נכנסים לדף VM instance templates במסוף Google Cloud .
לוחצים על Create instance template.
מגדירים את Name לערך
template-vm-ilb.בוחרים סוג מכונה.
בקטע Boot disk מוודאים שהאפשרות Debian GNU/Linux 12 (bookworm) מסומנת באפשרויות של דיסק האתחול. אם צריך, לוחצים על שינוי כדי לשנות את התמונה.
לוחצים על אפשרויות מתקדמות.
לוחצים על Networking ומגדירים את השדות הבאים:
- בשדה Network tags (תגי רשת), מזינים את הערכים
allow-sshו-allow-health-check. - בקטע Network interfaces (ממשקי רשת), בוחרים באפשרויות הבאות:
- רשת:
lb-network - Subnet:
lb-subnet
- רשת:
- בשדה Network tags (תגי רשת), מזינים את הערכים
לוחצים על ניהול, ואז בשדה סקריפט לטעינה בזמן ההפעלה מזינים את הסקריפט הבא:
#! /bin/bash if [ -f /etc/startup_script_completed ]; then exit 0 fi apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl file_ports="/etc/apache2/ports.conf" file_http_site="/etc/apache2/sites-available/000-default.conf" file_https_site="/etc/apache2/sites-available/default-ssl.conf" http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088" http_vh_prts="*:80 *:8008 *:8080 *:8088" https_listen_prts="Listen 443\nListen 8443" https_vh_prts="*:443 *:8443" 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 prt_conf="$(cat "$file_ports")" prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")" prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")" echo "$prt_conf" | tee "$file_ports" http_site_conf="$(cat "$file_http_site")" http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")" echo "$http_site_conf_2" | tee "$file_http_site" https_site_conf="$(cat "$file_https_site")" https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")" echo "$https_site_conf_2" | tee "$file_https_site" systemctl restart apache2 touch /etc/startup_script_completedלוחצים על יצירה.
קבוצת מופעי מכונה מנוהלים
נכנסים לדף Instance groups במסוף Google Cloud .
לוחצים על יצירת קבוצת מופעים.
מגדירים את Name לערך
ig-ilb.בקטע Location בוחרים באפשרות Multi-zone ומגדירים את Region ל-
us-west1.מגדירים את תבנית של הגדרות מכונה ל-
template-vm-ilb.אופציונלי: מגדירים שינוי גודל אוטומטי. אי אפשר להגדיר שינוי גודל אוטומטי של קבוצת המופעים על סמך השימוש באיזון עומסים של HTTP, כי קבוצת המופעים היא קצה עורפי של מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי.
מגדירים את מספר המכונות המינימלי ל-
1ואת מספר המכונות המקסימלי ל-6.אופציונלי: מגדירים תיקון תוכנה אוטומטי. אם מגדירים תיקון תוכנה אוטומטי (autohealing), צריך להשתמש באותה בדיקת תקינות שמשמשת את שירות לקצה העורפי עבור מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי. בדוגמה הזו, נשתמש בערך
hc-http-80.לוחצים על יצירה.
gcloud
יוצרים את תבנית של הגדרות מכונה. אופציונלי, אתם יכולים להגדיר פרמטרים אחרים, כמו סוג המכונה, כדי שהתבנית של התמונה תשתמש בהם.
gcloud compute instance-templates create template-vm-ilb \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh,allow-health-check \ --subnet=lb-subnet \ --region=us-west1 \ --network=lb-network \ --metadata=startup-script='#! /bin/bash if [ -f /etc/startup_script_completed ]; then exit 0 fi apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl file_ports="/etc/apache2/ports.conf" file_http_site="/etc/apache2/sites-available/000-default.conf" file_https_site="/etc/apache2/sites-available/default-ssl.conf" http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088" http_vh_prts="*:80 *:8008 *:8080 *:8088" https_listen_prts="Listen 443\nListen 8443" https_vh_prts="*:443 *:8443" 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 prt_conf="$(cat "$file_ports")" prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")" prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")" echo "$prt_conf" | tee "$file_ports" http_site_conf="$(cat "$file_http_site")" http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")" echo "$http_site_conf_2" | tee "$file_http_site" https_site_conf="$(cat "$file_https_site")" https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")" echo "$https_site_conf_2" | tee "$file_https_site" systemctl restart apache2 touch /etc/startup_script_completed'יוצרים קבוצה אחת של מופעי מכונה מנוהלים אזוריים באמצעות התבנית:
gcloud compute instance-groups managed create ig-ilb \ --template=template-vm-ilb \ --region=us-west1 \ --size=6מוסיפים את קבוצת מופעי המכונה המנוהלים האזורית בתור קצה עורפי לשירות הקצה העורפי שכבר יצרתם:
gcloud compute backend-services add-backend be-ilb \ --region=us-west1 \ --instance-group=ig-ilb \ --instance-group-region=us-west1מנתקים את שתי קבוצות המכונות הלא מנוהלות (אזוריות) משירות ה-backend:
gcloud compute backend-services remove-backend be-ilb \ --region=us-west1 \ --instance-group=ig-a \ --instance-group-zone=us-west1-a gcloud compute backend-services remove-backend be-ilb \ --region=us-west1 \ --instance-group=ig-c \ --instance-group-zone=us-west1-c
הסרה של כתובות IP חיצוניות ממכונות וירטואליות של קצה עורפי
כשיצרתם את מכונות ה-VM של ה-Backend, לכל אחת מהן הוקצתה כתובת IP חיצונית זמנית כדי שתוכל להוריד את Apache באמצעות סקריפט לטעינה בזמן ההפעלה. מכיוון שהמכונות הווירטואליות בקצה העורפי משמשות רק מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי, אפשר להסיר את כתובות ה-IP החיצוניות שלהן. הסרה של כתובות IP חיצוניות מונעת מהמכונות הווירטואליות של ה-Backend גישה ישירה לאינטרנט.
המסוף
נכנסים לדף VM instances במסוף Google Cloud .
חוזרים על השלבים הבאים לכל מכונה וירטואלית של קצה העורף.
לוחצים על השם של מכונת ה-VM של ה-Backend, לדוגמה,
vm-a1.לוחצים על עריכה.
בקטע Network interfaces לוחצים על הרשת.
ברשימה כתובת IP חיצונית בוחרים באפשרות None ולוחצים על Done.
לוחצים על Save.
gcloud
כדי לחפש את האזור של מכונה – למשל, אם אתם משתמשים בקבוצת מופעי מכונה מנוהלים אזורית – מריצים את הפקודה הבאה לכל מכונה כדי לקבוע את האזור שלה. מחליפים את
[SERVER-VM]בשם המכונה הווירטואלית שרוצים לחפש.gcloud compute instances list --filter="name=[SERVER-VM]"
חוזרים על השלב הבא לכל מכונה וירטואלית של קצה העורף. מחליפים את
[SERVER-VM]בשם של המכונה הווירטואלית, ואת[ZONE]בתחום (zone) של המכונה הווירטואלית.gcloud compute instances delete-access-config [SERVER-VM] \ --zone=[ZONE] \ --access-config-name=external-nat
API
שולחים בקשת POST לשיטת instances.deleteAccessConfig לכל מכונה וירטואלית בקצה העורפי, מחליפים את vm-a1 בשם המכונה, ואת us-west1-a באזור של המכונה הווירטואלית.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a1/deleteAccessConfig?accessConfig=external-nat&networkInterface=None
שימוש בכתובת IP פנימית שמורה
כשיוצרים מכונות וירטואליות (VM) של קצה עורפי וקבוצות של מכונות וירטואליות, המכונה הווירטואלית משתמשת בכתובת IPv4 או IPv6 פנימית וארעית.
בשלבים הבאים מוסבר איך להפוך כתובת IPv4 או IPv6 פנימית לכתובת IPv4 או IPv6 פנימית סטטית, ואז לעדכן את מכונת ה-VM כך שתשתמש בכתובת ה-IP הפנימית הסטטית:
- העברה של כתובת IPv4 או IPv6 פנימית ארעית שנמצאת בשימוש לכתובת סטטית.
- שינוי או הקצאה של כתובת IPv6 פנימית למכונה קיימת.
לחלופין, אפשר לבצע את השלבים הבאים כדי להזמין כתובת IPv4 או IPv6 פנימית סטטית חדשה, ואז לעדכן את מכונת ה-VM כך שתשתמש בכתובת ה-IP הפנימית הסטטית:
שמירת כתובת IPv4 או IPv6 פנימית סטטית חדשה.
בניגוד להזמנת כתובת IPv4 פנימית, בהזמנת כתובת IPv6 פנימית אין תמיכה בהזמנת כתובת IP ספציפית מתת-הרשת. במקום זאת, מוקצה באופן אוטומטי טווח כתובות IPv6 פנימיות
/96מתוך טווח כתובות ה-IPv6 הפנימיות/64של תת-הרשת.
מידע נוסף מופיע במאמר איך שומרים כתובת IP פנימית סטטית.
אישור תנועה בכל היציאות
כלל ההעברה של מאזן העומסים, ולא השירות לקצה העורפי, קובע את היציאה או היציאות שדרכן מאזן העומסים מקבל תעבורה. מידע על המטרה של כל רכיב זמין במאמר רכיבים.
כשיצרתם את כלל ההעברה של מאזן העומסים בדוגמה הזו, הגדרתם את היציאות 80, 8008, 8080 ו-8088. סקריפט לטעינה בזמן ההפעלה שמתקין את Apache גם מגדיר אותו לקבלת חיבורי HTTPS ביציאות 443 ו-8443.
כדי לתמוך בשש היציאות האלה, אפשר להגדיר את כלל ההעברה כך שיקבל תנועה בכל היציאות. בשיטה הזו, אפשר גם להגדיר את כלל חומת האש או הכללים שמאפשרים חיבורים נכנסים למכונות וירטואליות עורפיות, כך שהם יאפשרו רק יציאות מסוימות.
במאמר הזה מוסבר איך למחוק את כלל ההעברה הנוכחי של מאזן העומסים וליצור כלל חדש שמקבל תנועה בכל היציאות.
מידע נוסף על מקרים שבהם כדאי להשתמש בהגדרה הזו זמין במאמר בנושא מאזנים פנימיים של עומסי רשת להעברת סיגנל ללא שינוי וכללי העברה עם כתובת IP משותפת.
המסוף
מחיקת כלל ההעברה ויצירת כלל חדש
נכנסים לדף Load balancing במסוף Google Cloud .
לוחצים על
be-ilbמאזן העומסים ואז על עריכה.לוחצים על Frontend configuration.
מעבירים את העכבר מעל כלל ההעברה
10.1.2.9ולוחצים על מחיקה.לוחצים על Add frontend IP and port.
בקטע New Frontend IP and port (כתובת IP חדשה של חזית האתר ופורט), מזינים את הפרטים הבאים ולוחצים על Done (סיום):
- Name (שם):
fr-ilb - Subnetwork:
lb-subnet - כתובת IP פנימית:
ip-ilb - יציאות: הכול.
- Name (שם):
לפני שממשיכים, מוודאים שלצד Frontend configuration מופיע סימן וי כחול.
לוחצים על בדיקה וסיום ובודקים את ההגדרות של איזון העומסים.
לוחצים על יצירה.
gcloud
מוחקים את כלל ההעברה הקיים,
fr-ilb.gcloud compute forwarding-rules delete fr-ilb \ --region=us-west1יוצרים כלל העברה חלופי, עם אותו שם, שהגדרת היציאה שלו משתמשת במילת המפתח
ALL. הפרמטרים האחרים של כלל ההעברה יישארו ללא שינוי.gcloud compute forwarding-rules create fr-ilb \ --region=us-west1 \ --load-balancing-scheme=internal \ --network=lb-network \ --subnet=lb-subnet \ --address=10.1.2.99 \ --ip-protocol=TCP \ --ports=ALL \ --backend-service=be-ilb \ --backend-service-region=us-west1
API
כדי למחוק את כלל ההעברה, שולחים בקשת DELETE ל-method forwardingRules.delete.
DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules/fr-ilb
כדי ליצור את כלל ההעברה, שולחים בקשת POST אל ה-method forwardingRules.insert.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules
{
"name": "fr-ilb",
"IPAddress": "10.1.2.99",
"IPProtocol": "TCP",
"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",
"networkTier": "PREMIUM"
}
בדיקת התנועה בכל היציאות שהוגדרו
מתחברים למופע של מכונת הלקוח הווירטואלית ובודקים חיבורי HTTP ו-HTTPS.
מתחברים למכונה הווירטואלית של הלקוח:
gcloud compute ssh vm-client --zone=us-west1-a
בודקים את הקישוריות ל-HTTP בכל ארבע היציאות:
curl http://10.1.2.99 curl http://10.1.2.99:8008 curl http://10.1.2.99:8080 curl http://10.1.2.99:8088
בודקים את הקישוריות של HTTPS ביציאות
443ו-8443. הדגל--insecureנדרש כי כל שרת Apache בהגדרת הדוגמה משתמש באישור בחתימה עצמית.curl https://10.1.2.99 --insecure curl https://10.1.2.99:8443 --insecure
שימו לב שבקשות HTTP (בכל ארבע היציאות) ובקשות HTTPS (בשתי היציאות) מפוזרות בין כל מכונות ה-VM של העורף.
קבלת תנועה בכמה יציאות באמצעות שני כללי העברה
כשיצרתם את כלל ההעברה של מאזן העומסים בדוגמה הזו, הגדרתם את היציאות 80, 8008, 8080 ו-8088. סקריפט לטעינה בזמן ההפעלה שמתקין את Apache גם מגדיר אותו לקבלת חיבורי HTTPS ביציאות 443 ו-8443.
אסטרטגיה חלופית להגדרת כלל העברה יחיד לקבלת תנועה בכל היציאות היא ליצור כמה כללי העברה, שכל אחד מהם תומך בחמש יציאות או פחות.
במאמר הזה מוסבר איך להחליף את כלל ההעברה של מאזן העומסים לדוגמה בשני כללי העברה. כלל אחד לטיפול בתנועה ביציאות 80, 8008, 8080 ו-8088, וכלל שני לטיפול בתנועה ביציאות 443 ו-8443.
מידע נוסף על מקרים שבהם כדאי להשתמש בהגדרה הזו זמין במאמר בנושא מאזנים פנימיים של עומסי רשת להעברת סיגנל ללא שינוי וכללי העברה עם כתובת IP משותפת.
המסוף
נכנסים לדף Forwarding rules במסוף Google Cloud .
בעמודה שם, לוחצים על
fr-ilbואז על מחיקה.נכנסים לדף Load balancing במסוף Google Cloud .
בעמודה שם, לוחצים על
be-ilb.לוחצים על Edit.
לוחצים על Frontend configuration.
לוחצים על Add frontend IP and port.
בקטע New Frontend IP and port:
- בשדה Name (שם), מזינים
fr-ilb-http. - בשדה Subnetwork, בוחרים באפשרות
lb-subnet. - בשדה Internal IP purpose (מטרת כתובת ה-IP הפנימית), בוחרים באפשרות Shared (משותפת).
- ברשימה IP address, בוחרים באפשרות Create IP address, מזינים את הפרטים הבאים ולוחצים על Reserve:
- Name (שם):
internal-10-1-2-99 - כתובת IP סטטית: אני רוצה לבחור
- כתובת IP מותאמת אישית:
10.1.2.99
- Name (שם):
- בקטע יציאות, בוחרים באפשרות כמה, ואז בשדה מספרי יציאות מזינים
80,8008,8080ו-8088. - לוחצים על סיום.
- בשדה Name (שם), מזינים
לוחצים על Add frontend IP and port.
בקטע New Frontend IP and port:
- בשדה Name (שם), מזינים
fr-ilb-https. - בשדה Subnetwork, בוחרים באפשרות
lb-subnet. - בשדה Internal IP purpose (מטרת כתובת ה-IP הפנימית), בוחרים באפשרות Shared (משותפת).
- ברשימה IP address בוחרים באפשרות
internal-10-1-2-99. - בשדה יציאות, בוחרים באפשרות כמה, ואז בשדה מספרי יציאות מזינים
443ו-8443. - לוחצים על סיום.
- בשדה Name (שם), מזינים
לוחצים על בדיקה וסיום ובודקים את הגדרות מאזן העומסים.
לוחצים על עדכון.
gcloud
מוחקים את כלל ההעברה הקיים,
fr-ilb.gcloud compute forwarding-rules delete fr-ilb \ --region=us-west1יוצרים כתובת IP פנימית סטטית (שמורה) בשביל
10.1.2.99ומגדירים את הדגל--purposeשלה לערךSHARED_LOADBALANCER_VIP. הדגל--purposeנדרש כדי ששני כללי העברה פנימיים יוכלו להשתמש באותה כתובת IP פנימית.gcloud compute addresses create internal-10-1-2-99 \ --region=us-west1 \ --subnet=lb-subnet \ --addresses=10.1.2.99 \ --purpose=SHARED_LOADBALANCER_VIP- יוצרים שני כללי העברה חלופיים עם הפרמטרים הבאים:
gcloud compute forwarding-rules create fr-ilb-http \ --region=us-west1 \ --load-balancing-scheme=internal \ --network=lb-network \ --subnet=lb-subnet \ --address=10.1.2.99 \ --ip-protocol=TCP \ --ports=80,8008,8080,8088 \ --backend-service=be-ilb \ --backend-service-region=us-west1gcloud compute forwarding-rules create fr-ilb-https \ --region=us-west1 \ --load-balancing-scheme=internal \ --network=lb-network \ --subnet=lb-subnet \ --address=10.1.2.99 \ --ip-protocol=TCP \ --ports=443,8443 \ --backend-service=be-ilb \ --backend-service-region=us-west1
API
כדי למחוק את כלל ההעברה, שולחים בקשת DELETE ל-method forwardingRules.delete.
DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules/fr-ilb
כדי ליצור כתובת IP פנימית סטטית (שמורה) בשביל 10.1.2.99 ולהגדיר את הייעוד שלה ל-SHARED_LOADBALANCER_VIP, שולחים בקשת POST אל ה-method addresses.insert.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/addresses
{
"name": "internal-10-1-2-99",
"address": "10.1.2.99",
"prefixLength": 32,
"addressType": INTERNAL,
"purpose": SHARED_LOADBALANCER_VIP,
"subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet"
}
כדי ליצור שני כללי העברה, שולחים שתי בקשות POST אל ה-method forwardingRules.insert.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules
{
"name": "fr-ilb-http",
"IPAddress": "10.1.2.99",
"IPProtocol": "TCP",
"ports": [
"80", "8008", "8080", "8088"
],
"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"
}
{
"name": "fr-ilb-https",
"IPAddress": "10.1.2.99",
"IPProtocol": "TCP",
"ports": [
"443", "8443"
],
"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"
}
בדיקת התנועה בהגדרת כמה יציאות
מתחברים למופע של מכונת הלקוח הווירטואלית ובודקים חיבורי HTTP ו-HTTPS.
מתחברים למכונה הווירטואלית של הלקוח:
gcloud compute ssh vm-client --zone=us-west1-a
בודקים את הקישוריות ל-HTTP בכל ארבע היציאות:
curl http://10.1.2.99 curl http://10.1.2.99:8008 curl http://10.1.2.99:8080 curl http://10.1.2.99:8088
בודקים את הקישוריות של HTTPS ביציאות
443ו-8443. הדגל--insecureנדרש כי כל שרת Apache בהגדרת הדוגמה משתמש באישור בחתימה עצמית.curl https://10.1.2.99 --insecure curl https://10.1.2.99:8443 --insecure
שימו לב שבקשות HTTP (בכל ארבע היציאות) ובקשות HTTPS (בשתי היציאות) מפוזרות בין כל מכונות ה-VM של העורף.
שימוש בזיקה לסשן
ההגדרה לדוגמה יוצרת שירות backend ללא זיקה לסשן.
הליך זה מראה לך איך לעדכן את שירות הקצה העורפי עבור מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי שמופיע בדוגמה, כך שישתמש בזיקה לסשן (session affinity) על סמך hash שנוצר מכתובות ה-IP של הלקוח ומכתובת ה-IP של כלל ההעברה הפנימי של מאזן העומסים.
במאמר אפשרויות של זיקה לסשן מפורטים סוגי הזיקה לסשן הנתמכים.
.המסוף
נכנסים לדף Load balancing במסוף Google Cloud .
לוחצים על be-ilb (השם של שירות ה-Backend שיצרתם בדוגמה הזו) ואז על עריכה.
בדף Edit internal passthrough Network Load Balancer (עריכת מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי), לוחצים על Backend configuration (הגדרת קצה עורפי).
ברשימה Session affinity (העדפה של סשן), בוחרים באפשרות Client IP (כתובת IP של לקוח).
לוחצים על עדכון.
gcloud
משתמשים בפקודה gcloud הבאה כדי לעדכן את שירות לקצה העורפי be-ilb, ומציינים את הזיקה לסשן (session affinity) לכתובת IP של לקוח:
gcloud compute backend-services update be-ilb \
--region=us-west1 \
--session-affinity CLIENT_IP
API
שולחים בקשת PATCH אל ה-method regionBackendServices/patch.
PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb
{
"sessionAffinity": "CLIENT_IP"
}
הגדרת מדיניות מעקב אחר חיבורים
בקטע הזה מוסבר איך לעדכן את שירות הקצה העורפי כדי לשנות את מדיניות מעקב החיבורים שמוגדרת כברירת מחדל במאזן העומסים.
מדיניות מעקב אחר חיבורים כוללת את ההגדרות הבאות:
gcloud
כדי לעדכן את מדיניות מעקב החיבורים בשירות לקצה העורפי, משתמשים בפקודה gcloud compute
backend-services הבאה:
gcloud compute backend-services update BACKEND_SERVICE \
--region=REGION \
--tracking-mode=TRACKING_MODE \
--connection-persistence-on-unhealthy-backends=CONNECTION_PERSISTENCE_BEHAVIOR \
--idle-timeout-sec=IDLE_TIMEOUT_VALUE
מחליפים את ה-placeholders בערכים תקינים:
-
BACKEND_SERVICE: השירות לקצה העורפי שאתם מעדכנים -
REGION: האזור של שירות ה-Backend שאתם מעדכנים -
TRACKING_MODE: מצב מעקב החיבור שבו יש להשתמש עבור מנות נכנסות. לרשימת הערכים הנתמכים, ראו מצב מעקב. -
CONNECTION_PERSISTENCE_BEHAVIOR: התנהגות של חיבור מתמשך כששרתי קצה עורפיים לא תקינים. רשימת הערכים הנתמכים מופיעה במאמר חיבור מתמשך בשרתי קצה עורפיים לא תקינים. -
IDLE_TIMEOUT_VALUE: מספר השניות שבהן צריך לשמור רשומה בטבלת מעקב החיבורים אחרי שמאזן העומסים מעבד את המנה האחרונה שתואמת לרשומה
שימוש בהעדפה אזורית
בקטע הזה מוסבר איך להגדיר מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי כדי להפעיל זיקה אזורית בשירות לקצה העורפי של מאזן העומסים. כברירת מחדל, ההגדרה 'שייכות לאזור' מושבתת. מידע נוסף זמין במאמר בנושא זיקה אזורית למאזני עומסי רשת פנימיים להעברת סיגנל ללא שינוי.
משתמשים בפקודה הבאה כדי להגדיר את האפשרות
ZONAL_AFFINITY_STAY_WITHIN_ZONE: מידע נוסף על האפשרות הזוZONAL_AFFINITY_STAY_WITHIN_ZONEgcloud beta compute backend-services update be-ilb \ --zonal-affinity-spillover=ZONAL_AFFINITY_STAY_WITHIN_ZONE \ --region=us-west1משתמשים בפקודה הבאה כדי להגדיר את
ZONAL_AFFINITY_SPILL_CROSS_ZONEהזיקה לאזור עם יחס ברירת המחדל של0.0העברה אוטומטית. מידע נוסף על האפשרות הזו מופיע בקטעים איך פועליםZONAL_AFFINITY_SPILL_CROSS_ZONEויחס ההעברה ויחס העברה אפסי.gcloud beta compute backend-services update be-ilb \ --zonal-affinity-spillover=ZONAL_AFFINITY_SPILL_CROSS_ZONE \ --region=us-west1משתמשים בפקודה הבאה כדי להגדיר
ZONAL_AFFINITY_SPILL_CROSS_ZONEהעדפה אזורית עם יחס מעבר של 30%. מידע נוסף על האפשרות הזו זמין בקטעים איך פועליםZONAL_AFFINITY_SPILL_CROSS_ZONEויחס ההעברה ויחס העברה שאינו אפס.gcloud beta compute backend-services update be-ilb \ --zonal-affinity-spillover=ZONAL_AFFINITY_SPILL_CROSS_ZONE \ --zonal-affinity-spillover-ratio=0.3 \ --region=us-west1
יצירת כלל העברה ברשת משנה אחרת
התהליך הזה יוצר כתובת IP שנייה וכלל העברה ברשת משנה אחרת, כדי להדגים שאפשר ליצור כמה כללי העברה למאזן עומסי רשת פנימי מסוג העברת תנועה. האזור של כלל ההעברה צריך להיות זהה לאזור של שירות לקצה העורפי.
בכפוף לכללי חומת האש, לקוחות בכל רשת משנה באזור יכולים ליצור קשר עם כתובת ה-IP של מאזן עומסי הרשת הפנימי להעברת סיגנל ללא שינוי.
המסוף
הוספת תת-הרשת השנייה
נכנסים לדף VPC networks במסוף Google Cloud .
לוחצים על יצירת רשת VPC.
לחץ על
lb-network.בקטע Subnets (רשתות משנה), מבצעים את הפעולות הבאות:
- לוחצים על הוספת רשת משנה.
- בקטע New subnet (רשת משנה חדשה), מזינים את הפרטים הבאים:
- Name (שם):
second-subnet - אזור:
us-west1 - טווח כתובות IP:
10.5.6.0/24
- Name (שם):
- לוחצים על הוספה.
הוספת כלל ההעברה השני
נכנסים לדף Load balancing במסוף Google Cloud .
לוחצים על
be-ilbמאזן העומסים ואז על עריכה.לוחצים על Frontend configuration.
לוחצים על Add frontend IP and port.
בקטע New Frontend IP and port, מגדירים את השדות הבאים ולוחצים על Done:
- Name (שם):
fr-ilb-2 - IP version: IPv4
- Subnetwork:
second-subnet - כתובת IP פנימית:
ip-ilb - יציאות:
80ו-443
- Name (שם):
לפני שממשיכים, מוודאים שלצד Frontend configuration מופיע סימן וי כחול.
לוחצים על בדיקה וסיום ובודקים את הגדרות מאזן העומסים.
לוחצים על יצירה.
gcloud
יוצרים תת-רשת שנייה ברשת
lb-networkבאזורus-west1:gcloud compute networks subnets create second-subnet \ --network=lb-network \ --range=10.5.6.0/24 \ --region=us-west1יוצרים כלל העברה שני ליציאות 80 ו-443. הפרמטרים האחרים של הכלל הזה, כולל כתובת ה-IP ושירות לקצה העורפי, זהים לאלה של כלל ההעברה הראשי,
fr-ilb.gcloud compute forwarding-rules create fr-ilb-2 \ --region=us-west1 \ --load-balancing-scheme=internal \ --network=lb-network \ --subnet=second-subnet \ --address=10.5.6.99 \ --ip-protocol=TCP \ --ports=80,443 \ --backend-service=be-ilb \ --backend-service-region=us-west1
API
שולחים בקשת POST אל ה-method subnetworks.insert.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks
{
"name": "second-subnet",
"network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
"ipCidrRange": "10.5.6.0/24",
"privateIpGoogleAccess": false
}
כדי ליצור את כלל ההעברה, שולחים בקשת POST אל ה-method forwardingRules.insert.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules
{
"name": "fr-ilb-2",
"IPAddress": "10.5.6.99",
"IPProtocol": "TCP",
"ports": [
"80", "443"
],
"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"
}
בדיקת כלל ההעברה החדש
מתחברים למופע של מכונת הלקוח הווירטואלית ובודקים חיבורי HTTP ו-HTTPS לכתובות ה-IP.
מתחברים למכונה הווירטואלית של הלקוח:
gcloud compute ssh vm-client --zone=us-west1-a
בודקים את הקישוריות של HTTP לכתובות ה-IP:
curl http://10.1.2.99 curl http://10.5.6.99
בודקים את הקישוריות ב-HTTPS. חובה להשתמש ב-
--insecureכי הגדרת שרת Apache בהגדרה לדוגמה משתמשת באישורים בחתימה עצמית.curl https://10.1.2.99 --insecure curl https://10.5.6.99 --insecure
שימו לב שהבקשות מטופלות על ידי כל המכונות הווירטואליות בעורף, בלי קשר לפרוטוקול (HTTP או HTTPS) או לכתובת ה-IP שבה נעשה שימוש.
שימוש בחלוקת משנה של נתונים בעורף המערכת
ההגדרה לדוגמה יוצרת שירות backend ללא חלוקה לקבוצות משנה.
בקטע הזה מוסבר איך להפעיל חלוקה לקבוצות משנה בשירות לקצה העורפי של מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי שמוצג בדוגמה, כדי שהפריסה תוכל להתרחב למספר גדול יותר של שרתים עורפיים (backend instances).
מומלץ להפעיל חלוקה לקבוצות משנה רק אם אתם צריכים לתמוך ביותר מ-250 מכונות וירטואליות בבק-אנד במאזן עומסים יחיד.
מידע נוסף על תרחיש השימוש הזה זמין במאמר בנושא חלוקת משנה של קצה העורפי.
gcloud
משתמשים בפקודה gcloud הבאה כדי לעדכן את שירות לקצה העורפי be-ilb, ומציינים מדיניות של חלוקה לקבוצות משנה:
gcloud compute backend-services update be-ilb \
--subsetting-policy=CONSISTENT_HASH_SUBSETTING
API
שולחים בקשת PATCH אל ה-method regionBackendServices/patch.
PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb
{
"subsetting":
{
"policy": CONSISTENT_HASH_SUBSETTING
}
}
יצירת מאזן עומסים ל-Packet Mirroring
רפליקציה של חבילות נתונים מאפשר לכם להעתיק ולאסוף נתוני מנות ממופעים ספציפיים ב-VPC. הנתונים שנאספים יכולים לעזור לכם לזהות איומי אבטחה ולעקוב אחרי ביצועי האפליקציה.
רפליקציה של חבילות נתונים דורשת מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי כדי לאזן את התנועה לקבוצת מופעים של יעדי איסוף. כדי ליצור מאזן עומסי רשת פנימי מסוג Network Load Balancer לרפליקציה של חבילות נתונים, פועלים לפי השלבים הבאים.
המסוף
התחלת ההגדרה
נכנסים לדף Load balancing במסוף Google Cloud .
- לוחצים על Create load balancer (יצירת מאזן עומסים).
- בקטע Type of load balancer (סוג מאזן העומסים), בוחרים באפשרות Network Load Balancer (TCP/UDP/SSL) (מאזן עומסים ברשת (TCP/UDP/SSL)) ולוחצים על Next (הבא).
- בקטע Proxy or passthrough (פרוקסי או העברה), בוחרים באפשרות Passthrough load balancer (מאזן עומסים להעברה) ולוחצים על Next (הבא).
- בקטע גלוי לכולם או פנימי, בוחרים באפשרות פנימי ולוחצים על הבא.
- לוחצים על Configure (הגדרה).
הגדרה בסיסית
- בשדה Load balancer name, מזינים שם.
- בשדה Region, בוחרים את האזור של מכונות ה-VM שבהן רוצים לשכפל מנות.
- בקטע רשת, בוחרים את הרשת שבה רוצים לשכפל מנות.
- לוחצים על Backend configuration.
- בקטע New Backend (קצה עורפי חדש), בשדה Instance group (קבוצת מכונות), בוחרים את קבוצת המכונות שאליה רוצים להעביר את החבילות.
- ברשימה בדיקת תקינות, לוחצים על יצירת בדיקת תקינות ומזינים את הפרטים הבאים:
- בשדה Name, מזינים שם לבדיקת תקינות.
- ברשימה Protocol, בוחרים באפשרות HTTP.
- בשדה יציאה, מזינים
80.
- לוחצים על יצירה.
- לוחצים על Frontend configuration.
- בקטע New Frontend IP and port, מבצעים את הפעולות הבאות:
- בשדה Name (שם), מזינים שם.
- בשדה Subnetwork, בוחרים רשת משנה באותו אזור של המכונות לרפליקציה.
- בקטע Ports (יציאות), בוחרים באפשרות All (הכול).
- לוחצים על הגדרות מתקדמות ומסמנים את התיבה הפעלת מאזן העומסים הזה לשיקוף מנות.
- לוחצים על סיום.
- לוחצים על יצירה.
gcloud
יוצרים בדיקת תקינות חדשה של HTTP אזורי כדי לבדוק את הקישוריות של HTTP לקבוצת מופעים ביציאה 80:
gcloud compute health-checks create http HEALTH_CHECK_NAME \ --region=REGION \ --port=80מחליפים את מה שכתוב בשדות הבאים:
-
HEALTH_CHECK_NAME: השם של בדיקת תקינות. -
REGION: האזור של המופעים של מכונות וירטואליות שאתם רוצים לשכפל את חבילות הנתונים שלהם.
-
יוצרים שירות קצה עורפי לתנועת HTTP:
gcloud compute backend-services create COLLECTOR_BACKEND_SERVICE \ --region=REGION \ --health-checks-region=REGION \ --health-checks=HEALTH_CHECK_NAME \ --load-balancing-scheme=internal \ --protocol=tcpמחליפים את מה שכתוב בשדות הבאים:
-
COLLECTOR_BACKEND_SERVICE: השם של שירות הקצה העורפי. -
REGION: האזור של המופעים של מכונות וירטואליות שרוצים לשכפל את חבילות הנתונים שלהם. -
HEALTH_CHECK_NAME: השם של בדיקת תקינות.
-
מוסיפים קבוצת מופעים לשירות הקצה העורפי:
gcloud compute backend-services add-backend COLLECTOR_BACKEND_SERVICE \ --region=REGION \ --instance-group=INSTANCE_GROUP \ --instance-group-zone=ZONEמחליפים את מה שכתוב בשדות הבאים:
-
COLLECTOR_BACKEND_SERVICE: השם של שירות הקצה העורפי. -
REGION: האזור של קבוצת המכונות. -
INSTANCE_GROUP: השם של קבוצת המכונות. -
ZONE: האזור של קבוצת המכונות.
-
יוצרים כלל העברה לשירות הקצה העורפי:
gcloud compute forwarding-rules create FORWARDING_RULE_NAME \ --region=REGION \ --network=NETWORK \ --subnet=SUBNET \ --backend-service=COLLECTOR_BACKEND_SERVICE \ --load-balancing-scheme=internal \ --ip-protocol=TCP \ --ports=all \ --is-mirroring-collectorמחליפים את מה שכתוב בשדות הבאים:
-
FORWARDING_RULE_NAME: השם של כלל ההעברה. -
REGION: האזור של כלל ההעברה. -
NETWORK: הרשת של כלל ההעברה. -
SUBNET: רשת משנה באזור של המכונות הווירטואליות שאתם רוצים לשכפל את חבילות הנתונים שלהן. -
COLLECTOR_BACKEND_SERVICE: השירות לקצה העורפי של מאזן העומסים הזה.
-
המאמרים הבאים
- מידע חשוב על מושגים בסיסיים זמין במאמר בנושא סקירה כללית של מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי.
- מידע חשוב על יתירות כשל זמין במאמר מושגים בנושא יתירות כשל במאזני עומסי רשת פנימיים להעברת סיגנל ללא שינוי.
- במאמר איזון עומסים פנימי ושמות DNS מפורטות אפשרויות שמות ה-DNS שמאזן העומסים יכול להשתמש בהן.
- במאמר הגדרת יתירות כשל למאזני עומסי רשת פנימיים להעברת סיגנל ללא שינוי מפורטים שלבי ההגדרה ודוגמה להגדרת יתירות כשל למאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי.
- מידע על הגדרת רישום ביומן ומעקב במאזני עומסי רשת פנימיים להעברת סיגנל ללא שינוי זמין במאמר רישום ביומן ומעקב במאזני עומסי רשת פנימיים להעברת סיגנל ללא שינוי.
- במאמר מאזני עומסי רשת פנימיים להעברת סיגנל ללא שינוי ורשתות מחוברות מוסבר איך לגשת למאזני עומסי רשת פנימיים להעברת סיגנל ללא שינוי מרשתות שכנות שמחוברות לרשת ה-VPC.
- במאמר פתרון בעיות במאזני עומסי רשת פנימיים להעברת סיגנל ללא שינוי מוסבר איך לפתור בעיות במאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי.
- ניקוי ההגדרות של מאזן העומסים
נספח: מבוא לסקריפט Bash של IPv6
בקטע הזה מופיע תיאור קצר של פקודות הרישות השונות שקשורות לסקריפט לטעינה בזמן ההפעלה של Bash שמשמש להתקנת שרת IPv6 TCP במכונות הווירטואליות של ה-בק-אנד. אין צורך לחזור על השלבים האלה. הן מפורטות כאן רק כדי לספק הקשר ולעזור להבין.
הצגת כל מסלולי IPv6.
ip -6 route show table all
הפלט אמור להיראות כך:
fd20:307:120c:2000::/64 via fe80::57:2ff:fe36:ffbe dev ens4 proto ra metric 100 expires 62sec pref medium fe80::/64 dev ens4 proto kernel metric 256 pref medium default via fe80::57:2ff:fe36:ffbe dev ens4 proto ra metric 100 expires 62sec mtu 1460 pref medium local ::1 dev lo table local proto kernel metric 0 pref medium local fd20:307:120c:2000:0:b:: dev ens4 table local proto kernel metric 0 pref medium local fe80::56:24ff:feb1:59b3 dev ens4 table local proto kernel metric 0 pref medium multicast ff00::/8 dev ens4 table local proto kernel metric 256 pref medium
מהפלט של השלב הקודם, מזהים את הפרטים הבאים:
- כתובת IPv6 מקומית (מתחילה ב-fe80::/10): בפלט לדוגמה, הכתובת המקומית היא fe80::57:2ff:fe36:ffbe. כתובת ה-IP המקומית הזו משמשת בנתיב ברירת המחדל שמוגדר בטבלת הניתוב 1. מסלול ברירת המחדל הזה נוצר בשלב 2.
- תת-רשת /64: תת-הרשת הזו מוזכרת בכלל הניתוב של המדיניות שמבוססת על מקור בשלב 3
מוסיפים נתיב ברירת מחדל מותאם אישית בטבלת הניתוב 1.
הפקודה הבאה שולחת חבילות נתונים לשער באמצעות ממשק הרשת שנקרא
ens4.sudo ip route add default via GATEWAY_ADDRESS dev ens4 table 1
אחרי שמריצים את הפקודה הזו, מתווסף נתיב ברירת מחדל לטבלת ניתוב בהתאמה אישית (טבלה 1), שמצביע על השער
fe80::57:2ff:fe36:ffbeדרך הממשק ens4.אם מריצים שוב את הפקודה
ip -6 route show table all, הפלט שמתקבל הוא:default via fe80::57:2ff:fe36:ffbe dev ens4 table 1 metric 1024 pref medium fd20:307:120c:2000::/64 via fe80::57:2ff:fe36:ffbe dev ens4 proto ra metric 100 expires 89sec pref medium fe80::/64 dev ens4 proto kernel metric 256 pref medium default via fe80::57:2ff:fe36:ffbe dev ens4 proto ra metric 100 expires 89sec mtu 1460 pref medium local ::1 dev lo table local proto kernel metric 0 pref medium local fd20:307:120c:2000:0:1::/96 dev ens4 table local proto 66 metric 1024 pref medium local fd20:307:120c:2000:0:b:: dev ens4 table local proto kernel metric 0 pref medium local fe80::56:24ff:feb1:59b3 dev ens4 table local proto kernel metric 0 pref medium multicast ff00::/8 dev ens4 table local proto kernel metric 256 pref medium
מוסיפים כלל ניתוב על סמך מדיניות שמבוסס על מקור.
הפקודה הבאה מוסיפה כלל לניתוב כל החבילות היוצאות שמקורן ברשת משנה שצוינה. אם כתובת המקור תואמת לרשת המשנה, המערכת משתמשת בנתיב ברירת המחדל שמוגדר בטבלה 1 כדי להעביר את התנועה.
sudo ip -6 rule add from SUBNET_RANGE table 1
כדי להציג את רשימת כללי ניתוב המדיניות, מריצים את הפקודה הבאה.
ip -6 rule show
הפלט אמור להיראות כך:
0: from all lookup local 32765: from fd20:307:120c:2000::/64 lookup 1 32766: from all lookup main
השורה עם
from fd20:... lookup 1היא הכלל שהוספתם – הכלל שמורה לליבה להשתמש בטבלת הניתוב 1 לתנועה שמגיעה מרשת המשנה הזו.מאפשרים לשרת לבצע binding לכתובת IPv6 לא מקומית – כתובת ה-VIP של מאזן העומסים.
sudo sysctl -w net.ipv6.ip_nonlocal_bind=1