Menyiapkan Load Balancer Jaringan passthrough eksternal global untuk beberapa protokol IP

Dokumen ini menunjukkan cara membuat Load Balancer Jaringan passthrough eksternal global untuk menyeimbangkan traffic TCP, UDP, ESP, GRE, ICMP, dan ICMPv6.

Anda dapat menggunakan konfigurasi tersebut untuk:

  • Menyeimbangkan beban traffic yang menggunakan protokol IP selain TCP atau UDP.

  • Menayangkan beberapa protokol dengan satu load balancer. Misalnya, layanan IPsec biasanya menangani beberapa kombinasi traffic IKE dan NAT-T berbasis UDP dan ESP.

Sebelum memulai

Pastikan penyiapan Anda memenuhi prasyarat berikut.

Menginstal Google Cloud CLI

Petunjuk dalam panduan ini menggunakan Google Cloud CLI untuk mengonfigurasi Network Load Balancer passthrough eksternal global. Untuk menginstalnya, lihat Menginstal gcloud CLI.

Peran yang diperlukan

Jika Anda adalah project creator, Anda diberi peran Pemilik (roles/owner). Secara default, peran Pemilik (roles/owner) atau peran Editor (roles/editor) mencakup izin yang diperlukan untuk mengikuti dokumen ini.

Jika Anda bukan project creator, izin yang diperlukan harus diberikan pada project kepada akun utama yang sesuai. Misalnya, akun utama dapat berupa Akun Google (untuk pengguna akhir) atau akun layanan.

Agar mendapatkan izin yang diperlukan untuk mengonfigurasi Network Load Balancer passthrough eksternal global dengan backend grup instance VM, minta administrator untuk memberi Anda peran IAM berikut di project Anda:

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Untuk mengetahui informasi selengkapnya tentang peran dan izin untuk Cloud Load Balancing, lihat Peran dan izin. Untuk mengetahui informasi selengkapnya tentang cara menentukan kebijakan IAM dengan pemberian bersyarat untuk aturan penerusan, lihat Kondisi IAM untuk aturan penerusan.

Ringkasan penyiapan

Diagram berikut menunjukkan dua Load Balancer Jaringan passthrough eksternal global untuk pasangan alamat IP yang sama, yang masing-masing melayani serangkaian protokol dan port IP yang berbeda. Untuk memahami cara kerja Load Balancer Jaringan passthrough eksternal global, lihat bagian Arsitektur dalam panduan ringkasan.

  1. Load balancer TCP di port 80

    Aturan penerusan load balancer ini dikonfigurasi untuk merekam hanya traffic TCP yang tiba secara khusus di port 80.

    • Saat paket tiba di alamat IP aturan penerusan,Google Cloud pertama-tama periksa apakah paket tersebut adalah paket TCP dan apakah port tujuannya persis 80.
    • Jika kondisi tersebut terpenuhi, paket ini akan diambil oleh aturan penerusan TCP tertentu ini dan dirutekan ke backend berdasarkan layanan backend yang dirujuk.
  2. Load balancer L3_DEFAULT untuk traffic TCP:8080 dan UDP

    Aturan penerusan load balancer ini menggunakan protokol L3_DEFAULT dan dikonfigurasi untuk menerima traffic di semua port. Dalam penyiapan ini, aturan ini bertindak sebagai aturan catch-all yang menangani traffic yang tidak ditangani oleh aturan pengalihan pertama (seperti UDP, ICMP, dan semua traffic TCP selain port 80).

    • Jika paket tiba di alamat IP aturan penerusan yang tidak cocok dengan traffic TCP tertentu yang tiba di aturan port 80 (misalnya, jika berupa traffic UDP, ping ICMP, atau traffic TCP di port 8080 atau 443), paket ini akan diambil oleh aturan penerusan L3_DEFAULT.
    • Tambahkan aturan firewall untuk mengizinkan hanya traffic TCP:8080 dan UDP untuk menjangkau instance VM backend. Jadi, meskipun aturan penerusan L3_DEFAULT mencakup semua traffic protokol IP di semua port, aturan firewall membatasi traffic yang di-load balance ke traffic TCP:8080 dan UDP.
    • Paket kemudian dirutekan ke backend berdasarkan layanan backend yang dirujuk.

    Google Cloud memrioritaskan aturan TCP yang lebih spesifik di port 80 sebelum mengizinkan traffic yang tersisa mengalir melalui aturan L3_DEFAULT di alamat IP yang sama.

Dua Load Balancer Jaringan passthrough eksternal global mengirim traffic ke backend grup instance VM yang di-deploy di region `us-west1` dan `europe-west2`.
Dua Load Balancer Jaringan passthrough eksternal global untuk pasangan alamat IP yang sama, masing-masing melayani serangkaian protokol dan port IP yang berbeda (klik untuk memperbesar).

Menyiapkan jaringan dan subnet

Contoh ini menggunakan jaringan VPC mode kustom bernama lb-network dengan subnet di dua region yang berbeda.

Tabel berikut merangkum kompatibilitas antara jenis traffic load balancer, antarmuka jaringan VM backend, dan jenis stack subnet VPC. Pastikan Anda memahami persyaratan kompatibilitas antarmuka jaringan VM backend dengan subnet VPC yang diuraikan dalam panduan arsitektur Network Load Balancer passthrough eksternal global.

Jenis traffic load balancer Jenis stack antarmuka jaringan VM backend Jenis stack subnet VPC
Hanya traffic IPv4 IPV4_ONLY IPV4_ONLY atau IPV4_IPV6
IPV4_IPV6 IPV4_IPV6
Hanya traffic IPv6 IPV6_ONLY IPV6_ONLY atau IPV4_IPV6
IPV4_IPV6 IPV4_IPV6
Traffic IPv4 dan IPv6 IPV4_IPV6 IPV4_IPV6

Backend yang digunakan dalam contoh ini berada di region dan subnet berikut. Meskipun Anda dapat memilih rentang alamat IPv4 yang dikonfigurasi di subnet, Google Cloud secara otomatis menetapkan rentang alamat IPv6 /64 ke seluruh subnet.

  • Region: us-west1

    • Subnet: lb-subnet-us, dengan rentang alamat IPv4 utama 10.1.2.0/24.
  • Region: europe-west2

    • Subnet: lb-subnet-eu, dengan rentang alamat IPv4 utama 10.1.3.0/24.

gcloud

  1. Buat jaringan VPC. Dalam contoh ini, jaringan VPC diberi nama lb-network.

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. Dalam jaringan VPC (lb-network), buat subnet di dua region.

    Buat subnet bernama lb-subnet-us untuk backend di region us-west1.

    Untuk membuat subnet khusus IPv4, gunakan perintah berikut:

    gcloud compute networks subnets create lb-subnet-us \
        --stack-type=IPV4_ONLY \
        --network=lb-network \
        --range=10.1.2.0/24 \
        --region=us-west1
    

    Untuk membuat subnet stack ganda, gunakan perintah berikut:

    gcloud compute networks subnets create lb-subnet-us \
        --stack-type=IPV4_IPV6 \
        --ipv6-access-type=EXTERNAL \
        --network=lb-network \
        --range=10.1.2.0/24 \
        --region=us-west1
    

    Untuk membuat subnet khusus IPv6, gunakan perintah berikut:

    gcloud compute networks subnets create lb-subnet-us \
        --stack-type=IPV6_ONLY \
        --ipv6-access-type=EXTERNAL \
        --network=lb-network \
        --region=us-west1
    

    Buat subnet bernama lb-subnet-eu untuk backend di region europe-west2.

    Untuk membuat subnet khusus IPv4, gunakan perintah berikut:

    gcloud compute networks subnets create lb-subnet-eu \
        --stack-type=IPV4_ONLY \
        --network=lb-network \
        --range=10.1.3.0/24 \
        --region=europe-west2
    

    Untuk membuat subnet stack ganda, gunakan perintah berikut:

    gcloud compute networks subnets create lb-subnet-eu \
        --stack-type=IPV4_IPV6 \
        --ipv6-access-type=EXTERNAL \
        --network=lb-network \
        --range=10.1.3.0/24 \
        --region=europe-west2
    

    Untuk membuat subnet khusus IPv6, gunakan perintah berikut:

    gcloud compute networks subnets create lb-subnet-eu \
        --stack-type=IPV6_ONLY \
        --ipv6-access-type=EXTERNAL \
        --network=lb-network \
        --range=10.1.3.0/24 \
        --region=europe-west2
    

Mencadangkan alamat IP eksternal global

Cadangkan dua alamat IP eksternal global, satu dari setiap grup ketersediaan. Seperti yang ditunjukkan dalam Ringkasan penyiapan, dua Load Balancer Jaringan passthrough eksternal global berbagi pasangan alamat IP yang sama.

Untuk Load Balancer Jaringan passthrough eksternal global, alamat IP aturan penerusan sepenuhnya terpisah dari subnet VPC. Alamat IP tersebut termasuk dalam kumpulan alamat IP eksternal global milik Google atau awalan yang didelegasikan publik IPv4 eksternal global BYOIP dari grup ketersediaan yang berbeda dan tidak terkait dengan subnet VPC mana pun.

Saat Anda mengonfigurasi aturan penerusan IPv6, alamat IP aturan penerusan dialokasikan sebagai awalan /96.

gcloud

Untuk traffic IPv4:

  1. Cadangkan alamat IP eksternal global pertama bernama lb-ipv4-ag0 dalam grup ketersediaan 0.

    gcloud beta compute addresses create lb-ipv4-ag0 \
        --global \
        --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP0 \
        --ip-version=IPV4
    
  2. Cadangkan alamat IP eksternal global kedua lb-ipv4-ag1 dalam grup ketersediaan 1.

    gcloud beta compute addresses create lb-ipv4-ag1 \
        --global \
        --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP1 \
        --ip-version=IPV4
    

Untuk traffic IPv6:

  1. Cadangkan alamat IP eksternal global pertama bernama lb-ipv6-ag0 dalam grup ketersediaan 0.

    gcloud beta compute addresses create lb-ipv6-ag0 \
        --global \
        --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP0 \
        --ip-version=IPV6
    
  2. Cadangkan alamat IP eksternal global kedua lb-ipv6-ag1 dalam grup ketersediaan 1.

    gcloud beta compute addresses create lb-ipv6-ag1 \
        --global \
        --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP1 \
        --ip-version=IPV6
    

Mengonfigurasi load balancer untuk traffic TCP di port 80

Ikuti langkah-langkah di bagian ini untuk mengonfigurasi Load Balancer Jaringan passthrough eksternal global yang menangkap traffic TCP di port 80.

Buat aturan firewall untuk hanya mengizinkan traffic TCP:80

Untuk mengonfigurasi lingkungan produksi Anda secara aman, Anda harus membuat dua aturan firewall terpisah:

  • Aturan firewall health check, yang dikonfigurasi untuk mengizinkan traffic masuk dari:

  • Aturan firewall traffic pengguna, yang dikonfigurasi untuk mengizinkan traffic masuk dari:

    • rentang IP sumber klien tertentu yang perlu mengakses load balancer Anda, dan
    • protokol IP dan port yang dikonfigurasi dalam aturan penerusan Anda

Perhatikan hal berikut:

  • Jika aplikasi Anda melayani semua pengguna internet tanpa batasan apa pun, konfigurasi rentang IP sumber 0.0.0.0/0 untuk traffic IPv4 dan ::/0 untuk traffic IPv6.

  • Jika Anda mengonfigurasi health check untuk menyelidiki protokol dan port IP load balancing, Anda dapat mengonfigurasi satu aturan firewall dengan menggabungkan aturan firewall health check dan traffic pengguna.

gcloud

Buat aturan firewall yang mengizinkan traffic TCP dari semua rentang sumber untuk menjangkau instance VM backend Anda di port 80. Port dan protokol ini digunakan untuk load balancing dan health check.

  • Untuk mengizinkan semua traffic IPv4, jalankan perintah berikut:

      gcloud compute firewall-rules create allow-traffic-tcp-80-ipv4 \
          --network=lb-network \
          --target-tags=allow-traffic-tcp-80 \
          --allow=tcp:80 \
          --source-ranges=0.0.0.0/0
    
  • Untuk mengizinkan semua traffic IPv6, jalankan perintah berikut:

      gcloud compute firewall-rules create allow-traffic-tcp-80-ipv6 \
          --network=lb-network \
          --target-tags=allow-traffic-tcp-80 \
          --allow=tcp:80 \
          --source-ranges=::/0
    

Membuat instance VM backend

Untuk contoh load balancing ini, buat grup instance terkelola di zona us-west1-a dan europe-west2-a. Grup instance terkelola terdiri dari instance VM yang menghosting server backend load balancer. Untuk tujuan demonstrasi, backend menjalankan server Apache di port 80. Sebagai respons terhadap permintaan klien, backend menyediakan nama host-nya sendiri.

Grup instance mereferensikan template instance, yang digunakan untuk membuat VM backend.

Tabel berikut merangkum kompatibilitas antara jenis traffic load balancer, antarmuka jaringan VM backend, dan jenis stack subnet VPC. Pastikan Anda memahami persyaratan kompatibilitas antarmuka jaringan VM backend dengan subnet VPC yang diuraikan dalam panduan arsitektur Network Load Balancer passthrough eksternal global.

Jenis traffic load balancer Jenis stack antarmuka jaringan VM backend Jenis stack subnet VPC
Hanya traffic IPv4 IPV4_ONLY IPV4_ONLY atau IPV4_IPV6
IPV4_IPV6 IPV4_IPV6
Hanya traffic IPv6 IPV6_ONLY IPV6_ONLY atau IPV4_IPV6
IPV4_IPV6 IPV4_IPV6
Traffic IPv4 dan IPv6 IPV4_IPV6 IPV4_IPV6

Membuat template instance

Dalam contoh ini, Anda membuat template instance regional di region us-west1 dan europe-west2.

gcloud

  1. Buat template instance di region us-west1.

    Untuk membuat VM backend dengan antarmuka jaringan khusus IPv4, gunakan perintah berikut.

    gcloud compute instance-templates create ig-template-us-tcp-80 \
        --region=us-west1 \
        --network=lb-network \
        --subnet=lb-subnet-us \
        --stack-type=IPV4_ONLY \
        --tags=allow-traffic-tcp-80 \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --metadata=startup-script='#! /bin/bash
        apt-get update
        apt-get install apache2 -y
        a2ensite default-ssl
        a2enmod ssl
        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
        systemctl restart apache2'
    

    Untuk membuat VM backend dengan antarmuka jaringan stack ganda, gunakan perintah berikut.

    gcloud compute instance-templates create ig-template-us-tcp-80 \
        --region=us-west1 \
        --network=lb-network \
        --subnet=lb-subnet-us \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPV4_IPV6 \
        --tags=allow-traffic-tcp-80 \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --metadata=startup-script='#! /bin/bash
        apt-get update
        apt-get install apache2 -y
        a2ensite default-ssl
        a2enmod ssl
        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
        systemctl restart apache2'
    

    Untuk membuat VM backend dengan antarmuka jaringan khusus IPv6, gunakan perintah berikut.

    gcloud compute instance-templates create ig-template-us-tcp-80 \
        --region=us-west1 \
        --network=lb-network \
        --subnet=lb-subnet-us \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPV6_ONLY \
        --tags=allow-traffic-tcp-80 \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --metadata=startup-script='#! /bin/bash
        apt-get update
        apt-get install apache2 -y
        a2ensite default-ssl
        a2enmod ssl
        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
        systemctl restart apache2'
    
  2. Buat template instance di region europe-west2.

    Untuk membuat VM backend dengan antarmuka jaringan khusus IPv4, gunakan perintah berikut.

    gcloud compute instance-templates create ig-template-eu-tcp-80 \
        --region=europe-west2 \
        --network=lb-network \
        --subnet=lb-subnet-eu \
        --stack-type=IPV4_ONLY \
        --tags=allow-traffic-tcp-80 \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --metadata=startup-script='#! /bin/bash
        apt-get update
        apt-get install apache2 -y
        a2ensite default-ssl
        a2enmod ssl
        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
        systemctl restart apache2'
    

    Untuk membuat VM backend dengan antarmuka jaringan stack ganda, gunakan perintah berikut.

    gcloud compute instance-templates create ig-template-eu-tcp-80 \
        --region=europe-west2 \
        --network=lb-network \
        --subnet=lb-subnet-eu \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPV4_IPV6 \
        --tags=allow-traffic-tcp-80 \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --metadata=startup-script='#! /bin/bash
        apt-get update
        apt-get install apache2 -y
        a2ensite default-ssl
        a2enmod ssl
        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
        systemctl restart apache2'
    

    Untuk membuat VM backend dengan antarmuka jaringan khusus IPv6, gunakan perintah berikut.

    gcloud compute instance-templates create ig-template-eu-tcp-80 \
        --region=europe-west2 \
        --network=lb-network \
        --subnet=lb-subnet-eu \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPV6_ONLY \
        --tags=allow-traffic-tcp-80 \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --metadata=startup-script='#! /bin/bash
        apt-get update
        apt-get install apache2 -y
        a2ensite default-ssl
        a2enmod ssl
        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
        systemctl restart apache2'
    

Membuat grup instance terkelola menurut zona

Dalam contoh ini, Anda akan membuat dua grup instance terkelola zonal—satu di zona us-west1-a dan yang lainnya di zona europe-west2-a.

gcloud

  1. Buat grup instance terkelola di zona us-west1-a.

    gcloud compute instance-groups managed create ig-us-tcp-80 \
      --template=ig-template-us-tcp-80 \
      --size=2 \
      --zone=us-west1-a
    
  2. Buat grup instance terkelola di zona europe-west2-a.

    gcloud compute instance-groups managed create ig-eu-tcp-80 \
      --template=ig-template-eu-tcp-80 \
      --size=2 \
      --zone=europe-west2-a
    

Membuat komponen Cloud Load Balancing

Untuk membuat komponen Cloud Load Balancing dari Load Balancer Jaringan passthrough eksternal global, lakukan hal berikut.

gcloud

  1. Buat health check TCP yang dikonfigurasi untuk menghasilkan pemeriksaan TCP:80.

    gcloud compute health-checks create tcp hc-tcp-80 \
      --global \
      --port=80
    
  2. Buat layanan backend global dengan skema load balancing EXTERNAL_PASSTHROUGH.

    gcloud beta compute backend-services create lb-backend-service-tcp-80 \
      --load-balancing-scheme=EXTERNAL_PASSTHROUGH \
      --health-checks=hc-tcp-80 \
      --global
    
  3. Tambahkan grup instance sebagai backend ke layanan backend.

    Tambahkan grup instance di zona us-west1-a ke layanan backend.

    gcloud beta compute backend-services add-backend lb-backend-service-tcp-80 \
        --instance-group=ig-us-tcp-80 \
        --instance-group-zone=us-west1-a \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.7 \
        --global
    

    Tambahkan grup instance di zona europe-west2-a ke layanan backend.

    gcloud beta compute backend-services add-backend lb-backend-service-tcp-80 \
        --instance-group=ig-eu-tcp-80 \
        --instance-group-zone=europe-west2-a \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.7 \
        --global
    
  4. Buat aturan penerusan global untuk menayangkan traffic TCP:80.

    Pastikan versi IP aturan penerusan Anda cocok dengan jenis stack antarmuka jaringan VM backend Anda.

    Aturan penerusan mereferensikan alamat IP dari setiap grup ketersediaan.

    Untuk traffic IPv4:

    gcloud beta compute forwarding-rules create lb-forwarding-rule-tcp-80-ipv4 \
      --load-balancing-scheme=EXTERNAL_PASSTHROUGH \
      --ip-protocol=TCP \
      --ports=80 \
      --backend-service=lb-backend-service-tcp-80 \
      --global \
      --ip-addresses=lb-ipv4-ag0,lb-ipv4-ag1
    

    Untuk traffic IPv6:

    gcloud beta compute forwarding-rules create lb-forwarding-rule-tcp-80-ipv6 \
      --load-balancing-scheme=EXTERNAL_PASSTHROUGH \
      --ip-protocol=TCP \
      --ports=80 \
      --backend-service=lb-backend-service-tcp-80 \
      --global \
      --ip-addresses=lb-ipv6-ag0,lb-ipv6-ag1
    

Mengonfigurasi load balancer untuk traffic TCP:8080 dan UDP

Ikuti langkah-langkah di bagian ini untuk mengonfigurasi Load Balancer Jaringan passthrough eksternal global untuk melayani traffic TCP:8080 dan UDP.

Buat aturan firewall yang hanya mengizinkan traffic TCP:8080 dan UDP

Untuk mengonfigurasi lingkungan produksi Anda secara aman, Anda harus membuat dua aturan firewall terpisah:

  • Aturan firewall health check, yang dikonfigurasi untuk mengizinkan traffic masuk dari:

  • Aturan firewall traffic pengguna, yang dikonfigurasi untuk mengizinkan traffic masuk dari:

    • rentang IP sumber klien tertentu yang perlu mengakses load balancer Anda, dan
    • protokol IP dan port yang dikonfigurasi dalam aturan penerusan Anda

Perhatikan hal berikut:

  • Jika aplikasi Anda melayani semua pengguna internet tanpa batasan apa pun, konfigurasi rentang IP sumber 0.0.0.0/0 untuk traffic IPv4 dan ::/0 untuk traffic IPv6.

  • Jika Anda mengonfigurasi health check untuk menyelidiki protokol dan port IP load balancing, Anda dapat mengonfigurasi satu aturan firewall dengan menggabungkan aturan firewall health check dan traffic pengguna.

gcloud

Buat aturan firewall yang mengizinkan traffic TCP:8080 dan UDP dari semua rentang sumber untuk mencapai instance VM backend Anda. Protokol ini digunakan untuk load balancing, sementara port TCP 8080 juga digunakan untuk health check.

  1. Untuk mengizinkan traffic IPv4 menjangkau backend di grup instance ig-us-l3-default dan ig-eu-l3-default, buat aturan firewall berikut.

    gcloud compute firewall-rules create allow-traffic-l3-default-ipv4 \
        --network=lb-network \
        --target-tags=allow-traffic-l3-default \
        --allow=tcp:8080,udp \
        --source-ranges=0.0.0.0/0
    
  2. Untuk mengizinkan traffic IPv6 menjangkau backend di grup instance ig-us-l3-default dan ig-eu-l3-default, buat aturan firewall berikut.

    gcloud compute firewall-rules create allow-traffic-l3-default-ipv6 \
        --network=lb-network \
        --target-tags=allow-traffic-l3-default \
        --allow=tcp:8080,udp \
        --source-ranges=::/0
    

Membuat instance VM backend

Untuk contoh load balancing ini, buat grup instance terkelola di zona us-west1-a dan europe-west2-a. Grup instance terkelola terdiri dari instance VM yang menghosting server backend load balancer. Untuk tujuan demonstrasi, backend akan menyajikan nama host-nya sendiri. Skrip startup juga mengonfigurasi server Apache untuk memproses port 8080, bukan port 80.

Grup instance mereferensikan template instance, yang digunakan untuk membuat VM backend.

Tabel berikut merangkum kompatibilitas antara jenis traffic load balancer, antarmuka jaringan VM backend, dan jenis stack subnet VPC. Pastikan Anda memahami persyaratan kompatibilitas antarmuka jaringan VM backend dengan subnet VPC yang diuraikan dalam panduan arsitektur Network Load Balancer passthrough eksternal global.

Jenis traffic load balancer Jenis stack antarmuka jaringan VM backend Jenis stack subnet VPC
Hanya traffic IPv4 IPV4_ONLY IPV4_ONLY atau IPV4_IPV6
IPV4_IPV6 IPV4_IPV6
Hanya traffic IPv6 IPV6_ONLY IPV6_ONLY atau IPV4_IPV6
IPV4_IPV6 IPV4_IPV6
Traffic IPv4 dan IPv6 IPV4_IPV6 IPV4_IPV6

Membuat template instance

Dalam contoh ini, Anda membuat template instance regional di region us-west1 dan europe-west2.

gcloud

  1. Buat template instance di region us-west1.

    Untuk membuat VM backend dengan antarmuka jaringan khusus IPv4, gunakan perintah berikut.

    gcloud compute instance-templates create ig-template-us-l3-default \
        --region=us-west1 \
        --network=lb-network \
        --subnet=lb-subnet-us \
        --stack-type=IPV4_ONLY \
        --tags=allow-traffic-l3-default \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --metadata=startup-script='#! /bin/bash
        apt-get update
        apt-get install apache2 -y
        a2ensite default-ssl
        a2enmod ssl
        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
        sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf
        systemctl restart apache2'
    

    Untuk membuat VM backend dengan antarmuka jaringan stack ganda, gunakan perintah berikut.

    gcloud compute instance-templates create ig-template-us-l3-default \
        --region=us-west1 \
        --network=lb-network \
        --subnet=lb-subnet-us \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPV4_IPV6 \
        --tags=allow-traffic-l3-default \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --metadata=startup-script='#! /bin/bash
        apt-get update
        apt-get install apache2 -y
        a2ensite default-ssl
        a2enmod ssl
        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
        sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf
        systemctl restart apache2'
    

    Untuk membuat VM backend dengan antarmuka jaringan khusus IPv6, gunakan perintah berikut.

    gcloud compute instance-templates create ig-template-us-l3-default \
        --region=us-west1 \
        --network=lb-network \
        --subnet=lb-subnet-us \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPV6_ONLY \
        --tags=allow-traffic-l3-default \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --metadata=startup-script='#! /bin/bash
        apt-get update
        apt-get install apache2 -y
        a2ensite default-ssl
        a2enmod ssl
        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
        sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf
        systemctl restart apache2'
    
  2. Buat template instance di region europe-west2.

    Untuk membuat VM backend dengan antarmuka jaringan khusus IPv4, gunakan perintah berikut.

    gcloud compute instance-templates create ig-template-eu-l3-default \
        --region=europe-west2 \
        --network=lb-network \
        --subnet=lb-subnet-eu \
        --stack-type=IPV4_ONLY \
        --tags=allow-traffic-l3-default \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --metadata=startup-script='#! /bin/bash
        apt-get update
        apt-get install apache2 -y
        a2ensite default-ssl
        a2enmod ssl
        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
        sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf
        systemctl restart apache2'
    

    Untuk membuat VM backend dengan antarmuka jaringan stack ganda, gunakan perintah berikut.

    gcloud compute instance-templates create ig-template-eu-l3-default \
        --region=europe-west2 \
        --network=lb-network \
        --subnet=lb-subnet-eu \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPV4_IPV6 \
        --tags=allow-traffic-l3-default \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --metadata=startup-script='#! /bin/bash
        apt-get update
        apt-get install apache2 -y
        a2ensite default-ssl
        a2enmod ssl
        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
        sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf
        systemctl restart apache2'
    

    Untuk membuat VM backend dengan antarmuka jaringan khusus IPv6, gunakan perintah berikut.

    gcloud compute instance-templates create ig-template-eu-l3-default \
        --region=europe-west2 \
        --network=lb-network \
        --subnet=lb-subnet-eu \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPV6_ONLY \
        --tags=allow-traffic-l3-default \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --metadata=startup-script='#! /bin/bash
        apt-get update
        apt-get install apache2 -y
        a2ensite default-ssl
        a2enmod ssl
        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
        sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf
        systemctl restart apache2'
    

Membuat grup instance terkelola menurut zona

Dalam contoh ini, Anda akan membuat dua grup instance terkelola zonal—satu di zona us-west1-a dan yang lainnya di zona europe-west2-a.

gcloud

  1. Buat grup instance terkelola di zona us-west1-a.

    gcloud compute instance-groups managed create ig-us-l3-default \
      --template=ig-template-us-l3-default \
      --size=2 \
      --zone=us-west1-a
    
  2. Buat grup instance terkelola di zona europe-west2-a.

    gcloud compute instance-groups managed create ig-eu-l3-default \
      --template=ig-template-eu-l3-default \
      --size=2 \
      --zone=europe-west2-a
    

Membuat komponen Cloud Load Balancing

Untuk membuat komponen Cloud Load Balancing dari Load Balancer Jaringan passthrough eksternal global, lakukan hal berikut.

gcloud

  1. Buat health check TCP yang dikonfigurasi untuk menghasilkan pemeriksaan TCP:8080.

    gcloud compute health-checks create tcp hc-tcp-8080 \
      --global \
      --port=8080
    
  2. Buat layanan backend global dengan skema load balancing EXTERNAL_PASSTHROUGH.

    gcloud beta compute backend-services create lb-backend-service-l3-default \
      --load-balancing-scheme=EXTERNAL_PASSTHROUGH \
      --health-checks=hc-tcp-8080 \
      --global
    
  3. Tambahkan grup instance sebagai backend ke layanan backend.

    Tambahkan grup instance di zona us-west1-a ke layanan backend.

    gcloud beta compute backend-services add-backend lb-backend-service-l3-default \
        --instance-group=ig-us-l3-default \
        --instance-group-zone=us-west1-a \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.7 \
        --global
    

    Tambahkan grup instance di zona europe-west2-a ke layanan backend.

    gcloud beta compute backend-services add-backend lb-backend-service-l3-default \
        --instance-group=ig-eu-l3-default \
        --instance-group-zone=europe-west2-a \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.7 \
        --global
    
  4. Buat aturan penerusan global dengan kolom ip-protocol yang ditetapkan ke L3_DEFAULT untuk menangani semua traffic protokol IP (traffic TCP selain port 80, UDP, ESP, dan ICMP). Anda harus membuat dua aturan penerusan untuk menangani traffic IPv4 dan IPv6.

    Pastikan versi IP aturan penerusan Anda cocok dengan jenis stack antarmuka jaringan VM backend Anda.

    Aturan penerusan mereferensikan alamat IP dari setiap grup ketersediaan.

    Untuk traffic IPv4:

    gcloud beta compute forwarding-rules create lb-forwarding-rule-l3-default-ipv4 \
      --load-balancing-scheme=EXTERNAL_PASSTHROUGH \
      --ip-protocol=L3_DEFAULT \
      --ports=all \
      --backend-service=lb-backend-service-l3-default \
      --global \
      --ip-addresses=lb-ipv4-ag0,lb-ipv4-ag1
    

    Untuk traffic IPv6:

    gcloud beta compute forwarding-rules create lb-forwarding-rule-l3-default-ipv6 \
      --load-balancing-scheme=EXTERNAL_PASSTHROUGH \
      --ip-protocol=L3_DEFAULT \
      --ports=all \
      --backend-service=lb-backend-service-l3-default \
      --global \
      --ip-addresses=lb-ipv6-ag0,lb-ipv6-ag1
    

Menguji load balancer

Setelah layanan load balancing dikonfigurasi, Anda dapat mulai mengirimkan traffic ke alamat IP eksternal load balancer dan melihat traffic didistribusikan ke instance backend.

Dapatkan alamat IP eksternal load balancer

  1. Dapatkan alamat IP yang dicadangkan yang dilampirkan ke aturan penerusan. Aturan penerusan untuk kedua load balancer menggunakan pasangan alamat IP yang sama, sehingga Anda dapat menggunakan lb-forwarding-rule-tcp-80-ipv4 atau lb-forwarding-rule-l3-default-ipv4 untuk melihat alamat IP eksternal.

      gcloud compute forwarding-rules describe lb-forwarding-rule-tcp-80-ipv4 \
          --global
    

    Tindakan ini akan menampilkan dua alamat IP, satu untuk setiap grup ketersediaan. Alamat IP ini disebut sebagai IP_ADDRESS_AVAILABILITY_GROUP_0 dan IP_ADDRESS_AVAILABILITY_GROUP_1 dalam langkah-langkah berikut.

Mengirim traffic ke load balancer

Prosedur ini mengirimkan traffic eksternal ke load balancer. Jalankan pengujian berikut untuk memeriksa apakah traffic TCP di port 80 di-load balance oleh grup instance ig-us-tcp-80 atau ig-eu-tcp-80, sementara semua traffic lainnya (TCP:8080 dan UDP) di-load balance oleh grup instance ig-us-l3-default atau ig-eu-l3-default.

Memverifikasi perilaku dengan permintaan TCP di port 80

  1. Buat permintaan web (melalui TCP di port 80) ke load balancer menggunakan curl untuk menghubungi alamat IP-nya.

    • Dari klien dengan konektivitas IPv4, jalankan perintah berikut:

      while true; do curl -m1 IP_ADDRESS_AVAILABILITY_GROUP_0; done
      

    Perhatikan teks yang ditampilkan oleh perintah curl. Teks menampilkan nama VM backend yang menghasilkan respons, misalnya, Page served from: VM_NAME. Respons hanya berasal dari instance dalam grup instance ig-us-tcp-80 atau ig-eu-tcp-80.

    Hal ini menunjukkan bahwa traffic TCP yang dikirim ke alamat IP load balancer di port 80 ditangani oleh aturan penerusan TCP.

Memverifikasi perilaku dengan permintaan TCP di port 8080

Buat permintaan web (melalui TCP di port 8080) ke load balancer menggunakan curl untuk menghubungi alamat IP-nya.

  • Dari klien dengan konektivitas IPv4, jalankan perintah berikut:

    while true; do curl -m1 IP_ADDRESS_AVAILABILITY_GROUP_0:8080; done
    

    Perhatikan teks yang ditampilkan oleh perintah curl. Respons hanya berasal dari instance dalam grup instance ig-us-l3-default atau ig-eu-l3-default.

    Hal ini menunjukkan bahwa traffic TCP yang dikirim ke alamat IP load balancer di port 8080 ditangani oleh aturan penerusan L3_DEFAULT.

Periksa tabel pemilihan rute lokal untuk alamat IP load balancer

Tabel perutean lokal VM backend berisi alamat IP Load Balancer Jaringan passthrough eksternal global.

Untuk memeriksa rute lokal di VM backend, hubungkan ke VM backend menggunakan SSH dan jalankan perintah berikut:

  ip route list table local

Outputnya adalah sebagai berikut:

local 10.1.2.5 dev ens4 proto kernel scope host src 10.1.2.5
local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1
local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1
broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1
local 136.124.69.214 dev ens4 proto 66 scope host
local 136.124.83.205 dev ens4 proto 66 scope host

Dalam contoh sebelumnya, 136.124.69.214 dan 136.124.83.205 adalah alamat IP yang ditetapkan ke aturan penerusan load balancer. Entri baris local 136.124.69.214 dev ens4 proto 66 scope host dan local 136.124.83.205 dev ens4 proto 66 scope host di tabel perutean lokal VM memungkinkan paket yang ditujukan ke alamat IP load balancer diterima oleh backend. Google Cloud Lingkungan tamu bertanggung jawab untuk menambahkan entri ini.

Entri tabel perutean lokal di VM backend menerima paket untuk pengiriman host lokal, tempat stack jaringan mengirimkannya ke aplikasi yang memproses. Paket respons dari aplikasi kemudian dikirim langsung ke klien.

Perhatikan bahwa alamat IP load balancer sebenarnya tidak dikonfigurasi pada antarmuka jaringan VM. Untuk memverifikasi hal ini, jalankan perintah berikut:

  ip addr list

Outputnya adalah sebagai berikut. Alamat IP (136.124.69.214 dan 136.124.83.205) muncul di tabel perutean lokal, tetapi tidak dikonfigurasi di antarmuka jaringan.

1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute
       valid_lft forever preferred_lft forever
2: ens4:  mtu 1460 qdisc fq_codel state UP group default qlen 1000
    link/ether 42:01:0a:01:02:0d brd ff:ff:ff:ff:ff:ff
    altname enp0s4
    inet 10.1.2.13/32 metric 100 scope global dynamic ens4
       valid_lft 84283sec preferred_lft 84283sec
    inet6 fe80::4001:aff:fe01:20d/64 scope link
       valid_lft forever preferred_lft forever

Langkah berikutnya