Menyiapkan Load Balancer Jaringan passthrough internal dengan NEG zona

Panduan ini menunjukkan cara men-deploy Load Balancer Jaringan passthrough internal dengan backend grup endpoint jaringan zona (NEG). NEG Zona adalah resource zona yang mewakili kumpulan alamat IP atau kombinasi alamat IP/port untuk resource Google Cloud dalam satu subnet. NEG memungkinkan Anda membuat pengelompokan alamat IP atau kombinasi alamat IP/port yang logis yang mewakili layanan software, bukan seluruh VM.

Sebelum mengikuti panduan ini, biasakan diri Anda dengan hal-hal berikut:

Load Balancer Jaringan passthrough internal hanya mendukung NEG zona dengan endpoint GCE_VM_IP.

Izin

Untuk mengikuti panduan ini, Anda perlu membuat instance dan mengubah jaringan dalam sebuah project. Anda harus menjadi pemilik atau editor project, atau harus memiliki semua peran IAM Compute Engine berikut:

Tugas Peran yang Diperlukan
Membuat jaringan, subnet, dan komponen load balancer Admin Jaringan
Menambahkan dan menghapus aturan firewall Security Admin
Membuat instance Compute Instance Admin

Untuk informasi selengkapnya, lihat panduan berikut:

Ringkasan penyiapan

Panduan ini menunjukkan cara mengonfigurasi dan menguji Load Balancer Jaringan passthrough internal dengan backend NEG zona GCE_VM_IP. Langkah-langkah di bagian ini menjelaskan cara mengonfigurasi hal-hal berikut:

  1. Contoh jaringan VPC yang disebut lb-network dengan subnet kustom
  2. Aturan firewall yang mengizinkan koneksi masuk ke VM backend
  3. Empat VM:
    • VM vm-a1 dan vm-a2 dalam zona us-west1-a
    • VM vm-c1 dan vm-c2 dalam zona us-west1-c
  4. Dua NEG zona backend, neg-a di zona us-west1-a, dan neg-c di zona us-west1-c. Setiap NEG akan memiliki endpoint berikut:
    • neg-a berisi dua endpoint ini:
      • Alamat IP internal VM vm-a1
      • Alamat IP internal VM vm-a2
    • neg-c berisi dua endpoint ini:
      • Alamat IP internal VM vm-c1
      • Alamat IP internal VM vm-c2
  5. Satu VM klien (vm-client) di us-west1-a untuk menguji koneksi
  6. Komponen Load Balancer Jaringan passthrough internal berikut:
    • Layanan backend internal di region us-west1 untuk mengelola distribusi koneksi ke dua NEG zona
    • Aturan penerusan internal dan alamat IP internal untuk frontend load balancer

Arsitektur untuk contoh ini terlihat seperti ini:

Konfigurasi Load Balancer Jaringan passthrough internal dengan NEG zona
Konfigurasi Load Balancer Jaringan passthrough internal dengan NEG zona

Mengonfigurasi jaringan, region, dan subnet

Contoh Load Balancer Jaringan passthrough internal yang dijelaskan di halaman ini dibuat dalam jaringan VPC mode kustom bernama lb-network.

VM backend, NEG zona, dan komponen load balancer contoh berikut terletak di region dan subnet ini:

  • Region: us-west1
  • Subnet: lb-subnet, dengan rentang alamat IP utama 10.1.2.0/24

Untuk membuat contoh jaringan dan subnet, ikuti langkah-langkah berikut.

Konsol

  1. Buka halaman jaringan VPC di Konsol Google Cloud.
    Buka halaman VPC network
  2. Klik Create VPC network.
  3. Masukkan Nama lb-network.
  4. Di bagian Subnet:
    • Setel Subnet creation mode ke Custom.
    • Di bagian Subnet baru, masukkan informasi berikut:
      • Name: lb-subnet
      • Region: us-west1
      • Rentang alamat IP: 10.1.2.0/24
      • Klik Done.
  5. Klik Create.

gcloud

  1. Buat jaringan VPC kustom:

    gcloud compute networks create lb-network --subnet-mode=custom
    
    1. Dalam jaringan lb-network, buat subnet untuk VM backend di region us-west1:
    gcloud compute networks subnets create lb-subnet \
        --network=lb-network \
        --range=10.1.2.0/24 \
        --region=us-west1
    

Mengonfigurasi aturan firewall

Contoh ini menggunakan aturan firewall berikut:

  • fw-allow-lb-access: Aturan masuk, berlaku untuk semua target dalam jaringan VPC, yang memungkinkan traffic dari sumber dalam rentang 10.1.2.0/24. Aturan ini mengizinkan traffic masuk dari klien mana pun yang berada di lb-subnet.

  • fw-allow-ssh: Aturan ingress, yang berlaku untuk instance yang di-load balanced, yang memungkinkan konektivitas SSH yang masuk pada TCP port 22 dari alamat mana pun. Anda dapat memilih rentang IP sumber yang lebih ketat untuk aturan ini. Misalnya, Anda dapat menentukan hanya rentang IP sistem tempat Anda akan memulai sesi SSH. Contoh ini menggunakan tag target allow-ssh untuk mengidentifikasi VM yang harus diberi tag tersebut.

Tanpa aturan firewall ini, aturan tolak ingress default akan memblokir traffic masuk ke instance backend.

Konsol

  1. Pada konsol Google Cloud, buka halaman Kebijakan Firewall.
    Buka kebijakan Firewall
  2. Klik Create firewall rule dan masukkan informasi berikut untuk membuat aturan guna mengizinkan traffic subnet:
    • Name: fw-allow-lb-access
    • Jaringan: lb-network
    • Prioritas: 1000
    • Arah traffic: masuk
    • Tindakan terhadap kecocokan: izinkan
    • Target: Semua instance dalam jaringan
    • Filter sumber: Rentang IPv4
    • Rentang IPv4 sumber: 10.1.2.0/24
    • Protokol dan port: Izinkan semua
  3. Klik Create.
  4. Klik Create firewall rule lagi untuk membuat aturan guna mengizinkan koneksi SSH masuk:
    • Name: fw-allow-ssh
    • Jaringan: lb-network
    • Prioritas: 1000
    • Arah traffic: masuk
    • Tindakan terhadap kecocokan: izinkan
    • Targets: Tag target yang ditentukan
    • Tag target: allow-ssh
    • Filter sumber: Rentang IPv4
    • Rentang IPv4 sumber: 0.0.0.0/0
    • Protocols and ports: Pilih Specified protocols and ports, lalu ketik: tcp:22
  5. Klik Create.
  6. Klik Create firewall rule untuk ketiga kalinya guna membuat aturan guna mengizinkan health check Google Cloud:
    • Name: fw-allow-health-check
    • Jaringan: lb-network
    • Prioritas: 1000
    • Arah traffic: masuk
    • Tindakan terhadap kecocokan: izinkan
    • Targets: Tag target yang ditentukan
    • Tag target: allow-health-check
    • Filter sumber: Rentang IPv4
    • Rentang IPv4 sumber: 130.211.0.0/22 dan 35.191.0.0/16
    • Protokol dan port: Izinkan semua
  7. Klik Create.

gcloud

  1. Buat aturan firewall fw-allow-lb-access untuk mengizinkan komunikasi dari dengan subnet:

    gcloud compute firewall-rules create fw-allow-lb-access \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --source-ranges=10.1.2.0/24 \
        --rules=tcp,udp,icmp
    
  2. Buat aturan firewall fw-allow-ssh untuk mengizinkan konektivitas SSH ke VM dengan tag jaringan allow-ssh. Saat Anda menghapus source-ranges, Google Cloud akan menafsirkan aturan sebagai sumber apa pun.

    gcloud compute firewall-rules create fw-allow-ssh \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-ssh \
        --rules=tcp:22
    
  3. Buat aturan fw-allow-health-check untuk mengizinkan 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=130.211.0.0/22,35.191.0.0/16 \
        --rules=tcp,udp,icmp
    

Membuat backend NEG

Untuk menunjukkan sifat regional Load Balancer Jaringan passthrough internal, contoh ini menggunakan dua backend NEG zona, neg-a dan neg-c, di zona us-west1-a dan us- west1-c. Traffic diseimbangkan beban di kedua NEG, dan di seluruh endpoint dalam setiap NEG.

Membuat VM

Untuk mendukung contoh ini, masing-masing dari keempat VM menjalankan server web Apache yang memproses port TCP berikut: 80, 8008, 8080, 8088, 443, dan 8443.

Setiap VM diberi alamat IP internal di lb-subnet dan alamat IP eksternal (publik) efemeral. Anda dapat menghapus alamat IP eksternal nanti.

Alamat IP eksternal tidak diperlukan untuk VM backend. Namun, alamat ini berguna untuk contoh ini karena mengizinkan VM untuk mendownload Apache dari internet, dan memungkinkan Anda terhubung menggunakan SSH. Secara {i>default<i}, Apache dikonfigurasi untuk mengikat ke alamat IP apa pun. Load Balancer Jaringan passthrough internal mengirimkan paket dengan mempertahankan IP tujuan.

Pastikan software server yang berjalan di VM Anda memproses alamat IP aturan penerusan internal load balancer.

Demi kemudahan instruksi, VM backend ini menjalankan Debian GNU Linux 10.

Konsol

Membuat VM

  1. Buka halaman VM instances di konsol Google Cloud.
    Buka halaman instance VM
  2. Ulangi langkah-langkah berikut untuk membuat empat VM, menggunakan kombinasi nama dan zona berikut.
    • Nama: vm-a1, zona: us-west1-a
    • Nama: vm-a2, zona: us-west1-a
    • Nama: vm-c1, zona: us-west1-c
    • Nama: vm-c2, zona: us-west1-c
  3. Klik Create instance.
  4. Tetapkan Name seperti yang ditunjukkan pada langkah 2.
  5. Untuk Region, pilih us-west1, lalu pilih Zone seperti yang ditunjukkan pada langkah 2.
  6. Di bagian Boot disk, pastikan sistem operasi Debian dan versi 10 (buster) dipilih untuk opsi boot disk. Klik Choose untuk mengubah gambar jika perlu.
  7. Klik Advanced options dan buat perubahan berikut:

    • Klik Networking, lalu tambahkan Tag jaringan berikut: allow-ssh dan allow-health-check
    • Klik Edit di bagian Network interfaces dan lakukan perubahan berikut, lalu klik Done:
      • Jaringan: lb-network
      • Subnet: lb-subnet
      • IP internal utama: Ephemeral (otomatis)
      • IP Eksternal: Efemeral
    • Klik Management. Di kolom Startup script, salin dan tempel konten skrip berikut. Konten skrip identik untuk keempat VM:

      #! /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
      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
      
  8. Klik Create.

gcloud

Buat empat VM dengan menjalankan perintah berikut empat kali, menggunakan keempat kombinasi ini untuk [VM-NAME] dan [ZONE]. Konten skrip identik untuk keempat VM.

  • [VM-NAME] dari vm-a1 dan [ZONE] dari us-west1-a
  • [VM-NAME] dari vm-a2 dan [ZONE] dari us-west1-a
  • [VM-NAME] dari vm-c1 dan [ZONE] dari us-west1-c
  • [VM-NAME] dari vm-c2 dan [ZONE] dari us-west1-c

    gcloud compute instances create VM-NAME \
        --zone=ZONE \
        --image-family=debian-10 \
        --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'
    

Membuat NEG zona GCE_VM_IP

NEG (neg-a dan neg-c) harus dibuat di zona yang sama dengan VM yang dibuat pada langkah sebelumnya.

Konsol

Untuk membuat grup endpoint jaringan zona:

  1. Buka halaman Grup Endpoint Jaringan di Konsol Google Cloud.
    Buka halaman Grup Endpoint Jaringan
  2. Klik Create network endpoint group.
  3. Masukkan Nama untuk NEG zona: neg-a.
  4. Pilih Network endpoint group type: Network endpoint group (Zonal).
  5. Pilih Network: lb-network
  6. Pilih Subnet: lb-subnet
  7. Pilih Zone: us-west1-a
  8. Klik Create.
  9. Ulangi langkah-langkah ini untuk membuat NEG zona kedua yang disebut neg-c, di zona us-west1-c.

Tambahkan endpoint ke NEG zona:

  1. Buka halaman Grup Endpoint Jaringan di Konsol Google Cloud.
    Buka Grup endpoint jaringan
  2. Klik Nama grup endpoint jaringan pertama yang dibuat pada langkah sebelumnya (neg-a). Anda akan melihat halaman Detail grup endpoint jaringan.
  3. Di bagian Network endpoint in this group, klik Add network endpoint. Anda akan melihat halaman Add network endpoint.

    1. Klik VM instance dan pilih vm-a1 untuk menambahkan alamat IP internalnya sebagai endpoint jaringan.
    2. Klik Create.
    3. Sekali lagi, klik Add network endpoint dan di bagian VM instance, pilih vm-a2.
    4. Klik Create.
  4. Klik Nama grup endpoint jaringan kedua yang dibuat pada langkah sebelumnya (neg-c). Anda akan melihat halaman Detail grup endpoint jaringan.

  5. Di bagian Network endpoint in this group, klik Add network endpoint. Anda akan melihat halaman Add network endpoint.

    1. Klik VM instance dan pilih vm-c1 untuk menambahkan alamat IP internalnya sebagai endpoint jaringan.
    2. Klik Create.
    3. Sekali lagi, klik Add network endpoint dan di bagian VM instance, pilih vm-c2.
    4. Klik Create.

gcloud

  1. Buat NEG zona GCE_VM_IP yang disebut neg-a di us-west1-a menggunakan perintah gcloud compute network-endpoint-groups create:

    gcloud compute network-endpoint-groups create neg-a \
        --network-endpoint-type=gce-vm-ip \
        --zone=us-west1-a \
        --network=lb-network \
        --subnet=lb-subnet
    
  2. Tambahkan endpoint ke neg-a:

    gcloud compute network-endpoint-groups update neg-a \
        --zone=us-west1-a \
        --add-endpoint='instance=vm-a1' \
        --add-endpoint='instance=vm-a2'
    
  3. Buat NEG zona GCE_VM_IP yang disebut neg-c di us-west1-c menggunakan perintah gcloud compute network-endpoint-groups create:

    gcloud compute network-endpoint-groups create neg-c \
        --network-endpoint-type=gce-vm-ip \
        --zone=us-west1-c \
        --network=lb-network \
        --subnet=lb-subnet
    
  4. Tambahkan endpoint ke neg-c:

    gcloud compute network-endpoint-groups update neg-c \
        --zone=us-west1-c \
        --add-endpoint='instance=vm-c1' \
        --add-endpoint='instance=vm-c2'
    

Mengonfigurasi komponen load balancer

Langkah-langkah ini akan mengonfigurasi semua komponen Load Balancer Jaringan passthrough internal:

  • Layanan backend: Untuk contoh ini, Anda harus meneruskan traffic HTTP melalui load balancer. Oleh karena itu, Anda perlu menggunakan TCP, bukan UDP.

  • Aturan penerusan: Contoh ini membuat satu aturan penerusan internal.

  • Internal IP address: Dalam contoh ini, Anda menentukan alamat IP internal, 10.1.2.99, saat membuat aturan penerusan.

Konsol

gcloud

  1. Membuat health check HTTP regional baru.

    gcloud compute health-checks create http hc-http-80 \
        --region=us-west1 \
        --port=80
    
  2. Buat layanan backend:

    gcloud compute backend-services create bs-ilb \
        --load-balancing-scheme=internal \
        --protocol=tcp \
        --region=us-west1 \
        --health-checks=hc-http-80 \
        --health-checks-region=us-west1
    
  3. Tambahkan dua NEG zona, neg-a dan neg-c, ke layanan backend:

    gcloud compute backend-services add-backend bs-ilb \
        --region=us-west1 \
        --network-endpoint-group=neg-a \
        --network-endpoint-group-zone=us-west1-a
    
    gcloud compute backend-services add-backend bs-ilb \
        --region=us-west1 \
        --network-endpoint-group=neg-c \
        --network-endpoint-group-zone=us-west1-c
    
  4. Membuat aturan penerusan untuk layanan backend. Saat Anda membuat aturan penerusan, tentukan 10.1.2.99 untuk alamat IP internal di subnet.

    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=bs-ilb \
        --backend-service-region=us-west1
    

Menguji load balancer

Pengujian ini menghubungi load balancer dari VM klien terpisah; yaitu, bukan dari VM backend load balancer. Perilaku yang diharapkan adalah traffic akan didistribusikan di antara empat VM backend karena tidak ada afinitas sesi yang telah dikonfigurasi.

Membuat VM klien pengujian

Contoh ini akan membuat VM klien (vm-client) di region yang sama dengan VM backend (server). Klien digunakan untuk memvalidasi konfigurasi load balancer dan menunjukkan perilaku yang diharapkan seperti yang dijelaskan di bagian pengujian.

Konsol

  1. Buka halaman VM instances di konsol Google Cloud.
    Buka halaman instance VM
  2. Klik Create instance.
  3. Tetapkan Name ke vm-client.
  4. Setel Zone ke us-west1-a.
  5. Klik Advanced options, lalu buat perubahan berikut:
    • Klik Networking dan tambahkan allow-ssh ke Tag jaringan.
    • Klik tombol edit di bagian Network interfaces dan lakukan perubahan berikut, lalu klik Done:
      • Jaringan: lb-network
      • Subnet: lb-subnet
      • IP internal utama: Ephemeral (otomatis)
      • IP Eksternal: Efemeral
  6. Klik Create.

gcloud

VM klien dapat berada di zona mana pun dalam region yang sama dengan load balancer, dan dapat menggunakan subnet apa pun di region tersebut. Dalam contoh ini, klien berada di zona us-west1-a, dan menggunakan subnet yang sama dengan VM backend.

gcloud compute instances create vm-client \
    --zone=us-west1-a \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --tags=allow-ssh \
    --subnet=lb-subnet

Mengirim traffic ke load balancer

Lakukan langkah-langkah berikut untuk terhubung ke load balancer.

  1. Menghubungkan ke instance VM klien.

    gcloud compute ssh vm-client --zone=us-west1-a
    
  2. Buat permintaan web ke load balancer menggunakan curl untuk menghubungi alamat IP-nya. Ulangi permintaan tersebut sehingga Anda dapat melihat bahwa respons berasal dari VM backend yang berbeda. Nama VM yang menghasilkan respons ditampilkan dalam teks di respons HTML, berdasarkan konten /var/www/html/index.html di setiap VM backend. Respons yang diharapkan akan terlihat seperti: Page served from: vm-a1 dan Page served from: vm-a2.

    curl http://10.1.2.99
    

    Aturan penerusan dikonfigurasi untuk melayani port 80, 8008, 8080, dan 8088. Untuk mengirim traffic ke port lain tersebut, tambahkan titik dua (:) dan nomor port setelah alamat IP, seperti ini:

    curl http://10.1.2.99:8008
    

Langkah selanjutnya