הגדרת 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.

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

במדריך הזה אנחנו יוצאים מנקודת הנחה שכבר:

הגדרת שירות הקצה העורפי של IPv6

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

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

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

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

שימו לב: רק רשתות משנה במצב מותאם אישית נתמכות. אין תמיכה במצב אוטומטי. אפשר לעבור למצב מותאם אישית לכל רשת ה-VPC ואז לאכלס את העורפים של IPv6 (MIG או NEG).

  1. יוצרים רשת עם שני סוגי כתובות:

    gcloud compute networks create NETWORK \
        --subnet-mode=custom \
        --enable-ula-internal-ipv6
    
  2. יוצרים רשת משנה עם כתובות 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

  1. יצירת קבוצת מופעי מכונה מנוהלים באמצעות 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
    
  2. יצירת קבוצה של מופעי מכונה מנוהלים של שער פרוקסי:

    gcloud compute instance-groups managed create dual-stack-ZONE-gateway-mig \
    --zone=ZONE \
    --size=1 \
    --template=dual-stack-gateway-template
    
  3. יוצרים קבוצה של מופעי מכונה מנוהלים בעורף:

    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
    
  4. מוסיפים יציאה עם שם לקבוצת מופעי מכונה מנוהלים:

    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.

  5. יוצרים בדיקת תקינות:

    gcloud compute health-checks create http dualstack-health-check-http \
    
  6. מוודאים שכללי חומת האש מאפשרים בדיקות תקינות:

    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
    
  7. מחילים את בדיקת התקינות על ידי הגדרת מדיניות לתיקון אוטומטי של ה-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.

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

  1. הגדרת קבוצות של מכונות:

    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
    
  2. יוצרים שתי מכונות וירטואליות עם תמיכה ב-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 תוקצה אוטומטית.

  3. הוספת מכונות וירטואליות לקבוצות של מכונות וירטואליות:

    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

  1. מוסיפים קצה עורפי שבו --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
    
  2. הוספת נקודות קצה לקבוצה של נקודות קצה ברשת:

    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'
    

הגדרת בדיקת תקינות

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

      gcloud compute health-checks create http[s] my-health-check 
    --global
    --request-path '/'
    --port SERVICE_PORT

    מחליפים את SERVICE_PORT במספר היציאה, בין 1 ל-65535.

  2. יוצרים כלל חומת אש שמאפשר בדיקות תקינות:

    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

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

    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
    
  2. מוסיפים את השרתים העורפיים לשירות לקצה העורפי:

    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.

יצירת משאב של שער

  1. יוצרים קובץ בשם 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
    
  2. יוצרים את משאב השער מהמפרט של dual-stack-gateway.yaml:

    gcloud network-services gateways import dual-stack-gateway \
      --source=dual-stack-gateway.yaml \
      --location=global
    

הגדרת ניתוב באמצעות HTTPRoute

  1. יוצרים את המפרט של 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
    
  2. משתמשים במפרט ב-dual-stack-http-route.yaml כדי ליצור את משאב ה-HTTPRoute.

    gcloud network-services http-routes import dual-stack-http-route \
      --source=dual-stack-http-route.yaml \
      --location=global
    
  3. כדי לוודא שיש קישוריות מקצה לקצה, מתחברים למכונה הווירטואלית באמצעות 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 בשם של המכונה הווירטואלית הקיימת.

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

  1. יוצרים מכונות וירטואליות חדשות:

    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
    
  2. מוסיפים את המופעים החדשים לקבוצות המופעים:

    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
    
  3. יוצרים שירות קצה עורפי של 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
    
  4. מוסיפים את קבוצת המופעים המעודכנת לשירות הקצה העורפי החדש עם כתובות 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 לכל קבוצת מכונות

  1. יוצרים מכונות וירטואליות חדשות:

    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
    
  2. מוסיפים את המופעים החדשים לקבוצות המופעים:

    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
    
  3. יוצרים שירות לקצה העורפי עם כתובת 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
    
  4. מוסיפים את קבוצות המכונות המעודכנות לשירות לקצה העורפי החדש של 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.