Mengonfigurasi stack ganda IPv6 untuk Cloud Service Mesh

Halaman ini menunjukkan cara melakukan load balancing traffic IPv6 di Cloud Service Mesh menggunakan load balancer berbasis proxy Traffic Director (TD) serta cara bermigrasi dari deployment berbasis IPv4 ke deployment dual-stack (IPv4 dan IPv6) dan cara bermigrasi dari dual-stack ke IPv4.

Pada deployment dual-stack, Anda memiliki opsi untuk menunjukkan apakah IPv4 atau IPv6 dikirim ke backend layanan. Klien proxy atau gRPC menguji setiap jalur data dalam urutan preferensi Anda dan memilih jalur yang sesuai dengan preferensi Anda dan yang didukung.

Fitur dual-stack didukung di gRPC 1.66.1 dan yang lebih baru untuk C++ dan Python, 1.12 dan yang lebih baru untuk Node, serta 1.71 dan yang lebih baru untuk Go. Java tidak didukung saat ini.

Versi gRPC tanpa dukungan stack ganda (yaitu, Go dan versi sebelum 1.66 dalam bahasa lain) hanya akan menggunakan alamat pertama dari setiap endpoint, dalam urutan yang dikirim oleh TD.

Sebelum memulai

Panduan ini mengasumsikan bahwa Anda telah:

Menyiapkan layanan backend IPv6

Di bagian ini, Anda akan mengonfigurasi hal berikut:

  • Dua grup backend (grup instance, grup instance terkelola, atau grup endpoint jaringan), satu di setiap dua zona berbeda dalam region yang sama.
  • Dua instance VM di setiap grup backend.
  • Health check untuk memverifikasi kondisi instance.
  • Aturan firewall yang mengizinkan health check menjangkau backend.
  • Layanan backend.
  • Layanan backend untuk menyertakan dua grup backend yang dikonfigurasi.

Menyiapkan subnet untuk backend

Perintah berikut mengalokasikan rentang alamat internal untuk IPv4 dan IPv6, serta memungkinkan VM di subnet dialokasikan dengan salah satu jenis alamat.

Perhatikan bahwa hanya subnet mode kustom yang didukung. Tidak ada dukungan mode otomatis. Anda dapat beralih ke mode kustom untuk seluruh jaringan VPC, lalu mengisi Backend IPv6 (MIG atau NEG).

  1. Buat jaringan stack ganda:

    gcloud compute networks create NETWORK \
        --subnet-mode=custom \
        --enable-ula-internal-ipv6
    
  2. Buat Subnet stack ganda untuk VM Backend:

    gcloud compute networks subnets create SUBNET \
        --network=NETWORK \
        --range=PRIMARY_IPv4_RANGE \
        --stack-type=IPV4_IPV6 \
        --ipv6-access-type=IPv6_ACCESS_TYPE \
        --region=REGION
    

    Ganti kode berikut:

    • SUBNET: nama untuk subnet baru.
    • NETWORK: nama jaringan VPC yang akan berisi subnet baru.
    • PRIMARY_IPv4_RANGE: rentang IPv4 utama untuk subnet baru, dalam notasi CIDR. Untuk mengetahui informasi selengkapnya, lihat Rentang subnet IPv4.
    • IPv6_ACCESS_TYPE: jenis akses IPv6. Nilainya dapat berupa EXTERNAL atau INTERNAL.
    • REGION: region Google Cloud tempat subnet baru akan dibuat.

Menyiapkan backend

Anda dapat memilih untuk menggunakan Grup Instance Terkelola (MIG), Grup Instance Tidak Terkelola, atau Grup Endpoint Jaringan (NEG).

MIG

  1. Buat Grup Instance Terkelola dengan 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. Buat grup instance terkelola proxy gateway:

    gcloud compute instance-groups managed create dual-stack-ZONE-gateway-mig \
    --zone=ZONE \
    --size=1 \
    --template=dual-stack-gateway-template
    
  3. Buat grup instance terkelola backend:

    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. Tambahkan port bernama ke Grup Instance Terkelola:

    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
    

    Kami menggunakan health check terpisah untuk load balancing dan untuk autohealing. Health check untuk load balancing biasanya dikonfigurasi agar lebih agresif karena health check ini menentukan apakah VM menerima traffic pengguna dan apakah Anda ingin dengan cepat mengarahkan ulang traffic jika diperlukan.

    Health check untuk autohealing menyebabkan Compute Engine secara proaktif mengganti VM yang gagal, sehingga health check ini harus lebih konservatif daripada health check load balancing. Perhatikan bahwa Autohealing untuk VM dual-stack akan didasarkan pada Health check IPv4.

  5. Membuat health check:

    gcloud compute health-checks create http dualstack-health-check-http \
    
  6. Pastikan aturan firewall mengizinkan health check:

    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. Terapkan health check dengan mengonfigurasi kebijakan autohealing untuk MIG Anda:

    gcloud compute instance-groups managed update us-mig-1 \
      --health-check dualstack-health-check-http \
      --initial-delay 300 \
      --zone us-central1-a
    

Setelan penundaan awal menunda autohealing agar tidak membuat ulang VM secara prematur jika VM sedang dalam proses dimulai. Timer penundaan awal dimulai saat kolom currentAction VM berubah menjadi VERIFYING.

Grup Instance Tidak Terkelola

  1. Konfigurasi Grup Instance:

    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. Buat dua instance VM Stack Ganda di setiap grup instance:

    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
    

    Alamat IPv6 akan ditetapkan secara otomatis.

  3. Tambahkan VM ke grup instance:

    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. Tambahkan backend dengan --network-endpoint-type adalah 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. Menambahkan endpoint ke Grup Endpoint Jaringan:

    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'
    

Mengonfigurasi Health Check

  1. Buat Health Check untuk layanan backend:

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

    Ganti SERVICE_PORT dengan nomor port, dari 1 hingga 65535.

  2. Buat aturan firewall untuk mengizinkan health check:

    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
    

Rentang 2600:2d00:1:b029::/64 digunakan untuk alamat IP sumber Health-checker untuk memeriksa kesehatan VM. Perhatikan bahwa 2600:2d00:1:b029::/64 digunakan sebagai alamat IP Sumber untuk Pemeriksa Status IPv6 untuk memeriksa status VM backend Load Balancer Jaringan.

Membuat dan memperbarui layanan backend dengan Backends

  1. Buat layanan backend:

    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. Tambahkan backend ke layanan backend:

    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
    

Menyiapkan layanan Cloud Service Mesh

Bagian ini menunjukkan cara mengonfigurasi layanan IPv6 di Traffic Director. Layanan ini dapat menjadi bagian dari konfigurasi Service Mesh, atau dapat digunakan untuk mengonfigurasi Service Gateway seperti VM yang menjalankan Envoy.

Setelah layanan backend dengan PREFER_IPV6 dikonfigurasi, Anda dapat membuat resource gateway appnet.

Membuat resource gateway

  1. Dalam file bernama dual-stack-gateway.yaml, buat spesifikasi Gateway untuk traffic HTTP:

    cat <<EOF | tee dual-stack-gateway.yaml
    name: dual-stack-gateway
    scope: gateway-proxy
    ipVersion: IPV6
    ports:
    - 80
    type: OPEN_MESH
    EOF
    
  2. Buat resource Gateway dari spesifikasi dual-stack-gateway.yaml:

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

Menyiapkan pemilihan rute dengan HTTPRoute

  1. Dalam file bernama dual-stack-http_route.yaml, buat spesifikasi HTTPRoute:

    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. Gunakan spesifikasi di dual-stack-http-route.yaml untuk membuat resource HTTPRoute.

    gcloud network-services http-routes import dual-stack-http-route \
      --source=dual-stack-http-route.yaml \
      --location=global
    
  3. Untuk memverifikasi konektivitas menyeluruh, gunakan SSH ke VM dari gateway MIG dan jalankan perintah berikut:

    curl -H 'Host: dual-stack-server' http://[::]
    

    Outputnya mirip dengan:

    <!doctype <html><body><h1>'`dual-stack-server`'</h1></body></html>
    

Bermigrasi dari IPv4 ke stack ganda

Anda harus memenuhi prasyarat berikut sebelum dapat bermigrasi dari IPv4 ke dual-stack:

  • Grup instance VM stack tunggal yang ada us-ig-1 dan us-ig-2 dengan stack IPV4_ONLY dengan VM yang ada
  • Satu layanan backend IPv4 my-ipv4-backend-service yang mengarah ke us-ig-1 dan us-ig-2
  • Subnet VM IPV4_ONLY
  • Resource gateway yang dikonfigurasi dengan alamat versi IPv4

Mengupgrade subnet ke stack ganda

Perbarui subnet yang ada untuk backend agar mendukung IPv6:

gcloud compute networks subnets update SUBNET \
  --stack-type IPV4_IPV6 \
  --ipv6-access-type=IPv6_ACCESS_TYPE \

Ganti kode berikut:

  • SUBNET: nama untuk subnet baru.
  • IPv6_ACCESS_TYPE: jenis akses IPv6. Nilainya dapat berupa EXTERNAL atau INTERNAL.

Mengupgrade setiap VM ke stack ganda

gcloud compute instances network-interfaces update EXISTING_VM_NAME \
  --stack-type=IPV4_IPV6 \
  --zone=us-central1

Ganti EXISTING_VM_NAME dengan nama VM yang sudah ada.

Menambahkan VM dual-stack baru ke setiap grup instance

  1. Buat instance VM baru:

    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. Tambahkan instance baru ke grup instance:

    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. Buat layanan backend 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. Tambahkan Instance-Group yang telah diperbarui ke layanan backend Dual Stack yang baru dibuat:

    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
    

Bermigrasi dari stack ganda ke IPv4

Anda harus memenuhi prasyarat berikut sebelum dapat bermigrasi dari dual-stack ke IPv4:

  • Grup instance VM stack ganda yang ada us-ig-1 dan us-ig-2 dengan stack IPV4_IPV6 dengan VM yang ada
  • Satu layanan backend IPv6 my-ipv6-backend-service yang mengarah ke us-ig-1 dan us-ig-2
  • Subnet VM IPV4_IPV6
  • Resource gateway

Mendowngrade setiap VM ke IPv4

gcloud compute instances network-interfaces update EXISTING_VM_NAME \
  --stack-type=IPV4_ONLY \
  --zone=us-central1

Menambahkan VM stack IPv4 baru ke setiap grup instance

  1. Buat instance VM baru:

    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. Tambahkan instance baru ke grup instance:

    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. Buat layanan backend 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. Tambahkan Grup Instance yang diperbarui ke layanan backend IPv4 yang baru dibuat:

    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
    

    Sekarang, layanan backend IPv4 dan IPv6 dapat menayangkan traffic. Perbarui peta URL untuk mengarahkan sebagian kecil traffic klien ke layanan backend IPv4 baru.