הגדרת IPv6 dual-stack ל-Cloud Service Mesh
בדף הזה מוסבר איך לאזן עומסים של תנועת IPv6 ב-Cloud Service Mesh באמצעות מאזני עומסים מבוססי-proxy של Traffic Director (TD), וגם איך להעביר פריסות מבוססות-IPv4 לפריסות עם תמיכה כפולה (IPv4 ו-IPv6) ואיך להעביר פריסות עם תמיכה כפולה לפריסות מבוססות-IPv4.
בפריסות של dual-stack יש לכם אפשרות לציין אם IPv4 או IPv6 נשלח לחלק האחורי של השירות. שרת ה-proxy או לקוח ה-gRPC בודקים כל נתיב נתונים לפי סדר העדיפות שהגדרתם, ובוחרים את הנתיב שתואם להעדפות שלכם ולמה שנתמך.
תכונות של פרוטוקול כפול נתמכות ב-gRPC 1.66.1 ומעלה עבור C++ ו-Python, ב-1.12 ומעלה עבור Node וב-1.71 ומעלה עבור Go. בשלב הזה אין תמיכה ב-Java.
גרסאות של gRPC ללא תמיכה ב-dual-stack (כלומר, Go וגרסאות קודמות ל-1.66 בשפות אחרות) ישתמשו רק בכתובת הראשונה של כל נקודת קצה, לפי הסדר שנשלח על ידי TD.
לפני שמתחילים
במדריך הזה אנחנו יוצאים מנקודת הנחה שכבר:
- הגדרת ממשקי API לניתוב שירותים באמצעות Envoy ועומסי עבודה בלי שרת Proxy
- השלמתם את השלבים בקטע המשך תהליך ההגדרה במדריך לתחילת השימוש.
הגדרת שירות הקצה העורפי של IPv6
בקטע הזה קובעים את ההגדרות הבאות:
- שתי קבוצות עורפיות (backend) (קבוצות של מכונות וירטואליות, קבוצות של מכונות וירטואליות מנוהלות או קבוצות של נקודות קצה ברשת), אחת בכל אחד משני אזורים שונים באותו אזור.
- שני מופעים של מכונות וירטואליות בכל קבוצת קצה עורפי.
- בדיקת תקינות לאימות התקינות של מופע.
- כללי חומת אש שמאפשרים לבדיקות תקינות להגיע לשרתים עורפיים.
- שירות לקצה העורפי.
- השירות לקצה העורפי שכולל את שתי קבוצות הקצה העורפי שהוגדרו.
הגדרת רשת משנה לשרתי הקצה העורפיים
הפקודה הבאה מקצה טווחי כתובות פנימיות ל-IPv4 ול-IPv6, ומאפשרת להקצות למכונות וירטואליות ברשת המשנה כתובות משני הסוגים.
שימו לב: רק רשתות משנה במצב מותאם אישית נתמכות. אין תמיכה במצב אוטומטי. אפשר לעבור למצב מותאם אישית לכל רשת ה-VPC ואז לאכלס את העורפים של IPv6 (MIG או NEG).
יוצרים רשת עם שני סוגי כתובות:
gcloud compute networks create NETWORK \ --subnet-mode=custom \ --enable-ula-internal-ipv6יוצרים רשת משנה עם כתובות IPv4 ו-IPv6 למכונות וירטואליות של קצה עורפי:
gcloud compute networks subnets create SUBNET \ --network=NETWORK \ --range=PRIMARY_IPv4_RANGE \ --stack-type=IPV4_IPV6 \ --ipv6-access-type=IPv6_ACCESS_TYPE \ --region=REGIONמחליפים את מה שכתוב בשדות הבאים:
- SUBNET: שם לתת-הרשת החדשה.
- NETWORK: השם של רשת ה-VPC שתכיל את תת-הרשת החדשה.
- PRIMARY_IPv4_RANGE: טווח ה-IPv4 הראשי של תת-הרשת החדשה, בסימון CIDR. מידע נוסף זמין במאמר בנושא טווחים של רשתות משנה ב-IPv4.
- IPv6_ACCESS_TYPE: סוג הגישה ל-IPv6.
הערך יכול להיות
EXTERNALאוINTERNAL. - REGION: Google Cloud האזור שבו תיווצר רשת המשנה החדשה.
הגדרת קצה עורפי
אפשר להשתמש בקבוצות של מופעי מכונה מנוהלים (MIG), בקבוצות של מופעי מכונה לא מנוהלים או בקבוצות של נקודות קצה ברשת (NEG).
MIG
יצירת קבוצת מופעי מכונה מנוהלים באמצעות
dual-stack-gateway-template:gcloud alpha compute instance-templates create dual-stack-gateway-template \ --region=REGION \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=dual-stack-http-server \ --network=NETWORK \ --subnet=SUBNET \ --stack-type=IPV4_IPV6 \ --service-proxy=enabled,scope=gateway-proxy
יצירת קבוצה של מופעי מכונה מנוהלים של שער פרוקסי:
gcloud compute instance-groups managed create dual-stack-ZONE-gateway-mig \ --zone=ZONE \ --size=1 \ --template=dual-stack-gateway-template
יוצרים קבוצה של מופעי מכונה מנוהלים בעורף:
gcloud compute instance-templates create dual-stack-backend-template \ --region=REGION \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=dual-stack-http-server \ --network=NETWORK \ --subnet=SUBNET \ --stack-type=IPV4_IPV6 \ --metadata=startup-script="#! /bin/bash sudo apt-get update -y sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype <html><body><h1>'\`dual-stack-server\`'</h1></body></html>' | sudo tee /var/www/html/index.html"gcloud compute instance-groups managed create dual-stack-ZONE-backend-mig \ --zone=ZONE \ --size=1 \ --template=dual-stack-backend-template
מוסיפים יציאה עם שם לקבוצת מופעי מכונה מנוהלים:
gcloud compute instance-groups set-named-ports us-ig-1 \ --named-ports http:80 \ --zone ZONE \ gcloud compute instance-groups set-named-ports us-ig-2 \ --named-ports http:80 \ --zone ZONE
אנחנו משתמשים בבדיקות תקינות נפרדות לאיזון עומסים ולתיקון אוטומטי. בדרך כלל, בדיקות התקינות לאיזון עומסים מוגדרות להיות אגרסיביות יותר, כי הן קובעות אם מכונה וירטואלית מקבלת תעבורת נתונים של משתמשים, ואם רוצים להפנות מחדש את התעבורה במהירות אם יש צורך בכך.
בדיקת התקינות לצורך תיקון אוטומטי גורמת ל-Compute Engine להחליף באופן יזום מכונות וירטואליות שנכשלות, ולכן בדיקת התקינות הזו צריכה להיות שמרנית יותר מבדיקת תקינות של איזון עומסים. שימו לב: תיקון תוכנה אוטומטי (autohealing) של מכונות וירטואליות עם תמיכה ב-IPv4 ו-IPv6 יתבסס על בדיקות תקינות של IPv4.
יוצרים בדיקת תקינות:
gcloud compute health-checks create http dualstack-health-check-http \
מוודאים שכללי חומת האש מאפשרים בדיקות תקינות:
IPv4
gcloud compute firewall-rules create dual-stack-allow-ipv4-health-check \ --network=NETWORK \ --action=ALLOW \ --direction=INGRESS \ --source-ranges=35.191.0.0/16,130.211.0.0/22 \ --target-tags=dual-stack-http-server \ --rules=tcp:22,80
IPv6
gcloud compute firewall-rules create dual-stack-allow-ipv6-health-check \ --network=NETWORK \ --action=ALLOW \ --direction=INGRESS \ --source-ranges=::/0 \ --target-tags=dual-stack-http-server \ --rules=tcp:22,80
מחילים את בדיקת התקינות על ידי הגדרת מדיניות לתיקון אוטומטי של ה-MIG:
gcloud compute instance-groups managed update us-mig-1 \ --health-check dualstack-health-check-http \ --initial-delay 300 \ --zone us-central1-a
ההגדרה initial-delay מעכבת את התיקון התוכנה האוטומטי (autohealing) כדי למנוע יצירה מחדש של ה-VM לפני שהיא מסיימת את תהליך ההפעלה. הטיימר של ההשהיה הראשונית מתחיל כשהשדה currentAction של המכונה הווירטואלית משתנה ל-VERIFYING.
קבוצות של מופעים לא מנוהלים
הגדרת קבוצות של מכונות:
gcloud compute instance-groups unmanaged create us-ig-1 \ --zone us-central1-a \ gcloud compute instance-groups unmanaged create us-ig-2 \ --zone us-central1-b
יוצרים שתי מכונות וירטואליות עם תמיכה ב-Dual Stack בכל קבוצת מופעים:
gcloud compute instances create inst-us-central1-1 \ --image-family debian-12 \ --image-project debian-cloud \ --tags network-lb \ --zone us-central1-a \ --network-interface [--network=NETWORK | --subnet=SUBNET] \ --stack-type=IPV4_IPV6 \ gcloud compute instances create inst-us-central1-2 \ --image-family debian-12 \ --image-project debian-cloud \ --tags network-lb \ --zone us-central1-a \ --network-interface [--network=NETWORK | --subnet=SUBNET] \ --stack-type=IPV4_IPV6 \ gcloud compute instances create inst-us-central1-3 \ --image-family debian-12 \ --image-project debian-cloud \ --tags network-lb \ --zone us-central1-b \ --network-interface [--network=NETWORK | --subnet=SUBNET] \ --stack-type=IPV4_IPV6 \ gcloud compute instances create inst-us-central1-4 \ --image-family debian-12 \ --image-project debian-cloud \ --tags network-lb \ --zone us-central1-b \ --network-interface [--network=NETWORK | --subnet=SUBNET] \ --stack-type=IPV4_IPV6
כתובת ה-IPv6 תוקצה אוטומטית.
הוספת מכונות וירטואליות לקבוצות של מכונות וירטואליות:
gcloud compute instance-groups unmanaged add-instances us-ig-1 \ --instances inst-us-central1-1,inst-us-central1-2 \ --zone us-central1-a \ gcloud compute instance-groups unmanaged add-instances us-ig-2 \ --instances inst-us-central1-3,inst-us-central1-4 \ --zone us-central1-b
NEG
מוסיפים קצה עורפי שבו
--network-endpoint-typeהוא GCE_VM_IP_PORT:gcloud compute network-endpoint-groups create us-neg-lb-1 \ --network=NETWORK SUBNET \ --zone=us-central1-a --network-endpoint-type=GCE_VM_IP_PORT \ gcloud compute network-endpoint-groups create us-neg-lb-2 \ --network=NETWORK SUBNET \ --zone=us-central1-b --network-endpoint-type=GCE_VM_IP_PORT
הוספת נקודות קצה לקבוצה של נקודות קצה ברשת:
gcloud compute network-endpoint-groups update us-neg-lb-1 \--zone=us-central1-a \ --add-endpoint 'instance=inst-us-central1-1,ip=IPV4_ADRS_1, ipv6=IPV6_ADRS_1,port=80' \ --add-endpoint 'instance=inst-us-central1-2,ip=IPV4_ADRS_2, ipv6=IPV6_ADRS_2,port=80' \ gcloud compute network-endpoint-groups update us-neg-lb-2 --zone=us-central1-b \ --add-endpoint 'instance=inst-us-central1-3,ip=IPV4_ADRS_3, ipv6=IPV6_ADRS_3,port=80' \ --add-endpoint 'instance=inst-us-central1-4,ip=IPV4_ADRS_4,ipv6=IPV6_ADRS_4,port=80'
הגדרת בדיקת תקינות
יוצרים בדיקת תקינות לשירות הקצה העורפי:
gcloud compute health-checks create http[s] my-health-check
--global
--request-path '/'
--port SERVICE_PORTמחליפים את SERVICE_PORT במספר היציאה, בין 1 ל-65535.
יוצרים כלל חומת אש שמאפשר בדיקות תקינות:
gcloud compute firewall-rules create allow-scan-probe \ --action allow \ --description "allow-scan-probe" \ --rules tcp:SERVICE_PORT \ --source-ranges 2600:2d00:1:b029::/64 \ --priority 10 \ --network=NETWORK
הטווח 2600:2d00:1:b029::/64 משמש לכתובות ה-IP של המקור של בודקי התקינות כדי לבדוק את תקינות ה-VM-ים. שימו לב: הכתובת 2600:2d00:1:b029::/64 משמשת ככתובת ה-IP של המקור לבדיקות תקינות של IPv6 כדי לבדוק את התקינות של מכונות וירטואליות בבק-אנד של איזון עומסים ברשת.
יצירה ועדכון של שירות לקצה העורפי באמצעות Backends
יוצרים את שירות הקצה העורפי:
gcloud compute backend-services create my-backend-service \ --ip-address-selection-policy PREFER_IPV6 \ --global \ --health-checks my-health-check \ --load-balancing-scheme=INTERNAL_SELF_MANAGED \ --timeout=5m
מוסיפים את השרתים העורפיים לשירות לקצה העורפי:
gcloud compute backend-services add-backend my-backend-service \ --instance-group us-ig-1 \ --instance-group-zone us-central1-a \ --global \ gcloud compute backend-services add-backend my-backend-service \ --instance-group us-ig-2 \ --instance-group-zone us-central1-b \ --global
הגדרת שירות Cloud Service Mesh
בקטע הזה מוסבר איך להגדיר שירות IPv6 ב-Traffic Director. יכול להיות שהשירות הוא חלק מהגדרת Service Mesh, או שהוא משמש להגדרת שער שירות כמו מכונה וירטואלית שמופעל בה Envoy.
אחרי שמגדירים את שירותי ה-Backend עם PREFER_IPV6, אפשר ליצור משאב של שער appnet.
יצירת משאב של שער
יוצרים קובץ בשם
dual-stack-gateway.yamlעם הגדרת שער לתנועת HTTP:cat <<EOF | tee dual-stack-gateway.yaml name: dual-stack-gateway scope: gateway-proxy ipVersion: IPV6 ports: - 80 type: OPEN_MESH EOFיוצרים את משאב השער מהמפרט של
dual-stack-gateway.yaml:gcloud network-services gateways import dual-stack-gateway \ --source=dual-stack-gateway.yaml \ --location=global
הגדרת ניתוב באמצעות HTTPRoute
יוצרים את המפרט של HTTPRoute בקובץ בשם
dual-stack-http_route.yaml:cat <<EOF | tee dual-stack-http-route.yaml name: dual-stack-http-route hostnames: - dual-stack-server gateways: - projects/PROJECT_ID/locations/global/gateways/dual-stack-gateway rules: - action: destinations: - serviceName: "projects/PROJECT_ID/locations/global/backendServices/dual-stack-backend-service" EOFמשתמשים במפרט ב-
dual-stack-http-route.yamlכדי ליצור את משאב ה-HTTPRoute.gcloud network-services http-routes import dual-stack-http-route \ --source=dual-stack-http-route.yaml \ --location=global
כדי לוודא שיש קישוריות מקצה לקצה, מתחברים למכונה הווירטואלית באמצעות SSH מ-MIG של שער ומריצים את הפקודה הבאה:
curl -H 'Host: dual-stack-server' http://[::]
הפלט אמור להיראות כך:
<!doctype <html><body><h1>'`dual-stack-server`'</h1></body></html>
מעבר מ-IPv4 ל-dual-stack
כדי להעביר מ-IPv4 ל-dual-stack, צריך לעמוד בדרישות המוקדמות הבאות:
- קבוצות קיימות של מכונות וירטואליות עם מחסנית אחת
us-ig-1ו-us-ig-2עם מחסניתIPV4_ONLYעם מכונות וירטואליות קיימות - שירות קצה עורפי יחיד של IPv4
my-ipv4-backend-serviceשמצביע עלus-ig-1ועלus-ig-2 - רשת משנה של מכונות וירטואליות
IPV4_ONLY - משאב שער שהוגדר עם כתובת בגרסת IPv4
שדרוג רשת המשנה ל-dual-stack
מעדכנים את רשת המשנה הקיימת של ה-backend כדי לתמוך ב-IPv6:
gcloud compute networks subnets update SUBNET \ --stack-type IPV4_IPV6 \ --ipv6-access-type=IPv6_ACCESS_TYPE \
מחליפים את מה שכתוב בשדות הבאים:
- SUBNET: שם לתת-הרשת החדשה.
- IPv6_ACCESS_TYPE: סוג הגישה ל-IPv6.
הערך יכול להיות
EXTERNALאוINTERNAL.
שדרוג כל מכונה וירטואלית ל-dual-stack
gcloud compute instances network-interfaces update EXISTING_VM_NAME \ --stack-type=IPV4_IPV6 \ --zone=us-central1
מחליפים את EXISTING_VM_NAME בשם של המכונה הווירטואלית הקיימת.
הוספת מכונות וירטואליות חדשות עם מחסנית כפולה לכל קבוצת מכונות
יוצרים מכונות וירטואליות חדשות:
gcloud compute instances create my-new-vm-1 \ --image-family debian-12 \ --tags network-lb \ --zone us-central1-a \ --network-interface [--network=NETWORK | --subnet=SUBNET] \ --stack-type=IPV4_IPV6 \ gcloud compute instances create my-new-vm-2 \ --image-family debian-12 \ --tags network-lb \ --zone us-central1-b \ --network-interface [--network=NETWORK | --subnet=SUBNET] \ --stack-type=IPV4_IPV6
מוסיפים את המופעים החדשים לקבוצות המופעים:
gcloud compute instance-groups unmanaged add-instances us-ig-1 \ --instances my-new-vm-1 \ --zone us-central1-a \ gcloud compute instance-groups unmanaged add-instances us-ig-2 \ --instances my-new-vm-2 \ --zone us-central1-b
יוצרים שירות קצה עורפי של IPv6:
gcloud compute backend-services create dual-stack-backend-service \ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGED \ --protocol=HTTP \ --health-checks=dual-stack-health-check-http \ --ip-address-selection-policy=PREFER_IPV6
מוסיפים את קבוצת המופעים המעודכנת לשירות הקצה העורפי החדש עם כתובות IPv4 ו-IPv6:
gcloud compute backend-services add-backend dual-stack-backend-service \ --instance-group=us-ig-1 \ --instance-group-zone=ZONE \ --global
gcloud compute backend-services add-backend dual-stack-backend-service \ --instance-group=us-ig-2 \ --instance-group-zone=ZONE \ --global
מעבר מ-dual-stack ל-IPv4
כדי להעביר את המינוי מ-dual-stack ל-IPv4, צריך לעמוד בדרישות המוקדמות הבאות:
- קבוצות קיימות של מכונות וירטואליות עם מחסנית כפולה
us-ig-1ו-us-ig-2עם מחסניתIPV4_IPV6עם מכונות וירטואליות קיימות - שירות קצה עורפי יחיד של IPv6
my-ipv6-backend-serviceשמפנה אלus-ig-1ו-us-ig-2 - רשת משנה של מכונות וירטואליות מסוג IPV4_IPV6
- משאב שער
שדרוג לאחור של כל מכונה וירטואלית ל-IPv4
gcloud compute instances network-interfaces update EXISTING_VM_NAME \ --stack-type=IPV4_ONLY \ --zone=us-central1
הוספת מכונות וירטואליות חדשות עם מחסנית IPv4 לכל קבוצת מכונות
יוצרים מכונות וירטואליות חדשות:
gcloud compute instances create my-new-vm-1 \ --image-family debian-12 \ --tags network-lb \ --zone us-central1-a \ --network-interface [--network=NETWORK | --subnet=SUBNET] \ --stack-type=IPV4_ONLY \ gcloud compute instances create my-new-vm-2 \ --image-family debian-12 \ --tags network-lb \ --zone us-central1-b \ --network-interface [--network=NETWORK | --subnet=SUBNET] \ --stack-type=IPV4_ONLY
מוסיפים את המופעים החדשים לקבוצות המופעים:
gcloud compute instance-groups unmanaged add-instances us-ig-1 \ --instances my-new-vm-1 \ --zone us-central1-a \ gcloud compute instance-groups unmanaged add-instances us-ig-2 \ --instances my-new-vm-2 \ --zone us-central1-b
יוצרים שירות לקצה העורפי עם כתובת IPv4:
gcloud compute backend-services create my-ipv4-backend-service \ –ip-address-selection-policy IPV4_ONLY \ --global \ --health-checks my-health-check \ --load-balancing-scheme INTERNAL_SELF_MANAGED \ --timeout=5m
מוסיפים את קבוצות המכונות המעודכנות לשירות לקצה העורפי החדש של IPv4:
gcloud compute backend-services add-backend my-ipv4-backend-service \ --instance-group us-ig1 \ --instance-group-zone us-central1-a \ --global \ gcloud compute backend-services add-backend my-ipv4-backend-service \ --instance-group us-ig2 \ --instance-group-zone us-central1-b \ --global
עכשיו שירותי הקצה העורפי של IPv4 ו-IPv6 יכולים להעביר תנועה. מעדכנים את מיפוי כתובות ה-URL כדי להפנות חלק מתנועת הלקוחות לשירות החדש של IPv4 backend.