במדריך הזה נשתמש בדוגמה כדי ללמד את העקרונות הבסיסיים של Google Cloudמאזני עומסי רשת פנימיים להעברת סיגנל ללא שינוי. לפני שתתחילו, כדאי שתכירו את המושגים הבאים:
- מושגים שקשורים למאזני עומסי רשת פנימיים להעברת סיגנל ללא שינוי
- איך פועלים מאזני עומסי רשת פנימיים להעברת סיגנל ללא שינוי
- סקירה כללית של כללי חומת האש
- מושגים שקשורים לבדיקות תקינות
לחצו על תראו לי איך כדי לקרוא הסבר מפורט על המשימה ישירות במסוף Google Cloud :
הרשאות
כדי לפעול לפי המדריך הזה, צריך ליצור מכונות ולשנות רשת בפרויקט. אתם צריכים להיות בעלים או עורכים של הפרויקט, או שצריכים להיות לכם כל תפקידי ה-IAM הבאים ב-Compute Engine:
| משימה | התפקיד הנדרש |
|---|---|
| יצירת רשתות, רשתות משנה ורכיבים של מאזן עומסים | אדמין של רשת Compute ( roles/compute.networkAdmin)
|
| הוספה והסרה של כללים לחומת האש | אדמין אבטחה ב-Compute ( roles/compute.securityAdmin)
|
| יצירת מכונות | Compute Instance Admin ( roles/compute.instanceAdmin)
|
מידע נוסף זמין במדריכים הבאים:
הגדרת מאזן עומסים עם רשתות משנה וקצוות עורפיים מסוג IPv4 בלבד
במדריך הזה נסביר איך להגדיר ולבדוק מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי. בשלבים שבקטע הזה מוסבר איך להגדיר את:
- דוגמה שבה משתמשים ברשת VPC במצב בהתאמה אישית בשם
lb-network. - רשת משנה עם מחסנית אחת (
stack-typeמוגדרת ל-IPv4), שנדרשת לתעבורת נתונים ב-IPv4. כשיוצרים רשת משנה עם מחסנית אחת ברשת VPC במצב מותאם אישית, בוחרים טווח של רשת משנה ב-IPv4 בשביל רשת המשנה. - כללי חומת אש שמאפשרים חיבורים נכנסים למכונות וירטואליות (VM) עורפיות.
- קבוצת המכונות לקצה העורפי, שנמצאת באזור ובתת-הרשת הבאים בדוגמה הזו:
- אזור:
us-west1 - תת-רשת:
lb-subnet, עם טווח כתובות IPv4 ראשי10.1.2.0/24.
- אזור:
- ארבע מכונות וירטואליות לקצה העורפי: שתי מכונות וירטואליות בקבוצת מכונות לא מנוהלת באזור
us-west1-aושתי מכונות וירטואליות בקבוצת מכונות לא מנוהלת באזורus-west1-c. כדי להדגים גישה גלובלית, בדוגמה הזו יוצרים מכונה וירטואלית שנייה של לקוח לבדיקה באזור וברשת משנה אחרים:- אזור:
europe-west1 - רשת משנה:
europe-subnet, עם טווח כתובות IP ראשי10.3.4.0/24
- אזור:
- מכונה וירטואלית אחת של לקוח לבדיקת החיבורים.
- הרכיבים הבאים של מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי:
- בדיקת תקינות של שירות הקצה העורפי.
- שירות פנימי לקצה העורפי באזור
us-west1, לניהול חלוקת החיבורים לשתי הקבוצות של המכונות בתחום. - כלל העברה פנימי וכתובת IP פנימית לממשק הקצה של מאזן העומסים.
כך נראית הארכיטקטורה בדוגמה הזו:
הגדרת רשת, אזור ורשת משנה
כדי ליצור את הרשת ואת רשת המשנה שבדוגמה, פועלים לפי השלבים הבאים.
המסוף
במסוף Google Cloud , נכנסים לדף רשתות VPC.
לוחצים על Create VPC network.
בשדה Name, מזינים
lb-network.בקטע Subnets:
- מגדירים את Subnet creation mode ל-Custom.
- בקטע New subnet, מזינים את הפרטים הבאים:
- שם:
lb-subnet - אזור:
us-west1 - IP stack type: IPv4 (single-stack)
- טווח כתובות IP:
10.1.2.0/24
- שם:
- לוחצים על סיום.
- לוחצים על Add subnet ומזינים את הפרטים הבאים:
- שם:
europe-subnet - אזור:
europe-west1 - IP stack type: IPv4 (single-stack)
- טווח כתובות IP:
10.3.4.0/24
- שם:
- לוחצים על סיום.
לוחצים על יצירה.
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: כלל תעבורת נתונים נכנסת שרלוונטי לכל היעדים ברשת ה-VPC, ומאפשר תעבורת נתונים ממקורות בטווחים10.1.2.0/24ו-10.3.4.0/24. הכלל הזה מאפשר תנועה נכנסת מכל לקוח שנמצא באחת משתי רשתות המשנה. בהמשך תוכלו להגדיר ולבדוק את הגישה הגלובלית.
fw-allow-ssh: כלל תעבורת נתונים נכנסת (ingress) שרלוונטי למכונות שבהן מתבצע איזון עומסים, ומאפשר קישוריות SSH נכנסת ביציאת TCP 22 מכל כתובת. אתם יכולים לבחור טווח כתובות IP מצומצם יותר של מקורות לכלל הזה. לדוגמה, אתם יכולים לציין רק את טווחי כתובות ה-IP של המערכת שממנה תתחילו סשנים של SSH. בדוגמה הזו נעשה שימוש בתג היעדallow-sshכדי לזהות את המכונות הווירטואליות שעליהן צריך להחיל את הכלל.
fw-allow-health-check: כלל תעבורת נתונים נכנסת (ingress) שרלוונטי למכונות שמאזן העומסים פועל עליהן, ומאפשר תעבורת נתונים מGoogle Cloud טווחי בדיקות התקינות. בדוגמה הזו, תג היעדallow-health-checkמשמש לזיהוי המכונות שעליהן צריך להחיל את הכלל.
בלי הכללים האלה לחומת האש, הכלל default deny ingress חוסם את תעבורת הנתונים הנכנסת לשרתים העורפיים.
המסוף
במסוף Google Cloud , עוברים לדף מדיניות חומת אש.
כדי לאפשר תעבורת נתונים ברשת המשנה, לוחצים על Create firewall rule ומזינים את הפרטים הבאים:
- שם:
fw-allow-lb-access - רשת:
lb-network - עדיפות:
1000 - כיוון התנועה: ingress
- פעולה במקרה של התאמה: אישור
- יעדים: כל המכונות ברשת
- מסנן מקור: טווחי IPv4
- טווחי IPv4 של המקור:
10.1.2.0/24 - Protocols and ports: Allow all
- שם:
לוחצים על יצירה.
כדי לאפשר חיבורי SSH נכנסים, לוחצים שוב על Create firewall rule ומזינים את הפרטים הבאים:
- שם:
fw-allow-ssh - רשת:
lb-network - עדיפות:
1000 - כיוון התנועה: ingress
- פעולה במקרה של התאמה: אישור
- יעדים: תגי יעד שצוינו
- תגי יעד:
allow-ssh - מסנן מקור: טווחי IPv4
- טווחי IPv4 של המקור:
0.0.0.0/0 - Protocols and ports: בוחרים באפשרות Specified protocols and ports, מסמנים את התיבה TCP ומזינים
22בשדה Ports.
- שם:
לוחצים על יצירה.
כדי לאפשר בדיקות תקינות של Google Cloud , לוחצים על Create firewall rule בפעם השלישית ��מזינים את הפרטים הבאים:
- שם:
fw-allow-health-check - רשת:
lb-network - עדיפות:
1000 - כיוון התנועה: ingress
- פעולה במקרה של התאמה: אישור
- יעדים: תגי יעד שצוינו
- תגי יעד:
allow-health-check - מסנן מקור: טווחי IPv4
- טווחי IPv4 של המקור:
35.191.0.0/16 - Protocols and ports: Allow all
- שם:
לוחצים על יצירה.
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=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": [HEALTH_CHECK_RANGES],
"targetTags": [
"allow-health-check"
],
"allowed": [
{
"IPProtocol": "tcp"
},
{
"IPProtocol": "udp"
},
{
"IPProtocol": "icmp"
}
],
"direction": "INGRESS",
"logConfig": {
"enable": false
},
"disabled": false
}
מחליפים את מה שכתוב בשדות הבאים:
PROJECT_ID: מזהה הפרויקט
HEALTH_CHECK_RANGES: רשימה מופרדת בפסיקים של Google Cloud טווחי בדיקות תקינות, בפורמט של מחרוזות במירכאות (לדוגמה, "192.0.2.0/24", "198.51.100.0/24")
יצירת מכונות וירטואליות וקבוצות של מכונות לקצה העורפי
בדוגמה הזו יש שתי קבוצות של מכונות לא מנוהלות, שבכל אחת מהן יש שתי מכונות וירטואליות של שרת בקצה העורפי. כדי להדגים את האופי האזורי של מאזני עומסי רשת פנימיים להעברת סיגנל ללא שינוי, שתי קבוצות המכונות ממוקמות באזורים נפרדים, us-west1-a ו-us-west1-c.
- קבוצת המכונות
ig-aמכילה את שתי המכונות הווירטואליות האלה:vm-a1vm-a2
- קבוצת המכונות
ig-cמכילה את שתי המכונות הווירטואליות האלה:vm-c1vm-c2
תנועת הנתונים לכל ארבעת ה-VMs בקצה העורפי עוברת איזון עומסים.
כדי לתמוך בדוגמה הזו ובאפשרויות ההגדרה הנוספות, כל אחת מארבע המכונות הווירטואליות מריצה שרת אינטרנט של Apache שמאזין ליציאות ה-TCP הבאות: 80, 8008, 8080, 8088, 443 ו-8443.
לכל מכונה וירטואלית מוקצית כתובת IP פנימית ב-lb-subnet וכתובת IP חיצונית (ציבורית) זמנית. אפשר להסיר את כתובות ה-IP החיצוניות מאוחר יותר.
לא נדרשת כתובת IP חיצונית למכונות הווירטואליות לקצה העורפי, אבל הן שימושיות בדוגמה הזו כי הן מאפשרות למכונות הווירטואליות לקצה העורפי להוריד את Apache מהאינטרנט, והן יכולות להתחבר באמצעות SSH.
כברירת מחדל, Apache מוגדרת להתחבר לכל כתובת IP. מאזני עומסי רשת פנימיים להעברת סיגנל ללא שינוי מעבירים חבילות תוך שמירה על כתובת ה-IP של היעד. מוודאים שתוכנת השרת שפועלת במכונות הווירטואליות של הקצה העורפי מאזינה לכתובת ה-IP של כלל ההעברה הפנימי של מאזן העומסים. אם מגדירים כמה כללי העברה פנימיים, צריך לוודא שהתוכנה מאזינה לכתובת ה-IP הפנימית שמשויכת לכל אחד מהם. כתובת ה-IP של היעד של חבילה שנשלחת למכונה וירטואלית לקצה העורפי על ידי מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי, היא כתובת ה-IP הפנימית של כלל ההעברה.
כדי לפשט את ההוראות, המכונות הווירטואליות האלה של הקצה העורפי מריצות את Debian GNU/Linux 12.
המסוף
יצירת מכונות וירטואליות לקצה העורפי
נכנסים לדף VM instances במסוף Google Cloud .
חוזרים על שלבים 3 עד 8 לכל VM, באמצעות השילובים הבאים של שם ואזור.
- שם:
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 - רשת משנה:
lb-subnet - IP stack type: IPv4 (single-stack)
- כתובת IPv4 פנימית ראשית: זמנית (אוטומטית)
- כתובת IPv4 חיצונית: זמנית
- רשת:
- בשדה Network tags, מזינים את הערכים
לוחצים על Management, ובשדה סקריפט לטעינה בזמן ההפעלה מזינים את הסקריפט הבא. תוכן הסקריפט זהה בכל ארבע המכונות הווירטואליות.
#! /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
- שם קבוצת המכונות:
לוחצים על Create instance group.
לוחצים על New unmanaged instance group.
מגדירים את השם כמו שצוין בשלב 2.
בקטע Location, בוחרים באפשרות
us-west1בשדה Region, ואז בוחרים Zone כמו שצוין בשלב 2.בשדה Network, בוחרים באפשרות
lb-network.בשדה Subnetwork, בוחרים באפשרות
lb-subnet.בקטע VM instances, מוסיפים את המכונות הווירטואליות כמו שמתואר בשלב 2.
לוחצים על יצירה.
gcloud
כדי ליצור את ארבע המכונות הווירטואליות, מריצים את הפקודה הבאה ארבע פעמים, באמצעות ארבעת השילובים האלה של
[VM-NAME]ו-[ZONE]. תוכן הסקריפט זהה בכל ארבע המכונות הווירטואליות.-
VM-NAME:vm-a1, ZONE:us-west1-a -
VM-NAME:vm-a2, ZONE:us-west1-a -
VM-NAME:vm-c1, ZONE:us-west1-c -
VM-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-a -
VM-NAME:vm-a2, ZONE:us-west1-a -
VM-NAME:vm-c1, ZONE:us-west1-c -
VM-NAME:vm-c2, ZONE:us-west1-c
כדי לקבל את הערך הנוכחי של DEBIAN_IMAGE_NAME, מריצים את הפקודה הבאה של gcloud:
gcloud compute images list \ --filter="family=debian-12"
יוצרים ארבע מכונות וירטואליות לקצה העורפי על ידי שליחת ארבע בקשות 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, כשאתם יוצרים את כלל ההעברה.
המ��וף
התחלת ההגדרה
במסוף Google Cloud , עוברים לדף איזון עומסים.
- לוחצים על יצירת מאזן עומסים.
- בקטע Type of load balancer, בוחרים באפשרות Network Load Balancer (TCP/UDP/SSL) ולוחצים על Next.
- בקטע Proxy or passthrough, בוחרים באפשרות Passthrough load balancer ולוחצים על Next.
- בקטע Public facing or internal, בוחרים באפשרות Internal ולוחצים על Next.
- לוחצים על הגדרה.
הגדרה בסיסית
בדף Create internal passthrough Network Load Balancer, מזינים את הפרטים הבאים:
- שם של מאזן עומסים:
be-ilb - אזור:
us-west1 - רשת:
lb-network
הגדרת הקצוות העורפיים
- לוחצים על Backend configuration.
ברשימה Health check, לוחצים על Create a health check ומזינים את הפרטים הבאים:
- שם:
hc-http-80 - Protocol: HTTP
- יציאה:
80 - פרוטוקול שרת proxy: ללא
- בקשה:
/
שימו לב: כשמשתמשים במסוף Google Cloud כדי ליצור את מאזן העומסים, בדיקת התקינות היא גלובלית. כדי ליצור בדיקת תקינות אזורית, צריך להשתמש ב-
gcloudאו ב-API.- שם:
לוחצים על יצירה.
כדי לטפל רק בתנועה של IPv4, בקטע New Backend, בוחרים באפשרות IPv4 (single-stack) בשביל IP stack type.
ברשימה Instance group, בוחרים את קבוצת המכונות
ig-cולוחצים על Done.לוחצים על Add a backend וחוזרים על השלב כדי להוסיף את קבוצת המכונות
ig-a.לפני שממשיכים, מוודאים שמופיע סימן וי כחול ליד Backend configuration.
הגדרת הקצה הקדמי
- לוחצים על Frontend configuration.
- בקטע New Frontend IP and port, מבצעים את הפעולות הבאות:
- בשדה Name, מזינים
fr-ilb. - בשדה Subnetwork, בוחרים את
lb-subnet. - בקטע Internal IP purpose, ברשימה IP address בוחרים באפשרות Create IP address, מזינים את הפרטים הבאים ולוחצים על Reserve.
- שם:
ip-ilb - IP version: IPv4
- כתובת IP סטטית: אני ��וצה לבחור
- כתובת IP בהתאמה אישית:
10.1.2.99
- שם:
- בקטע Ports, בוחרים באפשרות Multiple ובקטע Port numbers מזינים את הערכים
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מוסיפים את שתי קבוצות המכונות לשירות לקצה העורפי:
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.בשדה Region, בוחרים באפשרות
us-west1.בשדה Zone, בוחרים באפשרות
us-west1-a.לוחצים על אפשרויות מתקדמות.
לוחצים על Networking ומגדירים את השדות הבאים:
- בשדה Network tags, מזינים את הערך
allow-ssh. - בקטע Network interfaces, בוחרים את האפשרויות הבאות:
- רשת:
lb-network - רשת משנה:
lb-subnet
- רשת:
- בשדה Network tags, מזינים את הערך
לוחצים על יצירה.
gcloud
ה-VM של הלקוח יכול להיות בכל אזור באותו מחוז של מאזן העומסים, והוא יכול להשתמש בכל רשת משנה באותו מחוז. בדוגמה הזו, הלקוח נמצא באזור 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 של הלקוח
בבדיקה הזו מתבצעת פנייה למאזן העומסים ממכונה וירטואלית נפרדת של לקוח, ולא ממכונה וירטואלית לקצה העורפי של מאזן העומסים. ההתנהגות הצפויה היא שהתנועה תתחלק בין ארבע ה-VM לקצה העורפי, כי לא הוגדרה זיקה לסשן.
מתחברים למכונה הווירטואלית של הלקוח.
gcloud compute ssh vm-client --zone=us-west1-a
שולחים בקשה לאחזור מהרשת למאזן העומסים באמצעות
curlכדי ליצור קשר עם כתובת ה-IP שלו. חוזרים על הבקשה כדי לראות שהתשובות מגיעות ממכונות וירטואליות שונות של קצה עורפי. השם של ה-VM שיוצר את התגובה מוצג בטקסט בתגובת ה-HTML, בהתאם לתוכן של/var/www/html/index.htmlבכל VM לקצה העורפי. לדוגמה, התגובות הצפויות נראות כמו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 של מאזן העומסים. הסיבה לכך היא שמאזני עומסי רשת פנימיים להעברת סיגנל ללא שינוי מוטמעים בתכנות של רשת וירטואלית, ולא במכשירים נפרדים.
מתחברים למכונה הווירטואלית של הלקוח.
gcloud compute ssh vm-client --zone=us-west1-a
מנסים לשלוח פינג לכתובת ה-IP של מאזן העומסים. שימו לב שלא מתקבלת תשובה ושהפקודה
pingמסתיימת אחרי 10 שניות בדוגמה הזו.timeout 10 ping 10.1.2.99
שליחת בקשות ממכונות וירטואליות עם איזון עומסים
הבדיקה הזו מוכיחה שכאשר VM של בק-אנד שולח חבילות לכתובת ה-IP של כלל ההעברה של מאזן העומסים שלו, הבקשות האלה מנותבות בחזרה אליו. זה נכון בלי קשר למצב של בדיקת התקינות של המכונה הווירטואלית בקצה העורפי.
מאזני עומסי רשת פנימיים להעברת סיגנל ללא שינוי מיושמים באמצעות תכנות של רשת וירטואלית והגדרת VM במערכת ההפעלה של האורח. במכונות וירטואליות של Linux, סביבת האורח יוצרת נתיב לכתובת ה-IP של מאזן העומסים בטבלת הניתוב המקומית של מערכת ההפעלה.
מכיוון שהנתיב המקומי הזה נמצא בתוך ה-VM עצמו (ולא נתיב ברשת ה-VPC), חבילות שנשלחות לכתובת ה-IP של מאזן העומסים לא מעובדות על ידי רשת ה-VPC. במקום זאת, חבילות שנשלחות לכתובת ה-IP של מאזן העומסים נשארות במערכת ההפעלה של המכונה הווירטואלית.
מתחברים ל-VM בקצה העורפי, למשל
vm-a1:gcloud compute ssh vm-a1 --zone=us-west1-a
שולחים בקשה לאחזור מהרשת למאזן העומסים (לפי כתובת ה-IP או שם השירות) באמצעות
curl. הת��ובה מגיעה מאותה VM בקצה העורפי ששולחת את הבקשה. בקשות חוזרות נענות באותו אופן. התגובה הצפויה כשבודקים מ-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
כשמכונה וירטואלית לקצה העורפי של מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי שולחת חבילות לכתובת ה-IP של כלל ההעברה של מאזן העומסים, החבילות תמיד מנותבות בחזרה למכונה הווירטואלית ששלחה את הבקשה. הסיבה לכך היא שמאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי הוא מאזן עומסים להעברת סיגנל ללא שינוי, והוא מוטמע על ידי יצירת נתיב מקומי לכתובת ה-IP של מאזן העומסים בתוך מערכת ההפעלה של האורח במכונה הווירטואלית, כפי שמצוין בקטע הזה. אם יש לכם תרחיש לדוגמה שבו קצוות עורפיים של מאזן עומסים צריכים לשלוח תנועת TCP לכתובת ה-IP של מאזן העומסים, ואתם צריכים שהתנועה תופץ כאילו היא הגיעה מקצה עורפי ללא מאזן עומסים, כדאי להשתמש במק��ם זאת במאזן עומסי רשת פנימי אזורי לשרת proxy.
מידע נוסף זמין במאמר מאזני עומסי רשת פנימיים להעברת נתונים בתור הדילוגים הבאים.
הגדרת מאזן עומסים עם רשתות משנה בשני פרוטוקולים וקצוות עורפיים
במאמר הזה מוסבר איך להגדיר ולבדוק מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי, שתומך בתנועה גם ב-IPv4 וגם ב-IPv6. בשלבים שבקטע הזה מוסבר איך להגדיר את:
- בדוגמה שבדף הזה נעשה שימוש ברשת VPC במצב מותאם אישית בשם
lb-network-dual-stack. תנועת IPv6 דורשת רשת משנה במצב מותאם אישית. - רשת משנה בשני פרוטוקולים (
stack-typeמוגדר ל-IPV4_IPV6), שנדרשת לתנועת IPv6. כשיוצרים רשת משנה בשני פרוטוקולים ברשת VPC במצב מותאם אישית, בוחרים סוג גישה של IPv6 לרשת המשנה. בדוגמה הזו, הגדרנו את הפרמטרipv6-access-typeשל רשת המשנה לערךINTERNAL. המשמעות היא שאפשר להקצות למכונות וירטואליות חדשות ברשת המשנה הזו גם כתובות IPv4 פנימיות וגם כתובות IPv6 פנימיות. הוראות להוספת רשת משנה בשני פרוטוקולים מופיעות במסמכי התיעוד של VPC, בקטע Adding a dual-stack subnet. - כללי חומת אש שמאפשרים חיבורים נכנסים למכונות וירטואליות לקצה העורפי.
- קבוצת המכונות לקצה העורפי, שנמצאת באזור ובתת-הרשת הבאים בדוגמה הזו:
- אזור:
us-west1 - תת-רשת:
lb-subnet, עם טווח כתובות IPv4 ראשי10.1.2.0/24. אתם בוחרים איזה טווח כתובות IPv4 להגדיר בתת-הרשת, אבל טווח כתובות ה-IPv6 מוקצה באופן אוטומטי. Google מספקת בלוק CIDR של IPv6 בגודל קבוע (/64).
- אזור:
- ארבע מכונות וירטואליות של מחסנית כפולה בקצה העורפי: שתי מכונות וירטואליות בקבוצת מכונות לא מנוהלת באזור
us-west1-aושתי מכונות וירטואליות בקבוצת מכונות לא מנוהלת באזורus-west1-c. כדי להדגים גישה גלובלית, בדוגמה הזו יוצרים מכונה וירטואלית שנייה של לקוח לבדיקה באזור ובקבוצת משנה אחרים:- אזור:
europe-west1 - רשת משנה:
europe-subnet, עם טווח כתובות IP ראשי10.3.4.0/24
- אזור:
- מכונה וירטואלית אחת של לקוח לבדיקת החיבורים.
- הרכיבים הבאים של מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי:
- בדיקת תקינות של שירות הקצה העורפי.
- שירות פנימי לקצה העורפי באזור
us-west1, לניהול חלוקת החיבורים לשתי הקבוצות של המכונות בתחום. - שני כללי העברה פנימיים לקצה הקדמי של מאזן העומסים.
התרשים הבא מציג את הארכיטקטורה של הדוגמה הזו:
הגדרת רשת, אזור ורשת משנה
הדוגמה של מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי שמתוארת בדף הזה נוצרת ברשת VPC במצב מותאם אישית בשם lb-network-dual-stack.
כדי להגדיר רשתות משנה עם טווחי IPv6 פנימיים, צריך להפעיל טווח IPv6 פנימי של ULA ברשת VPC. טווחי רשתות המשנה הפנימיות של IPv6 מוקצים מהטווח הזה.
המסוף
במסוף Google Cloud , נכנסים לדף רשתות VPC.
יצירת רשת VPC.
בשדה Name, מזינים
lb-network-dual-stack.כדי להגדיר טווחי כתובות IPv6 פנימיות ברשתות משנה ברשת הזו:
- בקטע Private IPv6 address settings, בוחרים באפשרות Configure a ULA internal IPv6 range for this רשת VPC.
- בשדה Allocate internal IPv6 range, בוחרים באפשרות Automatically או Manually.
אם בוחרים באפשרות Manually, מזינים טווח של
/48מתוך הטווח שלfd20::/20. אם הטווח נמצא בשימוש, תתבקשו לספק טווח אחר.
בקטע Subnet creation mode, בוחרים באפשרות Custom.
בקטע New subnet, מציינים את הפרמטרים הבאים להגדרת רשת משנה:
- שם:
lb-subnet - אזור:
us-west1 - סוג מחסנית IP: IPv4 ו-IPv6 (מחסנית כפולה)
- טווח IPv4:
10.1.2.0/24. - סוג גישה ל-IPv6: פנימי
- שם:
לוחצים על סיום.
לוחצים על Add subnet ומזינים את הפרטים הבאים:
- שם:
europe-subnet - אזור:
europe-west1 - IP stack type: IPv4 (single-stack)
- טווח כתובות IP:
10.3.4.0/24
- שם:
לוחצים על סיום.
לוחצים על יצירה.
gcloud
כדי ליצור רשת VPC חדשה במצב מותאם אישית, מריצים את הפקודה
gcloud compute networks create.כדי להגדיר טווחי IPv6 פנימיים בכל רשתות המשנה ברשת הזו, משתמשים בדגל
--enable-ula-internal-ipv6. האפשרות הזו מקצה קידומת ULA של/48מתוך הטווח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 של /48 יוקצה, צריך להשתמש גם בשדה internalIpv6Range כדי לציין טווח.
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 Router ברשת. מידע נוסף זמין במאמר מצב ניתוב דינמי.מידע נוסף זמין במאמר השיטה
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 נכנסת ביציאת TCP 22 מכל כתובת. אתם יכולים לבחור טווח כתובות IP מגביל יותר לכלל הזה. לדוגמה, אתם יכולים לציין רק את טווחי כתובות ה-IP של המערכת שממנה אתם מתחילים סשנים של SSH. בדוגמה הזו נעשה שימוש בתג היעדallow-sshכדי לזהות את המכונות הווירטואליות שעליהן צריך להחיל את הכלל.
fw-allow-health-check: כלל תעבורת נתונים נכנסת (ingress) שרלוונטי למכונות שמאזן העומסים פועל עליהן, ומאפשר תעבורת נתונים מGoogle Cloud טווחי בדיקות התקינות. בדוגמה הזו, תג היעדallow-health-checkמשמש לזיהוי המכונות שעליהן צריך להחיל את הכלל.
fw-allow-health-check-ipv6: כלל תעבורת נתונים נכנסת (ingress) שרלוונטי למכונות שמאזן העומסים פועל עליהן, ומאפשר תעבורת נתונים מGoogle Cloud טווחי בדיקות התקינות. בדוגמה הזו, תג היעדallow-health-check-ipv6משמש לזיהוי המכונות שעליהן צריך להחיל את הכלל.
בלי הכללים האלה לחומת האש, הכלל default deny ingress חוסם את תעבורת הנתונים הנכנסת לשרתים העורפיים.
המסוף
במסוף Google Cloud , עוברים לדף מדיניות חומת אש.
כדי ליצור את הכלל שמאפשר תנועה ברשת המשנה, לוחצים על Create firewall rule ומזינים את הפרטים הבאים:
- שם:
fw-allow-lb-access - רשת:
lb-network-dual-stack - עדיפות:
1000 - כיוון התנועה: ingress
- פעולה במקרה של התאמה: אישור
- יעדים: כל המכונות ברשת
- מסנן מקור: טווחי IPv4
- טווחי IPv4 של המקור:
10.1.2.0/24ו-10.3.4.0/24 - Protocols and ports: Allow all
- שם:
לוחצים על יצירה.
כדי לאפשר תעבורת נתונים ברשת משנה של IPv6, לוחצים שוב על Create firewall rule ומזינים את הפרטים הבאים:
- שם:
fw-allow-lb-access-ipv6 - רשת:
lb-network-dual-stack - עדיפות:
1000 - כיוון התנועה: ingress
- פעולה במקרה של התאמה: אישור
- מטרות: כל המופעים ברשת
- מסנן מקור: טווחי IPv6
- טווחי IPv6 של המקור: IPV6_ADDRESS שהוקצו ב-
lb-subnet - Protocols and ports: Allow all
- שם:
לוחצים על יצירה.
כדי לאפשר חיבורי SSH נכנסים, לוחצים שוב על Create firewall rule ומזינים את הפרטים הבאים:
- שם:
fw-allow-ssh - רשת:
lb-network-dual-stack - עדיפות:
1000 - כיוון התנועה: ingress
- פעולה במקרה של התאמה: אישור
- יעדים: תגי יעד שצוינו
- תגי יעד:
allow-ssh - מסנן מקור: טווחי IPv4
- טווחי IPv4 של המקור:
0.0.0.0/0 - Protocols and ports: בוחרים באפשרות Specified protocols and ports, מסמנים את התיבה TCP ומזינים
22בשדה Ports.
- שם:
לוחצים על יצירה.
כדי לאפשר ��דיקות ת��ינות של Google Cloud IPv6, לוחצים שוב על Create firewall rule ומזינים את הפרטים הבאים:
- שם:
fw-allow-health-check-ipv6 - רשת:
lb-network-dual-stack - עדיפות:
1000 - כיוון התנועה: ingress
- פעולה במקרה של התאמה: אישור
- יעדים: תגי יעד שצוינו
- תגי יעד:
allow-health-check-ipv6 - מסנן מקור: טווחי IPv6
- טווחי IPv6 של המקור:
2600:2d00:1:b029::/64 - Protocols and ports: Allow all
- שם:
לוחצים על יצירה.
כדי לאפשר בדיקות תקינות של Google Cloud , לוחצים שוב על Create firewall rule ומזינים את הפרטים הבאים:
- שם:
fw-allow-health-check - רשת:
lb-network-dual-stack - עדיפות:
1000 - כיוון התנועה: ingress
- פעולה במקרה של התאמה: אישור
- יעדים: תגי יעד שצוינו
- תגי יעד:
allow-health-check - מסנן מקור: טווחי IPv4
- טווחי IPv4 של המקור:
35.191.0.0/16 - Protocols and ports: Allow all
- שם:
לוחצים על יצירה.
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 CloudIPv4.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=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": [HEALTH_CHECK_RANGES], "targetTags": [ "allow-health-check-ipv6" ], "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }מחליפים את מה שכתוב בשדות הבאים:
PROJECT_ID: מזהה הפרויקט
HEALTH_CHECK_RANGES: רשימה מופרדת בפסיקים של Google Cloud טווחי בדיקות תקינות, בפורמט של מחרוזות במירכאות (לדוגמה, "2001:db8::/32")
כדי ליצור את הכלל
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": [HEALTH_CHECK_RANGES], "targetTags": [ "allow-health-check" ], "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" }, { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }מחליפים את מה שכתוב בשדות הבאים:
PROJECT_ID: מזהה הפרויקט
HEALTH_CHECK_RANGES: רשימה מופרדת בפסיקים של Google Cloud טווחי בדיקות תקינות, בפורמט של מחרוזות במירכאות (לדוגמה, "192.0.2.0/24", "198.51.100.0/24")
יצירת מכונות וירטואליות וקבוצות של מכונות לקצה העורפי
בדוגמה הזו יש שתי קבוצות של מכונות לא מנוהלות, שבכל אחת מהן יש שתי מכונות וירטואליות של שרת בקצה העורפי. כדי להדגים את האופי האזורי של מאזני עומסי רשת פנימיים להעברת סיגנל ללא שינוי, שתי קבוצות המכונות ממוקמות באזורים נפרדים, us-west1-a ו-us-west1-c.
- קבוצת המכונות
ig-aמכילה את שתי המכונות הווירטואליות האלה:vm-a1vm-a2
- קבוצת המכונות
ig-cמכילה את שתי המכונות הווירטואליות האלה:vm-c1vm-c2
תנועת הנתונים לכל ארבעת ה-VMs בקצה העורפי עוברת איזון עומסים.
כדי לתמוך בדוגמה הזו ובאפשרויות ההגדרה הנוספות, כל אחת מארבע המכונות הווירטואליות מריצה שרת אינטרנט של Apache שמאזין ליציאות ה-TCP הבאות: 80, 8008, 8080, 8088, 443 ו-8443.
לכל מכונה וירטואלית מוקצית כתובת IP פנימית ב-lb-subnet וכתובת IP חיצונית (ציבורית) זמנית. אפשר להסיר את כתובות ה-IP החיצוניות מאוחר יותר.
לא נדרשת כתובת IP חיצונית למכונות הווירטואליות לקצה העורפי, אבל הן שימושיות בדוגמה הזו כי הן מאפשרות למכונות הווירטואליות לקצה העורפי להוריד את Apache מהאינטרנט, והן יכולות להתחבר באמצעות SSH.
כברירת מחדל, Apache מוגדרת להתחבר לכל כתובת IP. מאזני עומסי רשת פנימיים להעברת סיגנל ללא שינוי מעבירים חבילות תוך שמירה על כתובת ה-IP של היעד.
מוודאים שתוכנת השרת שפועלת במכונות הווירטואליות של הקצה העורפי מאזינה לכתובת ה-IP של כלל ההעברה הפנימי של מאזן העומסים. אם מגדירים כמה כללי העברה פנימיים, צריך לוודא שהתוכנה מאזינה לכתובת ה-IP הפנימית שמשויכת לכל אחד מהם. כתובת ה-IP של היעד של חבילה שנשלחת למכונה וירטואלית לקצה העורפי על ידי מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי, היא כתובת ה-IP הפנימית של כלל ההעברה.
אם אתם משתמשים בקבוצות מופעי מכונה מנוהלים, ודאו שסוג המחסנית של רשת המשנה תואם לסוג המחסנית של תבניות של הגדרות מכונה שבהן משתמשות קבוצות מופעי המכונה המנוהלים. אם קבוצת מופעי מכונה מנוהלים משתמשת בתבנית של הגדרות מכונה עם שני סוגי כתובות IP, רשת המשנה צריכה להיות עם שני סוגי כתובות IP.
כדי לפשט את ההוראות, המכונות הווירטואליות האלה של הקצה העורפי מריצות את Debian GNU/Linux 12.
המסוף
יצירת מכונות וירטואליות לקצה העורפי
נכנסים לדף VM instances במסוף Google Cloud .
חוזרים על שלבים 3 עד 8 לכל VM, באמצעות השילובים הבאים של שם ואזור.
- שם:
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 - רשת משנה:
lb-subnet - IP stack type: IPv4 and IPv6 (dual-stack)
- כתובת IPv4 פנימית ראשית: זמנית (אוטומטית)
- כתובת IPv4 חיצונית: זמנית
- רשת:
לוחצים על Management, ובשדה סקריפט לטעינה בזמן ההפעלה מזינים את הסקריפט הבא. תוכן הסקריפט זהה בכל ארבע המכונות הווירטואליות.
#! /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
- שם קבוצת המכונות:
לוחצים על Create instance group.
לוחצים על New unmanaged instance group.
מגדירים את Name (שם) כמו שצוין בשלב 2.
בקטע Location, בוחרים באפשרות
us-west1בשדה Region, ואז בוחרים Zone כמו שצוין בשלב 2.בשדה Network, בוחרים באפשרות
lb-network-dual-stack.בשדה Subnetwork, בוחרים את
lb-subnet.בקטע VM instances, מוסיפים את המכונות הווירטואליות כמו שמתואר בשלב 2.
לוחצים על יצירה.
gcloud
כדי ליצור את ארבע המכונות הווירטואליות, מריצים את הפקודה
gcloud compute instances createארבע פעמים, באמצעות ארבעת השילובים האלה של[VM-NAME]ו-[ZONE]. תוכן הסקריפט זהה בכל ארבע המכונות הווירטואליות.-
VM-NAME:vm-a1, ZONE:us-west1-a -
VM-NAME:vm-a2, ZONE:us-west1-a -
VM-NAME:vm-c1, ZONE:us-west1-c
VM-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-a -
VM-NAME:vm-a2, ZONE:us-west1-a -
VM-NAME:vm-c1, ZONE:us-west1-c -
VM-NAME:vm-c2, ZONE:us-west1-c
כדי לקבל את הערך הנוכחי של DEBIAN_IMAGE_NAME, מריצים את הפקודה הבאה ב-gcloud:
gcloud compute images list \ --filter="family=debian-12"
יוצרים ארבע מכונות וירטואליות לקצה העורפי על ידי שליחת ארבע בקשות 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. למידע נוסף, קראו את הקטע בנושא בדיקות תקינות בסקירה הכללית על מאזן עומסי רשת פנימי מסוג שקוף.שירות לקצה העורפי. כדי להעביר תנועת HTTP דרך מאזן העומסים הפנימי, צריך להשתמש ב-TCP ולא ב-UDP.
כלל העברה. בדוגמה הזו נוצרים שני כללי העברה פנימיים לתנועת IPv4 ��-IPv6.
��תוב�� IP פנימית. בדוגמה הזו, אתם מציינים כתובת IP פנימית,
10.1.2.99, כשאתם יוצרים את כלל ההעברה של IPv4. מידע נוסף זמין במאמר כתובת IP פנימית. אתם בוחרים איזו כתובת IPv4 להגדיר, אבל כתובת ה-IPv6 מוקצית באופן אוטומטי.
המסוף
התחלת ההגדרה
במסוף Google Cloud , עוברים לדף איזון עומסים.
- לוחצים על יצירת מאזן עומסים.
- בקטע Type of load balancer, בוחרים באפשרות Network Load Balancer (TCP/UDP/SSL) ולוחצים על Next.
- בקטע Proxy or passthrough, בוחרים באפשרות Passthrough load balancer ולוחצים על Next.
- בקטע Public facing or internal, בוחרים באפשרות Internal ולוחצים על Next.
- לוחצים על הגדרה.
הגדרה בסיסית
בדף Create internal passthrough Network Load Balancer, מזינים את הפרטים הבאים:
- שם של מאזן עומסים:
be-ilb - אזור:
us-west1 - רשת:
lb-network-dual-stack
הגדרת הקצה העורפי
- לוחצים על Backend configuration.
- ברשימה Health check, לוחצים על Create a health check ומזינים את הפרטים הבאים:
- שם:
hc-http-80 - היקף: אזורי
- Protocol: HTTP
- יציאה:
80 - פרוטוקול שרת proxy:
NONE - בקשה:
/
- שם:
- לוחצים על יצירה.
- בקטע New Backend, בשביל IP stack type בוחרים באפשרות IPv4 and IPv6 (dual-stack).
- ב-Instance group, בוחרים את קבוצת המכונות
ig-aולוחצים על Done. - לוחצים על Add a backend וחוזרים על השלב כדי להוסיף את קבוצת המכונות
ig-c. - מוודאים שמופיע סימן וי כחול ליד Backend configuration.
הגדרת הקצה הקדמי
- לוחצים על Frontend configuration. בקטע New Frontend IP and port, מבצעים את הפעולות הבאות:
- בשדה Name, מזינים
fr-ilb-ipv6. - כדי לטפל בתנועת IPv6, מבצעים את הפעולות הבאות:
- בשביל IP version, בוחרים IPv6.
- בשדה Subnetwork, בוחרים את
lb-subnet. טווח כתובות ה-IPv6 בכלל ההעברה הוא תמיד זמני. - בשדה Ports, בוחרים באפשרות Multiple, ואז בשדה Port number מזינים את הערכים
80,8008,8080,8088. - ��וחצים על סיום.
- כדי לטפל בתנועת IPv4, מבצעים את הפעולות הבאות:
- לוחצים על Add frontend IP and port.
- בשדה Name, מזינים
fr-ilb. - בשדה Subnetwork, בוחרים את
lb-subnet. - בקטע Internal IP purpose, ברשימה IP address בוחרים באפשרות Create IP address, מזינים את הפרטים הבאים ולוחצים על Reserve.
- שם:
ip-ilb - IP version: IPv4
- כתובת IP סטטית: אני רוצה לבחור
- כתובת IP בהתאמה אישית:
10.1.2.99
- שם:
- בשדה Ports, בוחרים באפשרות Multiple, ובשדה Port numbers מזינים את הערכים
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מוסיפים את שתי קבוצות המכונות לשירות לקצה העורפי:
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-client) באותו אזור שבו נמצאות המכונות הווירטואליות של השרת (בק-אנד). הלקוח משמש לאימות ההגדרות של מאזן העומסים ולהדגמת ההתנהגות הצפויה, כפי שמתואר בקטע בדיקה.
המסוף
נכנסים לדף VM instances במסוף Google Cloud .
לוחצים על Create instance.
בשדה Name, מזינים
vm-client.בשדה Region, בוחרים באפשרות
us-west1.בשדה Zone, בוחרים באפשרות
us-west1-a.לוחצים על אפשרויות מתקדמות.
לוחצים על Networking ומגדירים את השדות הבאים:
- בשדה Network tags, מזינים את הערך
allow-ssh. - בקטע Network interfaces, בוחרים את האפשרויות הבאות:
- רשת:
lb-network-dual-stack - רשת משנה:
lb-subnet - IP stack type: IPv4 and IPv6 (dual-stack)
- כתובת IP פנימית ראשית: ארעית (אוטומטית)
- כתובת IP חיצונית: Ephemeral
- רשת:
- לוחצים על סיום.
- בשדה Network tags, מזינים את הערך
לוחצים על יצירה.
gcloud
ה-VM של הלקוח יכול להיות בכל אזור באותו מחוז של מאזן העומסים, והוא יכול להשתמש בכל רשת משנה באותו מחוז. בדוגמה הזו, הלקוח נמצא באזור 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
}
בדיקת החיבור
בבדיקה הזו מתבצעת פנייה למאזן העומסים ממכונה וירטואלית נפרדת של לקוח, ולא ממכונה וירטואלית לקצה העורפי של מאזן העומסים. ההתנהגות הצפויה היא שהתנועה תתחלק בין ארבעת ה-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. - כללי חומת אש שמאפשרים חיבורים נכנסים למכונות וירטואליות לקצה העורפי.
- קבוצת המכונות לקצה העורפי, שנמצאת באזור וברשת המשנה הבאים בדוגמה הזו:
- אזור:
us-west1 - רשת משנה:
lb-subnet-ipv6-only. טווח כתובות ה-IPv6 של תת-הרשת מוקצה באופן אוטומטי. Google מספקת בלוק CIDR של IPv6 בגודל קבוע (/64).
- אזור:
- ארבע מכונות וירטואליות של בק-אנד עם IPv6 בלבד – שתי מכונות וירטואליות בקבוצת מכונות לא מנוהלת באזור
us-west1-aושתי מכונות וירטואליות בקבוצת מכונות לא מנוהלת באזורus-west1-c. - שרת IPv6 TCP במכונות הווירטואליות לקצה העורפי. השרת מאזין לחיבורים נכנסים בכתובת ה-VIP שצוינה בכלל ההעברה של מאזן העומסים ובממשק הרשת שצוין. השרת מקבל חיבורים נכנסים של לקוחות, שולח תשובה ואז סוגר את החיבור.
- מכונה וירטואלית אחת של לקוח לבדיקת החיבורים.
- הרכיבים הבאים של מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי:
- בדיקת תקינות של שירות לקצה העורפי
- שירות פנימי לקצה העורפי באזור
us-west1, לניהול חלוקת החיבורים בין שתי הקבוצות של המכונות בתחום - כלל העברה של IPv6
אפשר גם להגדיר מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי עם קצוות עורפיים פנימיים של IPv6 בלבד, באמצעות מכונת VM שמשמשת כשער NAT. מידע נוסף על ההגדרה הזו זמין במאמר הגדרת מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי עם קצוות עורפיים פנימיים מסוג IPv6 בלבד.
הגדרת רשת, אזור ורשת משנה
הדוגמה של מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי שמתוארת בדף הזה נוצרת ברשת VPC במצב מותאם אישית בשם lb-network-ipv6-only.
כדי להגדיר רשתות משנה עם טווחי IPv6 פנימיים, צריך להפעיל טווח IPv6 פנימי של ULA ברשת VPC. טווחי רשתות המשנה הפנימיות של IPv6 מוקצים מהטווח הזה.
בהמשך, בקטע התקנת שרת IPv6 TCP במכונות הווירטואליות לקצה העורפי באמצעות סקריפט Bash להפעלה, טווח ה-IPv6 הפנימי של רשת המשנה משמש ליצירת כלל מסלול כדי לנתב את תעבורת הנתונים מרשת המשנה של ה-VPC דרך השער וממשק הרשת שצוינו.
ה��סוף
במסוף Google Cloud , נכנסים לדף רשתות VPC.
לוחצים על Create VPC network.
בשדה Name, מזינים
lb-network-ipv6-only.כדי להגדיר טווחי כתובות IPv6 פנימיות ברשתות משנה ברשת הזו:
- בקטע Private IPv6 address settings, בוחרים באפשרות Configure a ULA internal IPv6 range for this רשת VPC.
- בשדה Allocate internal IPv6 range, בוחרים באפשרות Automatically או Manually.
אם בוחרים באפשרות Manually, מזינים טווח של
/48מתוך הטווח שלfd20::/20. אם הטווח כבר בשימוש, תתבקשו לספק טווח אחר.
בקטע Subnet creation mode, בוחרים באפשרות Custom.
בקטע New subnet, מציינים את הפרמטרים הבאים להגדרת רשת משנה:
- שם:
lb-subnet-ipv6-only - אזור:
us-west1 - IP stack type: IPv6 (single-stack)
- סוג גישה ל-IPv6: פנימי
- שם:
לוחצים על סיום.
לוחצים על יצירה.
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: כלל תעבורת נתונים נכנסת (ingress) שחל על המכונות שבהן מתבצע איזון העומסים, ומאפשר קישוריות SSH נכנסת ביציאת TCP22מכל כתובת. אתם יכולים לבחור טווח כתובות IP מגביל יותר לכלל הזה. לדוגמה, אתם יכולים לציין רק את טווחי כתובות ה-IP של המערכת שממנה אתם מתחילים סשנים של SSH. בדוגמה הזו נעשה שימוש בתג היעדallow-sshכדי לזהות את המכונות הווירטואליות שעליהן צריך להחיל את הכלל.
fw-allow-health-check-ipv6-only: כלל תעבורת נתונים נכנסת (ingress) שרלוונטי למכונות שמאזן העומסים פועל עליהן, ומאפשר תעבורת נתונים מGoogle Cloud טווחי בדיקת התקינות. בדוגמה הזו, תג היעדallow-health-check-ipv6משמש לזיהוי המכונות שעליהן צריך להחיל את הכלל.
ב��י הכללים האלה לחומת האש, הכלל default deny ingress חוסם את תעבורת הנתונים הנכנסת לשרתים העורפיים.
המסוף
במסוף Google Cloud , עוברים לדף ��די��י��ת ��ומת אש.
כדי לאפשר תעבורת נתונים של רשת משנה ב-IPv6, לוחצים שוב על Create firewall rule ומזינים את הפרטים הבאים:
- שם:
fw-allow-lb-access-ipv6-only - רשת:
lb-network-ipv6-only - עדיפות:
1000 - כיוון התנועה: Ingress
- פעולה במקרה של התאמה: אישור
- יעדים: כל המכונות ברשת
- מסנן מקור: טווחי IPv6
- טווחי IPv6 של המקור:
::/0 - Protocols and ports: Allow all
- שם:
לוחצים על יצירה.
כדי לאפשר חיבורי SSH נכנסים, לוחצים שוב על Create firewall rule ומזינים את הפרטים הבאים:
- שם:
fw-allow-ssh - רשת:
lb-network-ipv6-only - עדיפות:
1000 - כיוון התנועה: Ingress
- פעולה במקרה של התאמה: אישור
- יעדים: תגי יעד שצוינו
- תגי יעד:
allow-ssh - מסנן מקור: טווחי IPv4
- טווחי IPv4 של המקור:
0.0.0.0/0 - Protocols and ports: בוחרים באפשרות Specified protocols and ports, מסמנים את התיבה TCP ומזינים
22בשדה Ports.
- שם:
לוחצים על יצירה.
כדי לאפשר בדיקות תקינות של Google Cloud IPv6, לוחצים שוב על Create firewall rule ומזינים את הפרטים הבאים:
- שם:
fw-allow-health-check-ipv6-only - רשת:
lb-network-ipv6-only - עדיפות:
1000 - כיוון התנועה: Ingress
- פעולה במקרה של התאמה: אישור
- יעדים: תגי יעד שצוינו
- תגי יעד:
allow-health-check-ipv6 - מסנן מקור: טווחי IPv6
- טווחי IPv6 של המקור:
2600:2d00:1:b029::/64 - Protocols and ports: Allow all
- שם:
לוחצים על יצירה.
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
יצירת מכונות וירטואליות וקבוצות של מכונות לקצה העורפי
בדוגמה הזו משתמשים בשתי קבוצות של מכונות לא מנוהלות, שבכל אחת מהן יש שתי מכונות VM לקצה העורפי. כדי להדגים את האופי האזורי של מאזני עומסי רשת פנימיים להעברת סיגנל ללא שינוי, שתי קבוצות המכונות ממוקמות באזורים נפרדים, us-west1-a ו-us-west1-c.
- קבוצת המכונות
ig-aמכילה את שתי המכונות הווירטואליות האלה:vm-a1vm-a2
- קבוצת המכונות
ig-cמכילה את שתי המכונות הווירטואליות האלה:vm-c1vm-c2
תנועת הנתונים לכל ארבעת ה-VMs בקצה העורפי עוברת איזון עומסים.
המסוף
י��י��ת ��כונות וירטואליות לקצה העורפי
נכנסים לדף 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 - רשת משנה:
lb-subnet-ipv6-only - IP stack type: IPv6 (single-stack)
- Primary internal IPv6 address: Ephemeral (Automatic)
- רשת:
- בשדה Network tags, מזינים את הערכים
לוחצים על יצירה.
ה-VM לקצה העורפי צריך להריץ שרת IPv6 TCP שמאזין לחיבורים נכנסים. מתקינים את השרת הזה במכונות הווירטואליות של הקצה העורפי אחרי שמגדירים את מאזן העומסים. הסיבה לכך היא שהסקריפט של השרת יוצר שקע שנקשר לכלל ההעברה של מאזן העומסים.
יצירת קבוצות של מכונות
נכנסים לדף Instance groups במסוף Google Cloud .
חוזרים על השלבים הבאים כדי ליצור שתי קבוצות של מכונות לא מנוהלות, שבכל אחת מהן שתי מכונות וירטואליות, באמצעות השילובים האלה.
- שם קבוצת המכונות:
ig-a, אזור:us-west1-a, מכונות וירטואליות:vm-a1ו-vm-a2 - שם קבוצת המכונות:
ig-c, אזור:us-west1-c, מכונות וירטואליות:vm-c1ו-vm-c2
- שם קבוצת המכונות:
לוחצים על Create instance group.
לוחצים על New unmanaged instance group.
מגדירים את Name (שם) כמו שצוין בשלב 2.
בקטע Location, בוחרים באפשרות
us-west1בשדה Region, ואז בוחרים Zone כמו שצוין בשלב 2.בשדה Network, בוחרים באפשרות
lb-network-ipv6-only.בשדה Subnetwork, בוחרים את
lb-subnet-ipv6-only.בקטע VM instances, מוסיפים את המכונות הווירטואליות כמו שמתואר בשלב 2.
לוחצים על יצירה.
gcloud
כדי ליצור את ארבע המכונות הווירטואליות, מריצים את הפקודה
gcloud compute instances createארבע פעמים, באמצעות ארבעת השילובים האלה של[VM-NAME]ו-[ZONE].-
VM-NAME:vm-a1, ZONE:us-west1-a -
VM-NAME:vm-a2, ZONE:us-west1-a -
VM-NAME:vm-c1, ZONE:us-west1-c -
VM-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ה-VM לקצה העורפי צריך להריץ שרת IPv6 TCP שמאזין לחיבורים נכנסים. מתקינים את השרת הזה במכונות הווירטואליות של הקצה העורפי אחרי שמגדירים את מאזן העומסים. הסיבה לכך היא שהסקריפט של השרת יוצר שקע שנקשר לכלל ההעברה של מאזן העומסים.
-
יוצרים את שתי הקבוצות של מופעי מכונה לא מנוהלים בכל אזור:
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
הגדרת רכיבים של מאזן עומסים
בשלבים האלה מגדירים את כל הרכיבים של מאזן עומסי הרשת הפנימי להעברת סיגנל ללא שינוי, החל מבדיקת התקינות והשירות לקצה העורפי, ואז את הרכיבים של ממשק המשתמש:
המסוף
התחלת ההגדרה
במסוף Google Cloud , עוברים לדף איזון עומסים.
- לוחצים על יצירת מאזן עומסים.
- בקטע Type of load balancer, בוחרים באפשרות Network Load Balancer (TCP/UDP/SSL) ולוחצים על Next.
- בקטע Proxy or passthrough, בוחרים באפשרות Passthrough load balancer ולוחצים על Next.
- בקטע Public facing or internal, בוחרים באפשרות Internal ולוחצים על Next.
- לוחצים על הגדרה.
הגדרה בסיסית
בדף Create internal passthrough Network Load Balancer, מזינים את הפרטים הבאים:
- שם של מאזן עומסים:
ilb-ipv6-only - אזור:
us-west1 - רשת:
lb-network-ipv6-only
הגדרת הקצה העורפי
- לוחצים על Backend configuration.
- ברשימה Health check, לוחצים על Create a health check ומזינים את הפרטים הבאים:
- שם:
hc-http-80 - היקף: אזורי
- Protocol: HTTP
- יציאה:
80 - פרוטוקול שרת proxy: ללא
- בקשה:
/
- שם:
- לוחצים על יצירה.
- בקטע New Backend, בוחרים באפשרות IPv6 (single-stack) בשביל IP stack type.
- ב-Instance group, בוחרים את קבוצת המכונות
ig-aולוחצים על Done. - לוחצים על Add a backend וחוזרים על השלב כדי להוסיף את קבוצת המכונות
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 בכלל ההעברה הוא תמיד זמני. - בשדה Ports, בוחרים באפשרות Multiple, ואז בשדה Port number מזינים את הערכים
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מוסיפים את שתי קבוצות המכונות לשירות לקצה העורפי:
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 במכונות הווירטואליות לקצה העורפי באמצעות סקריפט Bash להפעלה
בדוגמה הזו, הסקריפט לטעינה בזמן ההפעלה של Bash למכונות וירטואליות לקצה העורפי מכיל את הקוד הבא:
- פקודות רשת לניתוב כל החבילות היוצאות שמקורן ברשת משנה דרך שער וממשק רשת שצוינו.
- סקריפט שרת Python (
server.py), שהוא שרת IPv6 TCP, שמאזין לחיבורים נכנסים ב-VIP ובממשק הרשת שצוינו. הוא מקבל חיבורים נכנסים של לקוחות, שולח תשובה ואז סוגר את החיבור.
צריך להוסיף את הפרטים הבאים בסקריפט Bash:
- כתובת השער
- טווח של רשת משנה
- כתובת ה-IP הווירטואלית של כלל ההעברה
- ממשק רשת
כדי לזהות את כתובת השער ואת טווח רשת המשנה, מריצים את הפקודה ip -6 route show table all ב-VM לקצה העורפי. למידע נוסף על הפקודות שמשמשות בסקריפט Bash להפעלה, עיינו בקטע נספח.
כדי להוסיף סקריפט לטעינה בזמן ההפעלה למכונה הווירטואלית:
המסוף
ברשימת המכונות הווירטואליות שיצרתם קודם, לוחצים על המכונה הווירטואלית שצריך לעדכן.
לוחצים על Edit.
בקטע Metadata, מזינים את הסקריפט הבא בשדה סקריפט לטעינה בזמן ההפעלה.
#!/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-client) באותו אזור שבו נמצאות המכונות הווירטואליות של השרת (בק-אנד). הלקוח משמש לאימות ההגדרות של מאזן העומסים ולהדגמת ההתנהגות הצפויה, כפי שמתואר בקטע בדיקה.
המסוף
נכנסים לדף VM instances במסוף Google Cloud .
לוחצים על Create instance.
בשדה Name, מזינים
vm-client.בשדה Region, בוחרים באפשרות
us-west1.בשדה Zone, בוחרים באפשרות
us-west1-a.לוחצים על אפשרויות מתקדמות.
לוחצים על Networking ומגדירים את השדות הבאים:
- בשדה Network tags, מזינים את הערך
allow-ssh. - בקטע Network interfaces, בוחרים את האפשרויות הבאות:
- רשת:
lb-network-ipv6-only - רשת משנה:
lb-subnet-ipv6-only - IP stack type: IPv6 (single-stack)
- רשת:
- לוחצים על סיום.
- בשדה Network tags, מזינים את הערך
לוחצים על יצירה.
gcloud
ה-VM של הלקוח יכול להיות בכל אזור באותו מחוז של מאזן העומסים, והוא יכול להשתמש בכל רשת משנה באותו מחוז. בדוגמה הזו, הלקוח נמצא באזור 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
בדיקת החיבור
בבדיקה הזו מתבצעת פנייה למאזן העומסים ממכונה וירטואלית נפרדת של לקוח, ולא ממכונה וירטואלית לקצה העורפי של מאזן העומסים. ההתנהגות הצפויה היא שהתנועה תתחלק בין ארבעת ה-VM לקצה העורפי.
מתחברים למכונה הווירטואלית של הלקוח באמצעות 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
אפשרויות הגדרה נוספות
בקטע הזה נרחיב על דוגמת ההגדרה כדי לספק אפשרויות הגדרה חלופיות ונוספות. כל המשימות הן אופציונליות. אפשר לבצע אותן בכל סדר שרוצים.
הפעלת גישה גלובלית
אתם יכולים להפעיל גישה גלובלית למאזן העומסים הפנימי לדוגמה להעברת סיגנל ללא שינוי, כדי לאפשר ללקוחות בכל האזורים לגשת אליו.
שרתי ה-backend של מאזן העומסים לדוגמה עדיין צריכים להיות באזור אחד (us-west1).
כדי להגדיר גישה גלובלית, צריך לבצע את השינויים הבאים בהגדרות.
המסוף
עריכת כלל ההעברה של מאזן העומסים
במסוף Google Cloud , עוברים לדף איזון עומסים.
בעמודה Name, לוחצים על מאזן עומסי הרשת הפנימי להעברת סיגנל ללא שינוי. מגדירים את מאזן העומסים לדוגמה בשם
be-ilb.לוחצים על Frontend configuration.
לוחצים על Edit .
בקטע גישה גלובלית, בוחרים באפשרות הפעלה.
לוחצים על סיום.
לוחצים על עדכון.
בדף Load balancer details, מוודאים שבהגדרת ממשק המשתמש כתוב Regional (REGION) with global access.
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 - רשת משנה:
europe-subnet
- רשת:
- בשדה Network tags, מזינים את הערך
לוחצים על יצירה.
gcloud
ה-VM של הלקוח יכול להיות בכל אזור באותו מחוז של מאזן העומסים, והוא יכול להשתמש בכל רשת משנה באותו מחוז. בדוגמה הזו, הלקוח נמצא באזור 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
הגדרה של קבוצות מופעי מכונה מנוהלים
בהגדרה לדוגמה נוצרו שתי קבוצות של מכונות לא מנוהלות. במקום זאת, אתם יכולים להשתמש בקבוצות מופעי מכונה מנוהלים, כולל קבוצות מופעי מכונה מנוהלים אזוריות וקבוצות מופעי מכונה מנוהלים בכמה אזורים, כמערכות לקצה עורפי של מאזני עומסי רשת פנימיים מסוג passthrough.
קבוצות מופעי מכונה מנוהלים דורשות יצירת תבנית של הגדרות מכונה. במדריך הזה נסביר איך להחליף את שתי הקבוצות הלא מנוהלות של מכונות אזוריות מהדוגמה בקבוצה מנוהלת אחת של מכונות אזוריות. קבוצת מופעי מכונה מנוהלים אזורית יוצרת באופן אוטומטי מכונות וירטואליות בכמה אזורים, וכך קל יותר להפיץ את תנועת הייצור בין האזורים.
קבוצות מופעי מכונה מנוהלים תומכות גם בהתאמה אוטומטית לעומס (autoscaling) ובתיקון תוכנה אוטומטי (autohealing). אם אתם משתמשים בהתאמה לעומס (autoscaling) עם מאזני עומסי רשת פנימיים להעברת סיגנל ללא שינוי, אתם לא יכולים לשנות את קנה המידה על סמך איזון עומסים.
בקטע הזה נסביר איך לשנות את שירות הקצה העורפי של מאזן העומסים הפנימי לדוגמה, כדי שהוא ישתמש בקבוצה אזורית של מכונות מנוהלות.
המסוף
תבנית של הגדרות מכונה
במסוף Google Cloud , נכנסים לדף תבניות של הגדרות מכונה.
לוחצים על יצירת תבנית של הגדרות מכונה.
מגדירים את Name לערך
template-vm-ilb.בוחרים סוג מכונה.
בקטע Boot disk, מוודאים שהאפשרות Debian GNU/Linux 12 (bookworm) נבחרה כאפשרות לדיסק האתחול. אם צריך, לוחצים על שינוי כדי לשנות את התמונה.
לוחצים על אפשרויות מתקדמות.
לוחצים על Networking ומגדירים את השדות הבאים:
- בשדה Network tags, מזינים את הערכים
allow-sshו-allow-health-check. - בקטע Network interfaces, בוחרים את האפשרויות הבאות:
- רשת:
lb-network - רשת משנה:
lb-subnet
- רשת:
- בשדה Network tags, מזינים את הערכים
לוחצים על Management, ובשדה סקריפט לטעינה בזמן ההפעלה מזינים את הסקריפט הבא:
#! /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 .
לוחצים על Create instance group.
מגדירים את Name לערך
ig-ilb.בשדה Location, בוחרים באפשרות Multi-zone ומגדירים את Region לערך
us-west1.מגדירים את תבנית של הגדרות מכונה לערך
template-vm-ilb.אופציונלי: מגדירים התאמה אוטומטית לעומס (autoscaling). אי אפשר להתאים אוטומטית לעומס את קבוצת המכונות על סמך השימוש באיזון עומסי HTTP, כי קבוצת המכונות היא בק-אנד של מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי.
מגדירים את Minimum number of instances לערך
1ואת Maximum number of instances לערך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מנתקים את שתי קבוצות המכונות הלא מנוהלות (ברמת האזור) מהשירות לקצה העורפי:
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 חיצוניות ממכונות וירטואליות לקצה העורפי
כשיצרתם את המכונות הווירטואליות לקצה העורפי, לכל אחת מהן הוקצתה כתובת IP חיצונית זמנית כדי שתוכל להוריד את Apache באמצעות סקריפט לטעינה בזמן ההפעלה. מכיוון שהמכונות הווירטואליות בקצה העורפי משמשות רק את מאזן עומסי הרשת הפנימי להעברת נתונים, אתם יכולים להסיר את כתובות ה-IP החיצוניות שלהן. הסרת כתובות ה-IP החיצוניות מונעת מהמכונות הווירטואליות לקצה העורפי לגשת ישירות לאינטרנט.
המסוף
נכנסים לדף VM instances במסוף Google Cloud .
חוזרים על השלבים הבאים לכל מכונה וירטואלית לקצה העורפי.
לוחצים על השם של המכונה הווירטואלית לקצה העורפי, לדוגמה
vm-a1.לוחצים על עריכה.
בקטע Network interfaces, לוחצים על הרשת.
ברשימת כתובת IP חיצונית, בוחרים את הערך None ולוחצים על Done.
לוחצים על Save.
gcloud
כדי לחפש את האזור של מכונה – לדוגמה, אם אתם משתמשים בקבוצת מופעי מכונה מנוהלים אזורית – מריצים את הפקודה הבאה לכל מכונה כדי לקבוע את האזור שלה. מחליפים את
[SERVER-VM]בשם של המכונה הווירטואלית שרוצים לחפש.gcloud compute instances list --filter="name=[SERVER-VM]"
חוזרים על השלב הבא לכל מכונה וירטואלית לקצה העורפי. מחליפים את
[SERVER-VM]בשם של המכונה הווירטואלית, ואת[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 פנימית שמורה
כשיוצרים מכונות וירטואליות של קצה עורפי וקבוצות של מכונות, המכונה הווירטואלית משתמשת בכתובת IPv4 או IPv6 פנימית זמנית.
בשלבים הבאים מוסבר איך לשדרג כתובת IPv4 או IPv6 פנימית לכתובת IPv4 או IPv6 פנימית סטטית, ואז לעדכן את מכונת ה-VM כך שתשתמש בכתובת ה-IP הפנימית הסטטית:
- הפיכת כתובת IPv4 או IPv6 פנימית וזמנית שנמצאת בשימוש לכתובת סטטית.
- שינוי או הקצאה של כתובת IPv6 פנימית למכונה קיימת.
לחלופין, תוכלו לפעול לפי השלבים הבאים כדי לשמור כתובת IPv4 או IPv6 פנימית סטטית חדשה, ואז לעדכן את המכונה הווירטואלית כך שתשתמש בכתובת ה-IP הפנימית הסטטית:
שמירת כתובת IPv4 או IPv6 פנימית סטטית חדשה.
בניגוד להקצאה של כתובת IPv4 פנימית, בהקצאה של כתובת IPv6 פנימית אי אפשר להקצות כתובת IP ספציפית מרשת המשנה. במקום זאת, טווח כתובות IPv6 פנימיות של
/96מוקצה באופן אוטומטי מתוך טווח כתובות IPv6 פנימיות של/64בתת-הרשת.
מידע נוסף זמין במאמר איך שומרים כתובת IP ��נימית סטטית.
קבלת תנועה בכל היציאות
כלל ההעברה של מאזן העומסים, ולא השירות לקצה העורפי, קובע את היציאה או היציאות שבהן מאזן העומסים מקבל תנועה. בקטע רכיבים מוסבר מה המטרה של כל רכיב.
כשיצרתם את כלל ההעברה של מאזן העומסים לדוגמה, הגדרתם את היציאות 80, 8008, 8080 ו-8088. הסקריפט לטעינה בזמן ההפעלה שמתקין את Apache גם מגדיר אותו לקבל חיבורי HTTPS ביציאות 443 ו-8443.
כדי לתמוך בשש היציאות האלה, אפשר להגדיר את כלל ההעברה כך שיקבל תנועה בכל היציאות. בשיטה הזו, אפשר גם להגדיר את הכלל או הכללים של חומת האש שמאפשרים חיבורים נכנסים למכונות הווירטואליות לקצה העורפי, כך שהם יאפשרו רק יציאות מסוימות.
כאן מוסבר איך למחוק את כלל ההעברה הנוכחי של מאזן העומסים וליצור כלל חדש שמקבל תנועה בכל היציאות.
מידע נוסף על המקרים שבהם כדאי להשתמש בהגדרה הזו זמין במאמר מאזנים פנימיים של עומסי רשת להעברת סיגנל ללא שינוי וכללי העברה עם כתובת IP משותפת.
המסוף
מחיקת כלל ההעברה ויצירת כלל חדש
במסוף Google Cloud , עוברים לדף איזון עומסים.
לוחצים על מאזן העומסים
be-ilbואז על Edit.לוחצים על Frontend configuration.
מציבים את הסמן מעל כלל ההעברה
10.1.2.9ולוחצים על מחיקה.לוחצים על Add frontend IP and port.
בקטע New Frontend IP and port, מזינים את הפרטים הבאים ולוחצים על Done:
- שם:
fr-ilb - רשת משנה:
lb-subnet - כתובת IP פנימית:
ip-ilb - יציאות: הכול.
- שם:
לפני שממשיכים, מוודאים שמופיע סימן וי כחול ליד Frontend configuration.
לוחצים על Review and finalize ובודקים את הגדרות התצורה של מאזן העומסים.
לוחצים על יצירה.
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 (בשתי היציאות) מופצות בין כל המכונות הווירטואליות לקצה העורפי.
קבלת תנועה בכמה יציאות באמצעות שני כללי העברה
כשיצרתם את כלל ההעברה של מאזן העומסים לדוגמה, הגדרתם את היציאות 80, 8008, 8080 ו-8088. הסקריפט לטעינה בזמן ההפעלה שמתקין את Apache גם מגדיר אותו לקבל חיבורי HTTPS ביציאות 443 ו-8443.
במקום להגדיר כלל העברה אחד שמקבל תנועה בכל היציאות, אפשר ליצור כמה כללי העברה, שכל אחד מהם תומך בחמש יציאות או פחות.
בפרוצדורה הזו מוסבר איך להחליף את כלל ההעברה של מאזן העומסים לדוגמה בשני כללי העברה: אחד שמטפל בתנועה ביציאות 80, 8008, 8080 ו-8088, והשני שמטפל בתנועה ביציאות 443 ו-8443.
מידע נוסף על המקרים שבהם כדאי להשתמש בהגדרה הזו זמין במאמר מאזנים פנימיים של עומסי רשת להעברת סיגנל ללא שינוי וכללי העברה עם כתובת IP משותפת.
המסוף
במסוף Google Cloud , נכנסים לדף כללי העברה.
בעמודה שם, לוחצים על
fr-ilbואז על מחיקה.במסוף 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, בוחרים באפשרות Shared.
- מרשימת כתובות IP, בוחרים באפשרות Create IP address, מזינים את הפרטים הבאים ולוחצים על Reserve:
- שם:
internal-10-1-2-99 - כתובת IP סטטית: אני רוצה לבחור
- כתובת IP בהתאמה אישית:
10.1.2.99
- שם:
- בשדה Ports, בוחרים באפשרות Multiple, ובשדה Port numbers מזינים את הערכים
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, בוחרים באפשרות Shared.
- מרשימת כתובות IP, בוחרים באפשרות
internal-10-1-2-99. - בשדה Ports, בוחרים באפשרות Multiple, ובשדה Port numbers מזינים את הערכים
443ו-8443. - לוחצים על סיום.
- בשדה Name, מזינים
לוחצים על Review and finalize ובודקים את הגדרות התצורה של מאזן העומסים.
לוחצים על עדכון.
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 (בשתי היציאות) מופצות בין כל המכונות הווירטואליות לקצה העורפי.
שימוש בזיקה לסשן (session affinity)
ההגדרה לדוגמה יוצרת שירות לקצה העורפי בלי זיקה לסשן.
במדריך הזה מוסבר איך לעדכן את שירות הקצה העורפי של מאזן העומסים הפנימי לדוגמה, כדי להשתמש בזיקה לסשן שמבוססת על גיבוב (hash) שנוצר מכתובות ה-IP של הלקוח ומכתובת ה-IP של כלל ההעברה הפנימי של מאזן העומסים.
במאמר אפשרויות של זיקה לסשן תוכלו לקרוא על סוגי הזיקה לסשן שנתמכים.
.המסוף
במסוף Google Cloud , עוברים לדף איזון עומסים.
לוחצים על be-ilb (הש�� של שירות הקצה העורפי שיצרתם בדוגמה הזו) ואז על Edit.
בדף Edit internal passthrough Network Load Balancer, לוחצים על Backend configuration.
ברשימה Session affinity, בוחרים באפשרות Client 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: האזור של שירות הקצה העורפי שמעדכנים TRACKING_MODE: מצב המעקב אחרי החיבור שבו משתמשים לחבילות נכנסות. לרשימת הערכים הנתמכים, ראו מצב מעקב-
CONNECTION_PERSISTENCE_BEHAVIOR: התנהגות החיבור הקבוע כשה-backends לא תקינים. לרשימת הערכים הנתמכים, ראו חיבור קבוע ב-backends לא תקינים -
IDLE_TIMEOUT_VALUE: מספר השניות שבהן צריך לשמור רשומה בטבלת מעקב החיבורים, אחרי שמאזן העומסים מעבד את חבילת הנתונים האחרונה שתואמת לרשומה
שימוש בזיקה לאזור
בקטע הזה מוסבר איך להגדיר מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי כדי להפעיל שיוך לאזור ��שירות לקצה העורפי של מאזן העומסים. כברירת מחדל, הזיקה לאזור מושבתת. מידע נוסף זמין במאמר הגדרת תחום הזיקה של מאזני עומסי רשת פנימיים להעברת נתונים ללא שינוי.
כדי להגדיר את האפשרות
ZONAL_AFFINITY_STAY_WITHIN_ZONEלזמינות באזורים, משתמשים בפקודה הבאה. איךZONAL_AFFINITY_STAY_WITHIN_ZONEפועלgcloud 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 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 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 של מאזן עומסי הרשת הפנימי להעברת סיגנל ללא שינוי.
המסוף
הוספת רשת המשנה השנייה
במסוף Google Cloud , נכנסים לדף רשתות VPC.
לוחצים על Create VPC network.
לחץ על
lb-network.בקטע Subnets:
- לוחצים על Add subnet.
- בקטע New subnet, מזינים את הפרטים הבאים:
- שם:
second-subnet - אזור:
us-west1 - טווח כתובות IP:
10.5.6.0/24
- שם:
- לוחצים על הוספה.
הוספת כלל ההעברה השני
במסוף Google Cloud , עוברים לדף איזון עומסים.
לוחצים על מאזן העומסים
be-ilbואז על Edit.לוחצים על Frontend configuration.
לוחצים על Add frontend IP and port.
בקטע New Frontend IP and port, מגדירים את השדות הבאים ולוחצים על Done:
- שם:
fr-ilb-2 - גרסת IP: IPv4
- רשת משנה:
second-subnet - כתובת IP פנימית:
ip-ilb - יציאות:
80ו-443
- שם:
לפני שממשיכים, מוודאים שמופיע סימן וי כחול ליד Frontend configuration.
לוחצים על Review and finalize ובודקים את הגדרות התצורה של מאזן העומסים.
לוחצים על יצירה.
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 שבהם משתמשים.
שימוש בקבוצת משנה של קצה עורפי
ההגדרה לדוגמה יוצרת שירות לקצה העורפי בלי הגדרת קבוצת משנה.
בקטע הזה מוסבר איך להפעיל חלוקה לקבוצות משנה בשירות לקצה העורפי של מאזן עומסי הרשת הפנימי לדוגמה, כדי שאפשר יהיה להגדיל את מספר המכונות בקצה העורפי.
כדאי להפעיל את הגדרת קבוצת המשנה רק אם אתם צריכים לתמוך ביותר מ-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
}
}
יצירת מאזן עומסים לרפליקציה של חבילות נתונים
רפליקציה של חבילות נתונים מאפשרת להעתיק ולאסוף נתוני חבילות ממכונות ספציפיות ב-VPC. הנתונים שנאספים יכולים לעזור לכם לזהות איומי אבטחה ולעקוב אחרי ביצועי האפליקציה.
רפליקציה של חבילות נתונים דורשת מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי כדי לאזן את תעבורת הנתונים לקבוצת מכונות של יעדי איסוף. כדי ליצור מאזן עומסי רשת פנימי מסוג Pass-through לרפליקציה של חבילות נתונים, מבצעים את הפעולות הבאות.
המסוף
התחלת ההגדרה
במסוף Google Cloud , עוברים לדף איזון עומסים.
- לוחצים על יצירת מאזן עומסים.
- בקטע Type of load balancer, בוחרים באפשרות Network Load Balancer (TCP/UDP/SSL) ולוחצים על Next.
- בקטע Proxy or passthrough, בוחרים באפשרות Passthrough load balancer ולוחצים על Next.
- בקטע Public facing or internal, בוחרים באפשרות Internal ולוחצים על Next.
- לוחצים על הגדרה.
הגדרה בסיסית
- מזינים שם בשדה Load balancer name.
- בשדה Region, בוחרים את האזור של מכונות ה-VM שבהן רוצים לשקף מנות.
- בשדה Network, בוחרים את הרשת שבה רוצים לשקף את החבילות.
- לוחצים על Backend configuration.
- בקטע New Backend, בוחרים את קבוצת המכונות שאליה רוצים להעביר את החבילות בשדה Instance group.
- ברשימה Health check, לוחצים על Create a health check ומזינים את הפרטים הבאים:
- בשדה Name, מזינים שם לבדיקת התקינות.
- ברשימה Protocol, בוחרים באפשרות HTTP.
- בשדה יציאה, מזינים
80.
- לוחצים על יצירה.
- לוחצים על Frontend configuration.
- בקטע New Frontend IP and port, מבצעים את הפעולות הבאות:
- בשדה Name, מזינים שם.
- בשדה Subnetwork, בוחרים רשת משנה באותו אזור של המכונות שרוצים לשכפל.
- בשדה Ports, בוחרים באפשרות All.
- לוחצים על Advanced configurations ובוחרים בתיבת הסימון Enable this load balancer for רפליקציה של חבילות נתונים.
- לוחצים על סיום.
- לוחצים על יצירה.
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 שבהם מאזן העומסים יכול להשתמש.
- במאמר הגדרת יתירות כשל למאזני עומסי רשת פנימיים להעברת סיגנל ללא שינוי מוסבר איך מגדירים את יתירות הכשל, ומוצגת דוגמה להגדרה של יתירות כשל במאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי.
- במאמר רישום ביומן ומעקב אחרי מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי מוסבר איך מגדירים רישום ביומן ומעקב אחרי מאזני עומסי רשת פנימיים להעברת סיגנל ללא שינוי.
- במאמר מאזני עומסי רשת פנימיים ב-Passthrough ורשתות מחוברות מוסבר איך לגשת למאזני עומסי רשת פנימיים ב-Passthrough מרשתות שכנות שמחוברות לרשת ה-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. הכתובת המקומית לקישור משמשת בנתיב ברירת המחדל שמוגדר בטבלת הניתוב 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 לתנועה שמגיעה מרשת המשנה הזו.מאפשרים לשרת להתחבר לכתובת IPv6 לא מקומית – כתובת ה-VIP של מאזן העומסים.
sudo sysctl -w net.ipv6.ip_nonlocal_bind=1