Dokumen ini memberikan petunjuk untuk mengonfigurasi Load Balancer Aplikasi internal lintas region untuk layanan Anda yang berjalan di instance virtual machine (VM) Compute Engine.
Sebelum memulai
Sebelum mengikuti panduan ini, pahami hal-hal berikut:
Menyiapkan resource sertifikat SSL
Buat resource sertifikat SSL Pengelola Sertifikat seperti yang dijelaskan di berikut:
- Men-deploy sertifikat yang dikelola sendiri secara global.
- Buat sertifikat yang dikelola Google yang diterbitkan oleh instance Layanan Certificate Authority Anda.
- Buat sertifikat yang dikelola Google dengan otorisasi DNS.
Sebaiknya gunakan sertifikat yang dikelola Google.
Izin
Untuk mengikuti panduan ini, Anda harus dapat membuat instance dan mengubah jaringan dalam project. Anda harus menjadi pemilik atau editor project, atau Anda harus memiliki semua peran IAM Compute Engine berikut.
Tugas | Peran yang diperlukan |
---|---|
Membuat jaringan, subnet, dan komponen load balancer | Compute Network Admin |
Menambahkan dan menghapus aturan firewall | Compute Security Admin |
Membuat instance | Compute Instance Admin |
Untuk informasi selengkapnya, lihat panduan berikut:
Ringkasan penyiapan
Anda dapat mengonfigurasi load balancer seperti yang ditunjukkan dalam diagram berikut:
Seperti yang ditunjukkan dalam diagram, contoh ini membuat Application Load Balancer internal lintas region dalam jaringan VPC, dengan satu layanan backend dan dua grup instance terkelola backend di region REGION_A
dan REGION_B
.
Diagram menunjukkan hal berikut:
Jaringan VPC dengan subnet berikut:
- Subnet
SUBNET_A
dan subnet khusus proxy diREGION_A
. - Subnet
SUBNET_B
dan subnet khusus proxy diREGION_B
.
Anda harus membuat subnet khusus proxy di setiap region jaringan VPC tempat Anda menggunakan Load Balancer Aplikasi internal lintas region. Subnet khusus proxy di region tersebut digunakan bersama oleh semua Load Balancer Aplikasi internal lintas region di region tersebut. Alamat sumber paket yang dikirim dari load balancer ke backend layanan Anda dialokasikan dari subnet khusus proxy. Dalam contoh ini, subnet khusus proxy untuk region
REGION_A
memiliki rentang alamat IP utama10.129.0.0/23
dan untukREGION_B
memiliki rentang alamat IP utama10.130.0.0/23
yang merupakan ukuran subnet yang direkomendasikan.- Subnet
Penyiapan ketersediaan tinggi memiliki backend grup instance terkelola untuk deployment VM Compute Engine di region
REGION_A
danREGION_B
. Jika backend di satu region kebetulan tidak berfungsi, traffic akan dialihkan ke region lain.Layanan backend global yang memantau penggunaan dan kondisi backend.
Peta URL global yang mengurai URL permintaan dan meneruskan permintaan ke layanan backend tertentu berdasarkan host dan jalur URL permintaan.
Proxy HTTP atau HTTPS target global, menerima permintaan dari pengguna dan meneruskannya ke peta URL. Untuk HTTPS, konfigurasikan resource sertifikat SSL global. Proxy target menggunakan sertifikat SSL untuk mendekripsi traffic SSL jika Anda mengonfigurasi load balancing HTTPS. Proxy target dapat meneruskan traffic ke instance Anda menggunakan HTTP atau HTTPS.
Aturan penerusan global, memiliki alamat IP internal regional load balancer Anda, untuk meneruskan setiap permintaan masuk ke proxy target.
Alamat IP internal yang terkait dengan aturan penerusan dapat berasal dari subnet di jaringan dan region yang sama dengan backend. Perhatikan kondisi berikut:
- Alamat IP dapat (tetapi tidak harus) berasal dari subnet yang sama dengan grup instance backend.
- Alamat IP tidak boleh berasal dari subnet khusus proxy yang dicadangkan yang memiliki setelan flag
--purpose
keGLOBAL_MANAGED_PROXY
. - Jika Anda ingin menggunakan alamat IP internal yang sama dengan beberapa aturan penerusan,
tetapkan tanda IP address
--purpose
keSHARED_LOADBALANCER_VIP
.
Opsional: Konfigurasi kebijakan perutean DNS berjenis
GEO
untuk merutekan traffic klien ke VIP load balancer di region yang paling dekat dengan klien.
Mengonfigurasi jaringan dan subnet
Dalam jaringan VPC, konfigurasi subnet di setiap region tempat backend Anda dikonfigurasi. Selain itu, konfigurasi proxy-only-subnet
di setiap region tempat Anda ingin mengonfigurasi load balancer.
Contoh ini menggunakan jaringan VPC, region, dan subnet berikut:
Jaringan. Jaringan ini adalah jaringan VPC mode kustom bernama
NETWORK
.Subnet untuk backend.
- Subnet bernama
SUBNET_A
di regionREGION_A
menggunakan10.1.2.0/24
untuk rentang IP utamanya. - Subnet bernama
SUBNET_B
di regionREGION_B
menggunakan10.1.3.0/24
untuk rentang IP utamanya.
- Subnet bernama
Subnet untuk proxy.
- Subnet bernama
PROXY_SN_A
di regionREGION_A
menggunakan10.129.0.0/23
untuk rentang IP utamanya. - Subnet bernama
PROXY_SN_B
di regionREGION_B
menggunakan10.130.0.0/23
untuk rentang IP utamanya.
- Subnet bernama
Load Balancer Aplikasi internal lintas region dapat diakses dari region mana pun dalam VPC. Jadi, klien dari region mana pun dapat mengakses backend load balancer Anda secara global.
Mengonfigurasi subnet backend
Konsol
Di Google Cloud konsol, buka halaman VPC networks.
Klik Create VPC network.
Berikan Name untuk jaringan.
Di bagian Subnets, setel Subnet creation mode ke Custom.
Buat subnet untuk backend load balancer. Di bagian New subnet, masukkan informasi berikut:
- Berikan Name untuk subnet.
- Pilih Region: REGION_A
- Masukkan rentang alamat IP:
10.1.2.0/24
Klik Selesai.
Klik Tambahkan subnet.
Buat subnet untuk backend load balancer. Di bagian New subnet, masukkan informasi berikut:
- Berikan Name untuk subnet.
- Pilih Region: REGION_B
- Masukkan rentang alamat IP:
10.1.3.0/24
Klik Selesai.
Klik Create.
gcloud
Buat jaringan VPC kustom dengan perintah
gcloud compute networks create
:gcloud compute networks create NETWORK \ --subnet-mode=custom
Buat subnet di jaringan
NETWORK
di regionREGION_A
dengan perintahgcloud compute networks subnets create
:gcloud compute networks subnets create SUBNET_A \ --network=NETWORK \ --range=10.1.2.0/24 \ --region=REGION_A
Buat subnet di jaringan
NETWORK
di regionREGION_B
dengan perintahgcloud compute networks subnets create
:gcloud compute networks subnets create SUBNET_B \ --network=NETWORK \ --range=10.1.3.0/24 \ --region=REGION_B
Terraform
Untuk membuat jaringan VPC, gunakan resource google_compute_network
.
Untuk membuat subnet VPC di jaringan lb-network-crs-reg
,
gunakan resource google_compute_subnetwork
.
API
Buat permintaan POST
ke metode networks.insert
.
Ganti PROJECT_ID
dengan project ID Anda.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks { "routingConfig": { "routingMode": "regional" }, "name": "NETWORK", "autoCreateSubnetworks": false }
Buat permintaan POST
ke metode subnetworks.insert
.
Ganti PROJECT_ID
dengan project ID Anda.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_A/subnetworks { "name": "SUBNET_A", "network": "projects/PROJECT_ID/global/networks/lb-network-crs-reg", "ipCidrRange": "10.1.2.0/24", "region": "projects/PROJECT_ID/regions/REGION_A", }
Buat permintaan POST
ke metode subnetworks.insert
.
Ganti PROJECT_ID
dengan project ID Anda.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_B/subnetworks { "name": "SUBNET_B", "network": "projects/PROJECT_ID/global/networks/NETWORK", "ipCidrRange": "10.1.3.0/24", "region": "projects/PROJECT_ID/regions/REGION_B", }
Konfigurasi subnet khusus proxy
Subnet khusus proxy menyediakan serangkaian alamat IP yang digunakan untuk menjalankan proxy Envoy atas nama Anda. Google Cloud Proxy menghentikan koneksi dari klien dan membuat koneksi baru ke backend.
Subnet khusus proxy ini digunakan oleh semua load balancer regional berbasis Envoy di region yang sama dengan jaringan VPC. Hanya boleh ada satu subnet khusus proxy yang aktif untuk tujuan tertentu, per region, per jaringan.
Konsol
Jika menggunakan konsol Google Cloud , Anda dapat menunggu dan membuat subnet khusus proxy nanti di halaman Load balancing.
Jika Anda ingin membuat subnet khusus proxy sekarang, ikuti langkah-langkah berikut:
Di Google Cloud konsol, buka halaman VPC networks.
- Klik nama jaringan VPC.
- Di tab Subnet, klik Tambahkan subnet.
- Berikan Name untuk subnet khusus proxy.
- Pilih Region: REGION_A
- Dalam daftar Tujuan, pilih Managed Proxy Lintas Region.
- Di kolom IP address range, masukkan
10.129.0.0/23
. - Klik Tambahkan.
Buat subnet khusus proxy di REGION_B
- Di tab Subnet, klik Tambahkan subnet.
- Berikan Name untuk subnet khusus proxy.
- Pilih Region: REGION_B
- Dalam daftar Tujuan, pilih Managed Proxy Lintas Region.
- Di kolom IP address range, masukkan
10.130.0.0/23
. - Klik Tambahkan.
gcloud
Buat subnet khusus proxy dengan perintah
gcloud compute networks subnets create
.
gcloud compute networks subnets create PROXY_SN_A \ --purpose=GLOBAL_MANAGED_PROXY \ --role=ACTIVE \ --region=REGION_A \ --network=NETWORK \ --range=10.129.0.0/23
gcloud compute networks subnets create PROXY_SN_B \ --purpose=GLOBAL_MANAGED_PROXY \ --role=ACTIVE \ --region=REGION_B \ --network=NETWORK \ --range=10.130.0.0/23
Terraform
Untuk membuat subnet khusus proxy VPC di jaringan lb-network-crs-reg
, gunakan resource google_compute_subnetwork
.
API
Buat subnet khusus proxy dengan metode
subnetworks.insert
, dengan mengganti
PROJECT_ID
dengan project ID Anda.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_A/subnetworks { "name": " PROXY_SN_A", "ipCidrRange": "10.129.0.0/23", "network": "projects/PROJECT_ID/global/networks/NETWORK", "region": "projects/PROJECT_ID/regions/REGION_A", "purpose": "GLOBAL_MANAGED_PROXY", "role": "ACTIVE" }
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_B/subnetworks { "name": "PROXY_SN_B", "ipCidrRange": "10.130.0.0/23", "network": "projects/PROJECT_ID/global/networks/NETWORK", "region": "projects/PROJECT_ID/regions/REGION_B", "purpose": "GLOBAL_MANAGED_PROXY", "role": "ACTIVE" }
Mengonfigurasi aturan firewall
Contoh ini menggunakan aturan firewall berikut:
fw-ilb-to-backends. Aturan ingress, yang berlaku untuk instance yang di-load balance, yang memungkinkan konektivitas SSH yang masuk pada TCP port
22
dari alamat mana pun. Anda dapat memilih rentang alamat IP sumber yang lebih ketat untuk aturan ini; misalnya, Anda dapat menentukan hanya rentang alamat IP sistem tempat Anda memulai sesi SSH. Contoh ini menggunakan tag targetallow-ssh
untuk mengidentifikasi VM yang menerapkan aturan firewall.fw-healthcheck. Aturan ingress, yang berlaku untuk instance yang di-load balance, yang mengizinkan semua traffic TCP dari sistem health check Google Cloud(dalam
130.211.0.0/22
dan35.191.0.0/16
). Contoh ini menggunakan tag targetload-balanced-backend
untuk mengidentifikasi VM yang menerapkan aturan firewall.fw-backends. Aturan ingress, yang berlaku untuk instance yang di-load balance, yang mengizinkan traffic TCP pada port
80
,443
, dan8080
dari proxy terkelola Load Balancer Aplikasi internal. Contoh ini menggunakan tag targetload-balanced-backend
untuk mengidentifikasi VM yang menerapkan aturan firewall.
Tanpa aturan firewall ini, aturan tolak ingress default akan memblokir traffic masuk ke instance backend.
Target tag menentukan instance backend. Tanpa tag target, aturan firewall berlaku untuk semua instance backend Anda di jaringan VPC. Saat membuat VM backend, pastikan untuk menyertakan tag target yang ditentukan, seperti yang ditunjukkan dalam Membuat grup instance terkelola.
Konsol
Di konsol Google Cloud , buka halaman Firewall policies.
Klik Create firewall rule untuk membuat aturan yang mengizinkan koneksi SSH yang masuk:
- Nama:
fw-ilb-to-backends
- Jaringan: NETWORK
- Direction of traffic: Ingress
- 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
- Protokol dan port:
- Pilih Specified protocols and ports.
- Pilih kotak centang TCP, lalu masukkan
22
untuk nomor port.
- Nama:
Klik Buat.
Klik Create firewall rule untuk kedua kalinya guna membuat aturan yang mengizinkan Google Cloud health check:
- Nama:
fw-healthcheck
- Jaringan: NETWORK
- Direction of traffic: Ingress
- Tindakan terhadap kecocokan: Izinkan
- Targets: Tag target yang ditentukan
- Tag target:
load-balanced-backend
- Filter sumber: Rentang IPv4
- Rentang IPv4 sumber:
130.211.0.0/22
dan35.191.0.0/16
Protocols and ports:
- Pilih Specified protocols and ports.
- Pilih kotak centang TCP, lalu masukkan
80
untuk nomor port.
Sebagai praktik terbaik, batasi aturan ini hanya pada protokol dan port yang cocok dengan yang digunakan oleh health check Anda. Jika Anda menggunakan
tcp:80
untuk protokol dan port, Google Cloud dapat menggunakan HTTP di port80
untuk menghubungi VM Anda, tetapi tidak dapat menggunakan HTTPS di port443
untuk menghubungi VM.
- Nama:
Klik Buat.
Klik Create firewall rule untuk ketiga kalinya guna membuat aturan yang mengizinkan server proxy load balancer terhubung ke backend:
- Nama:
fw-backends
- Jaringan: NETWORK
- Direction of traffic: Ingress
- Tindakan terhadap kecocokan: Izinkan
- Targets: Tag target yang ditentukan
- Tag target:
load-balanced-backend
- Filter sumber: Rentang IPv4
- Rentang IPv4 sumber:
10.129.0.0/23
dan10.130.0.0/23
- Protokol dan port:
- Pilih Specified protocols and ports.
- Centang kotak TCP, lalu masukkan
80, 443, 8080
untuk nomor port.
- Nama:
Klik Buat.
gcloud
Buat aturan firewall
fw-ilb-to-backends
untuk mengizinkan konektivitas SSH ke VM dengan tag jaringanallow-ssh
. Jika Anda menghapussource-ranges
, Google Cloud akan menafsirkan aturan sebagai sumber apa pun.gcloud compute firewall-rules create fw-ilb-to-backends \ --network=NETWORK \ --action=allow \ --direction=ingress \ --target-tags=allow-ssh \ --rules=tcp:22
Buat aturan
fw-healthcheck
untuk mengizinkan health check Google Cloud. Contoh ini mengizinkan semua traffic TCP dari penguji health check; namun, Anda juga dapat mengonfigurasi kumpulan port yang lebih sempit untuk memenuhi kebutuhan Anda.gcloud compute firewall-rules create fw-healthcheck \ --network=NETWORK \ --action=allow \ --direction=ingress \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --target-tags=load-balanced-backend \ --rules=tcp
Buat aturan
fw-backends
untuk mengizinkan proxy Load Balancer Aplikasi internal terhubung ke backend Anda. Tetapkansource-ranges
ke rentang yang dialokasikan dari subnet khusus proxy Anda, misalnya,10.129.0.0/23
dan10.130.0.0/23
.gcloud compute firewall-rules create fw-backends \ --network=NETWORK \ --action=allow \ --direction=ingress \ --source-ranges=source-range \ --target-tags=load-balanced-backend \ --rules=tcp:80,tcp:443,tcp:8080
Terraform
Untuk membuat aturan firewall, gunakan resource google_compute_firewall
.
API
Buat aturan firewall fw-ilb-to-backends
dengan membuat permintaan POST
ke
metode firewalls.insert
,
ganti PROJECT_ID
dengan project ID Anda.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-ilb-to-backends", "network": "projects/PROJECT_ID/global/networks/NETWORK", "sourceRanges": [ "0.0.0.0/0" ], "targetTags": [ "allow-ssh" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "direction": "INGRESS" }
Buat aturan firewall fw-healthcheck
dengan membuat permintaan POST
ke
metode firewalls.insert
,
ganti PROJECT_ID
dengan project ID Anda.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-healthcheck", "network": "projects/PROJECT_ID/global/networks/NETWORK", "sourceRanges": [ "130.211.0.0/22", "35.191.0.0/16" ], "targetTags": [ "load-balanced-backend" ], "allowed": [ { "IPProtocol": "tcp" } ], "direction": "INGRESS" }
Buat aturan firewall fw-backends
untuk mengizinkan traffic TCP dalam subnet proxy untuk metode firewalls.insert
, dengan mengganti PROJECT_ID
dengan project ID Anda.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-backends", "network": "projects/PROJECT_ID/global/networks/NETWORK", "sourceRanges": [ "10.129.0.0/23", "10.130.0.0/23" ], "targetTags": [ "load-balanced-backend" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "80" ] }, { "IPProtocol": "tcp", "ports": [ "443" ] }, { "IPProtocol": "tcp", "ports": [ "8080" ] } ], "direction": "INGRESS" }
Membuat grup instance terkelola
Bagian ini menunjukkan cara membuat template dan grup instance terkelola. Grup instance terkelola menyediakan instance VM yang menjalankan server backend contoh Load Balancer Aplikasi internal lintas-region. Untuk grup instance, Anda dapat menentukan layanan HTTP dan memetakan nama port ke port yang relevan. Layanan backend load balancer meneruskan traffic ke port bernama. Traffic dari klien di-load balance ke server backend. Untuk tujuan demonstrasi, backend akan menyajikan nama host-nya sendiri.
Konsol
Di konsol Google Cloud , buka halaman Instance templates.
Buka halaman Template instance
- Klik Create instance template.
- Untuk Name, masukkan
gil7-backendeast1-template
. - Pastikan Boot disk disetel ke image Debian, seperti
Debian GNU/Linux 12 (bookworm). Petunjuk ini menggunakan perintah yang hanya tersedia di Debian, seperti
apt-get
. - Klik Advanced options.
- Klik Networking, lalu konfigurasi kolom berikut:
- Untuk Tag jaringan, masukkan
allow-ssh
danload-balanced-backend
. - Untuk Network interfaces, pilih opsi berikut:
- Jaringan: NETWORK
- Subnet: SUBNET_B
- Untuk Tag jaringan, masukkan
Klik Management. Masukkan skrip berikut ke dalam kolom Skrip startup.
#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2
Klik Buat.
Klik Create instance template.
Untuk Name, masukkan
gil7-backendwest1-template
.Pastikan Boot disk disetel ke image Debian, seperti Debian GNU/Linux 12 (bookworm). Petunjuk ini menggunakan perintah yang hanya tersedia di Debian, seperti
apt-get
.Klik Advanced options.
Klik Networking dan konfigurasi kolom berikut:
- Untuk Tag jaringan, masukkan
allow-ssh
danload-balanced-backend
. - Untuk Network interfaces, pilih opsi berikut:
- Jaringan: NETWORK
- Subnet: SUBNET_A
- Untuk Tag jaringan, masukkan
Klik Management. Masukkan skrip berikut ke dalam kolom Skrip startup.
#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2
Klik Buat.
Di konsol Google Cloud , buka halaman Instance groups.
- Klik Create instance group.
- Pilih New managed instance group (stateless). Untuk mengetahui informasi selengkapnya, lihat MIG stateless atau stateful.
- Untuk Name, masukkan
gl7-ilb-mig-a
. - Untuk Location, pilih Single zone.
- Untuk Region, pilih REGION_A.
- Untuk Zone, pilih ZONE_A.
- Untuk Instance template, pilih
gil7-backendwest1-template
. Tentukan jumlah instance yang ingin Anda buat dalam grup.
Untuk contoh ini, tentukan opsi berikut di bagian Penskalaan otomatis:
- Untuk Autoscaling mode, pilih
Off:do not autoscale
. - Untuk Maximum number of instances, masukkan
2
.
Secara opsional, di bagian Autoscaling pada UI, Anda dapat mengonfigurasi grup instance agar menambahkan atau menghapus instance secara otomatis berdasarkan penggunaan CPU instance.
- Untuk Autoscaling mode, pilih
Klik Buat.
Klik Create instance group.
Pilih New managed instance group (stateless). Untuk mengetahui informasi selengkapnya, lihat MIG stateless atau stateful.
Untuk Name, masukkan
gl7-ilb-mig-b
.Untuk Location, pilih Single zone.
Untuk Region, pilih REGION_B.
Untuk Zone, pilih ZONE_B.
Untuk Instance template, pilih
gil7-backendeast1-template
.Tentukan jumlah instance yang ingin Anda buat dalam grup.
Untuk contoh ini, tentukan opsi berikut di bagian Penskalaan otomatis:
- Untuk Autoscaling mode, pilih
Off:do not autoscale
. - Untuk Maximum number of instances, masukkan
2
.
Secara opsional, di bagian Autoscaling pada UI, Anda dapat mengonfigurasi grup instance untuk menambahkan atau menghapus instance secara otomatisberdasarkan penggunaan CPU instance.
- Untuk Autoscaling mode, pilih
Klik Buat.
gcloud
Petunjuk gcloud CLI dalam panduan ini mengasumsikan bahwa Anda menggunakan Cloud Shell atau lingkungan lain dengan bash yang terinstal.
Buat template instance VM dengan server HTTP menggunakan perintah
gcloud compute instance-templates create
.gcloud compute instance-templates create gil7-backendwest1-template \ --region=REGION_A \ --network=NETWORK \ --subnet=SUBNET_A \ --tags=allow-ssh,load-balanced-backend \ --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://169.254.169.254/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2'
gcloud compute instance-templates create gil7-backendeast1-template \ --region=REGION_B \ --network=NETWORK \ --subnet=SUBNET_B \ --tags=allow-ssh,load-balanced-backend \ --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://169.254.169.254/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2'
Buat grup instance terkelola di zona dengan perintah
gcloud compute instance-groups managed create
.gcloud compute instance-groups managed create gl7-ilb-mig-a \ --zone=ZONE_A \ --size=2 \ --template=gil7-backendwest1-template
gcloud compute instance-groups managed create gl7-ilb-mig-b \ --zone=ZONE_B \ --size=2 \ --template=gil7-backendeast1-template
Terraform
Untuk membuat template instance, gunakan resource google_compute_instance_template
.
Untuk membuat grup instance terkelola, gunakan resource google_compute_instance_group_manager
.
API
Buat template instance dengan
metode instanceTemplates.insert
,
ganti PROJECT_ID
dengan project ID Anda.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates { "name":"gil7-backendwest1-template", "properties":{ "machineType":"e2-standard-2", "tags":{ "items":[ "allow-ssh", "load-balanced-backend" ] }, "metadata":{ "kind":"compute#metadata", "items":[ { "key":"startup-script", "value":"#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\n vm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\nhttp://169.254.169.254/computeMetadata/v1/instance/name)\"\n echo \"Page served from: $vm_hostname\" | \\\ntee /var/www/html/index.html\nsystemctl restart apache2" } ] }, "networkInterfaces":[ { "network":"projects/PROJECT_ID/global/networks/NETWORK", "subnetwork":"regions/REGION_A/subnetworks/SUBNET_A", "accessConfigs":[ { "type":"ONE_TO_ONE_NAT" } ] } ], "disks":[ { "index":0, "boot":true, "initializeParams":{ "sourceImage":"projects/debian-cloud/global/images/family/debian-12" }, "autoDelete":true } ] } }
Buat grup instance terkelola di setiap zona dengan
metode instanceGroupManagers.insert
,
ganti PROJECT_ID
dengan project ID Anda.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/{zone}/instanceGroupManagers { "name": "gl7-ilb-mig-a", "zone": "projects/PROJECT_ID/zones/ZONE_A", "instanceTemplate": "projects/PROJECT_ID/global/instanceTemplates/gil7-backendwest1-template", "baseInstanceName": "gl7-ilb-mig-b", "targetSize": 2 }
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates { "name":"gil7-backendeast1-template", "properties":{ "machineType":"e2-standard-2", "tags":{ "items":[ "allow-ssh", "load-balanced-backend" ] }, "metadata":{ "kind":"compute#metadata", "items":[ { "key":"startup-script", "value":"#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\n vm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\nhttp://169.254.169.254/computeMetadata/v1/instance/name)\"\n echo \"Page served from: $vm_hostname\" | \\\ntee /var/www/html/index.html\nsystemctl restart apache2" } ] }, "networkInterfaces":[ { "network":"projects/PROJECT_ID/global/networks/NETWORK", "subnetwork":"regions/REGION_B/subnetworks/SUBNET_B", "accessConfigs":[ { "type":"ONE_TO_ONE_NAT" } ] } ], "disks":[ { "index":0, "boot":true, "initializeParams":{ "sourceImage":"projects/debian-cloud/global/images/family/debian-12" }, "autoDelete":true } ] } }
Buat grup instance terkelola di setiap zona dengan
metode instanceGroupManagers.insert
,
ganti PROJECT_ID
dengan project ID Anda.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/{zone}/instanceGroupManagers { "name": "gl7-ilb-mig-b", "zone": "projects/PROJECT_ID/zones/ZONE_B", "instanceTemplate": "projects/PROJECT_ID/global/instanceTemplates/gil7-backendwest1-template", "baseInstanceName": "gl7-ilb-mig-b", "targetSize": 2 }
Mengonfigurasi load balancer
Contoh ini menunjukkan cara membuat resource Load Balancer Aplikasi internal lintas region berikut:
- Health check HTTP global.
- Layanan backend global dengan grup instance terkelola sebagai backend.
- Peta URL. Pastikan untuk merujuk ke peta URL global untuk proxy HTTP(S) target. Peta URL global mengarahkan permintaan ke layanan backend global berdasarkan aturan yang Anda tentukan untuk host dan jalur URL masuk. Peta URL global dapat dirujuk oleh aturan proxy target global.
- Sertifikat SSL global (untuk HTTPS).
- Proxy target global.
Dua aturan penerusan global dengan alamat IP regional. Untuk alamat IP aturan penerusan, gunakan rentang alamat IP
SUBNET_A
atauSUBNET_B
. Jika Anda mencoba menggunakan subnet khusus proxy, pembuatan aturan penerusan akan gagal.
Konsol
Pilih jenis load balancer
Di konsol Google Cloud , buka halaman Load balancing.
- Klik Create load balancer.
- Untuk Type of load balancer, pilih Application Load Balancer (HTTP/HTTPS), lalu klik Next.
- Untuk Public facing or internal, pilih Internal, lalu klik Next.
- Untuk Cross-region or single region deployment, pilih Best for cross-region workloads, lalu klik Next.
- Klik Configure.
Konfigurasi dasar
- Berikan Nama untuk load balancer.
- Untuk Network, pilih NETWORK.
Mengonfigurasi frontend dengan dua aturan penerusan
Untuk HTTP:
- Klik Frontend configuration.
- Berikan Name untuk aturan penerusan.
- Di daftar Subnetwork region, pilih REGION_A.
Mereservasi subnet khusus proxy
- Dalam daftar Subnetwork, pilih SUBNET_A.
- Dalam daftar IP address, klik Create IP address. Halaman Reserve a static internal IP address akan terbuka.
- Berikan Name untuk alamat IP statis.
- Dalam daftar Static IP address, pilih Let me choose.
- Di kolom Custom IP address, masukkan
10.1.2.99
. - Pilih Pesan.
- Klik Selesai.
- Untuk menambahkan aturan penerusan kedua, klik Tambahkan IP dan port frontend.
- Berikan Name untuk aturan penerusan.
- Di daftar Subnetwork region, pilih REGION_B.
Mereservasi subnet khusus proxy
- Dalam daftar Subnetwork, pilih SUBNET_B.
- Dalam daftar IP address, klik Create IP address. Halaman Reserve a static internal IP address akan terbuka.
- Berikan Name untuk alamat IP statis.
- Dalam daftar Static IP address, pilih Let me choose.
- Di kolom Custom IP address, masukkan
10.1.3.99
. - Pilih Pesan.
- Klik Selesai.
Untuk HTTPS:
Jika menggunakan HTTPS antara klien dan load balancer, Anda memerlukan satu atau beberapa resource sertifikat SSL untuk mengonfigurasi proxy.
Untuk membuat sertifikat yang dikelola Google all-regions
, lihat dokumentasi berikut:
- Buat sertifikat yang dikelola Google yang diterbitkan oleh instance Layanan Certificate Authority Anda.
- Buat sertifikat yang dikelola Google dengan otorisasi DNS.
Setelah membuat sertifikat yang dikelola Google, lampirkan sertifikat langsung ke proxy target. Peta sertifikat tidak didukung oleh Load Balancer Aplikasi internal lintas region.
Untuk membuat sertifikat yang dikelola sendiri all-regions
, lihat dokumentasi berikut:
Men-deploy sertifikat yang dikelola sendiri secara regional.
- Klik Frontend configuration.
- Berikan Name untuk aturan penerusan.
- Pada kolom Protocol, pilih
HTTPS (includes HTTP/2)
. - Pastikan Port disetel ke
443
. - Di daftar Subnetwork region, pilih REGION_A.
Mereservasi subnet khusus proxy
- Dalam daftar Subnetwork, pilih SUBNET_A.
- Dalam daftar IP address, klik Create IP address. Halaman Reserve a static internal IP address akan terbuka.
- Berikan Name untuk alamat IP statis.
- Dalam daftar Static IP address, pilih Let me choose.
- Di kolom Custom IP address, masukkan
10.1.3.99
. - Pilih Pesan.
- Di bagian Tambahkan sertifikat, pilih sertifikat.
- Opsional: Untuk menambahkan sertifikat selain sertifikat SSL utama:
- Klik Add certificate.
- Pilih sertifikat dari daftar.
- Pilih kebijakan SSL dari daftar Kebijakan SSL. Jika Anda belum membuat kebijakan SSL, kebijakan SSL default Google Cloud akan diterapkan.
- Klik Selesai.
- Berikan Name untuk konfigurasi frontend.
- Pada kolom Protocol, pilih
HTTPS (includes HTTP/2)
. - Pastikan Port disetel ke
443
. - Di daftar Subnetwork region, pilih REGION_B.
Mereservasi subnet khusus proxy
- Dalam daftar Subnetwork, pilih SUBNET_B.
- Dalam daftar IP address, klik Create IP address. Halaman Reserve a static internal IP address akan terbuka.
- Berikan Name untuk alamat IP statis.
- Dalam daftar Static IP address, pilih Let me choose.
- Di kolom Custom IP address, masukkan
10.1.3.99
. - Pilih Pesan.
- Di bagian Tambahkan sertifikat, pilih sertifikat.
- Opsional: Untuk menambahkan sertifikat selain sertifikat SSL utama:
- Klik Add certificate.
- Pilih sertifikat dari daftar.
- Pilih kebijakan SSL dari daftar Kebijakan SSL. Jika Anda belum membuat kebijakan SSL, kebijakan SSL default Google Cloud akan diterapkan.
- Klik Selesai.
- Klik Backend configuration.
- Dalam daftar Create or select backend services, klik Create a backend service.
- Berikan Nama untuk layanan backend.
- Untuk Protocol, pilih HTTP.
- Untuk Named Port, masukkan
http
. - Di daftar Backend type, pilih Instance group.
- Di bagian New backend:
- Dalam daftar Grup instance, pilih
gl4-ilb-miga
di REGION_A. - Setel Transfer nomor ke
80
. - Klik Selesai.
- Untuk menambahkan backend lain, klik Tambahkan backend.
- Dalam daftar Grup instance, pilih
gl4-ilb-migb
di REGION_B. - Setel Transfer nomor ke
80
. - Klik Selesai.
- Di daftar Health check, klik Create a health check.
- Di kolom Name, masukkan
global-http-health-check
. - Tetapkan Protocol ke
HTTP
. - Tetapkan Port ke
80
. - Klik Simpan.
- Klik Routing rules.
- Untuk Mode, pilih Simple host and path rule.
- Pastikan hanya ada satu layanan backend untuk semua host dan jalur yang tidak cocok.
- Klik Review and finalize.
- Tinjau setelan konfigurasi load balancer Anda.
- Klik Buat.
Tambahkan konfigurasi frontend kedua:
Mengonfigurasi aturan pemilihan rute
Meninjau konfigurasi
gcloud
Tentukan health check HTTP dengan perintah
gcloud compute health-checks create http
.gcloud compute health-checks create http global-http-health-check \ --use-serving-port \ --global
Tentukan layanan backend dengan perintah
gcloud compute backend-services create
.gcloud compute backend-services create BACKEND_SERVICE_NAME \ --load-balancing-scheme=INTERNAL_MANAGED \ --protocol=HTTP \ --enable-logging \ --logging-sample-rate=1.0 \ --health-checks=global-http-health-check \ --global-health-checks \ --global
Tambahkan backend ke layanan backend dengan perintah
gcloud compute backend-services add-backend
.gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --balancing-mode=UTILIZATION \ --instance-group=gl7-ilb-mig-a \ --instance-group-zone=ZONE_A \ --global
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --balancing-mode=UTILIZATION \ --instance-group=gl7-ilb-mig-b \ --instance-group-zone=ZONE_B \ --global
Buat peta URL dengan perintah
gcloud compute url-maps create
.gcloud compute url-maps create gl7-gilb-url-map \ --default-service=BACKEND_SERVICE_NAME \ --global
Buat proxy target.
Untuk HTTP:
Buat proxy target dengan perintah
gcloud compute target-http-proxies create
.gcloud compute target-http-proxies create gil7-http-proxy \ --url-map=gl7-gilb-url-map \ --global
Untuk HTTPS:
Untuk membuat sertifikat yang dikelola Google, lihat dokumentasi berikut:
- Buat sertifikat yang dikelola Google yang diterbitkan oleh instance Layanan Certificate Authority Anda.
- Buat sertifikat yang dikelola Google dengan otorisasi DNS.
Setelah membuat sertifikat yang dikelola Google, lampirkan sertifikat langsung ke proxy target. Peta sertifikat tidak didukung oleh Load Balancer Aplikasi internal lintas region.
Untuk membuat sertifikat yang dikelola sendiri, lihat dokumentasi berikut:
Tetapkan jalur file ke nama variabel.
export LB_CERT=PATH_TO_PEM_FORMATTED_FILE
export LB_PRIVATE_KEY=PATH_TO_LB_PRIVATE_KEY_FILE
Buat sertifikat SSL semua region menggunakan perintah
gcloud beta certificate-manager certificates create
.gcloud certificate-manager certificates create gilb-certificate \ --private-key-file=$LB_PRIVATE_KEY \ --certificate-file=$LB_CERT \ --scope=all-regions
Gunakan sertifikat SSL untuk membuat proxy target dengan perintah
gcloud compute target-https-proxies create
gcloud compute target-https-proxies create gil7-https-proxy \ --url-map=gl7-gilb-url-map \ --certificate-manager-certificates=gilb-certificate \ --global
Buat dua aturan penerusan, satu dengan VIP (
10.1.2.99
) di regionREGION_B
dan satu lagi dengan VIP (10.1.3.99
) di regionREGION_A
. Untuk mengetahui informasi selengkapnya, lihat Mencadangkan alamat IPv4 internal statis.Untuk jaringan kustom, Anda harus mereferensikan subnet dalam aturan penerusan. Perhatikan bahwa ini adalah subnet VM, bukan subnet proxy.
Untuk HTTP:
Gunakan perintah
gcloud compute forwarding-rules create
dengan flag yang benar.gcloud compute forwarding-rules create FWRULE_A \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=NETWORK \ --subnet=SUBNET_A \ --subnet-region=REGION_A \ --address=10.1.2.99 \ --ports=80 \ --target-http-proxy=gil7-http-proxy \ --global
gcloud compute forwarding-rules create FWRULE_B \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=NETWORK \ --subnet=SUBNET_B \ --subnet-region=REGION_B \ --address=10.1.3.99 \ --ports=80 \ --target-http-proxy=gil7-http-proxy \ --global
Untuk HTTPS:
Gunakan perintah
gcloud compute forwarding-rules create
dengan flag yang benar.gcloud compute forwarding-rules create FWRULE_A \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=NETWORK \ --subnet=SUBNET_A \ --subnet-region=REGION_A \ --address=10.1.2.99 \ --ports=443 \ --target-https-proxy=gil7-https-proxy \ --global
gcloud compute forwarding-rules create FWRULE_B \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=NETWORK \ --subnet=SUBNET_B \ --subnet-region=REGION_B \ --address=10.1.3.99 \ --ports=443 \ --target-https-proxy=gil7-https-proxy \ --global
Terraform
Untuk membuat health check, gunakan resource google_compute_health_check
.
Untuk membuat layanan backend, gunakan resource google_compute_backend_service
.
Untuk membuat peta URL, gunakan resource google_compute_url_map
.
Untuk membuat proxy HTTP target, gunakan resource google_compute_target_http_proxy
.
Untuk membuat aturan penerusan, gunakan resource google_compute_forwarding_rule
.
Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.
API
Buat health check dengan membuat permintaan POST
ke
metode healthChecks.insert
,
dengan mengganti PROJECT_ID
dengan project ID Anda.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/healthChecks { "name": "global-http-health-check", "type": "HTTP", "httpHealthCheck": { "portSpecification": "USE_SERVING_PORT" } }
Buat layanan backend global dengan membuat permintaan POST
ke
metode backendServices.insert
,
ganti PROJECT_ID
dengan project ID Anda.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices { "name": "BACKEND_SERVICE_NAME", "backends": [ { "group": "projects/PROJECT_ID/zones/ZONE_A/instanceGroups/gl7-ilb-mig-a", "balancingMode": "UTILIZATION" }, { "group": "projects/PROJECT_ID/zones/ZONE_B/instanceGroups/gl7-ilb-mig-b", "balancingMode": "UTILIZATION" } ], "healthChecks": [ "projects/PROJECT_ID/regions/global/healthChecks/global-http-health-check" ], "loadBalancingScheme": "INTERNAL_MANAGED" }
Buat peta URL dengan membuat permintaan POST
ke
metode urlMaps.insert
,
ganti PROJECT_ID
dengan project ID Anda.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps { "name": "l7-ilb-map", "defaultService": "projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE_NAME" }
Untuk HTTP:
Buat proxy HTTP target dengan membuat permintaan POST
ke
metode targetHttpProxies.insert
,
ganti PROJECT_ID
dengan project ID Anda.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/targetHttpProxy { "name": "l7-ilb-proxy", "urlMap": "projects/PROJECT_ID/global/urlMaps/l7-ilb-map" }
Buat aturan penerusan dengan membuat permintaan POST
ke
metode forwardingRules.insert
,
ganti PROJECT_ID
dengan project ID Anda.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules { "name": "FWRULE_A", "IPAddress": "10.1.2.99", "IPProtocol": "TCP", "portRange": "80-80", "target": "projects/PROJECT_ID/global/targetHttpProxies/l7-ilb-proxy", "loadBalancingScheme": "INTERNAL_MANAGED", "subnetwork": "projects/PROJECT_ID/regions/REGION_A/subnetworks/SUBNET_A", "network": "projects/PROJECT_ID/global/networks/NETWORK", "networkTier": "PREMIUM" }
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules { "name": "gil7forwarding-rule-b", "IPAddress": "10.1.3.99", "IPProtocol": "TCP", "portRange": "80-80", "target": "projects/PROJECT_ID/global/targetHttpProxies/l7-ilb-proxy", "loadBalancingScheme": "INTERNAL_MANAGED", "subnetwork": "projects/PROJECT_ID/regions/REGION_B/subnetworks/SUBNET_B", "network": "projects/PROJECT_ID/global/networks/NETWORK", "networkTier": "PREMIUM" }
Untuk HTTPS:
Baca file sertifikat dan kunci pribadi, lalu buat sertifikat SSL. Contoh berikut menunjukkan cara melakukannya dengan Python.
Buat proxy HTTPS target dengan membuat permintaan POST
ke
targetHttpsProxies.insert
method,
ganti PROJECT_ID
dengan ID project Anda.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/targetHttpsProxy { "name": "l7-ilb-proxy", "urlMap": "projects/PROJECT_ID/global/urlMaps/l7-ilb-map", "sslCertificates": /projects/PROJECT_ID/global/sslCertificates/SSL_CERT_NAME }
Buat aturan penerusan dengan membuat permintaan POST
ke
metode globalForwardingRules.insert
,
ganti PROJECT_ID
dengan project ID Anda.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules { "name": "FWRULE_A", "IPAddress": "10.1.2.99", "IPProtocol": "TCP", "portRange": "80-80", "target": "projects/PROJECT_ID/global/targetHttpsProxies/l7-ilb-proxy", "loadBalancingScheme": "INTERNAL_MANAGED", "subnetwork": "projects/PROJECT_ID/regions/REGION_A/subnetworks/SUBNET_A", "network": "projects/PROJECT_ID/global/networks/NETWORK", "networkTier": "PREMIUM" }
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules { "name": "FWRULE_B", "IPAddress": "10.1.3.99", "IPProtocol": "TCP", "portRange": "80-80", "target": "projects/PROJECT_ID/global/targetHttpsProxies/l7-ilb-proxy", "loadBalancingScheme": "INTERNAL_MANAGED", "subnetwork": "projects/PROJECT_ID/regions/REGION_B/subnetworks/SUBNET_B", "network": "projects/PROJECT_ID/global/networks/NETWORK", "networkTier": "PREMIUM" }
Menguji load balancer
Membuat instance VM untuk menguji konektivitas
Buat VM klien:
gcloud compute instances create l7-ilb-client-a \ --image-family=debian-12 \ --image-project=debian-cloud \ --network=NETWORK \ --subnet=SUBNET_A \ --zone=ZONE_A \ --tags=allow-ssh
gcloud compute instances create l7-ilb-client-b \ --image-family=debian-12 \ --image-project=debian-cloud \ --network=NETWORK \ --subnet=SUBNET_B \ --zone=ZONE_B \ --tags=allow-ssh
Gunakan SSH untuk terhubung ke setiap instance klien.
gcloud compute ssh l7-ilb-client-a --zone=ZONE_A
gcloud compute ssh l7-ilb-client-b --zone=ZONE_B
Verifikasi bahwa alamat IP menyalurkan nama host-nya
Pastikan VM klien dapat menjangkau kedua alamat IP. Perintah ini menampilkan nama VM backend yang melayani permintaan:
curl 10.1.2.99
curl 10.1.3.99
Untuk pengujian HTTPS, ganti
curl
dengan baris perintah berikut:curl -k 'https://DOMAIN_NAME:443' --connect-to DOMAIN_NAME:443:10.1.2.99:443
curl -k 'https://DOMAIN_NAME:443' --connect-to DOMAIN_NAME:443:10.1.3.99:443
Ganti DOMAIN_NAME dengan nama domain aplikasi Anda, misalnya,
test.example.com
.Flag
-k
menyebabkan curl melewati validasi sertifikat.Opsional: Gunakan data DNS yang dikonfigurasi untuk me-resolve alamat IP terdekat dengan VM klien. Misalnya, DNS_NAME dapat berupa
service.example.com
.curl DNS_NAME
Jalankan 100 permintaan dan pastikan semuanya di-load balance
Untuk HTTP:
{ RESULTS= for i in {1..100} do RESULTS="$RESULTS:$(curl --silent 10.1.2.99)" done echo "" echo " Results of load-balancing to 10.1.2.99: " echo "***" echo "$RESULTS" | tr ':' '\n' | grep -Ev "^$" | sort | uniq -c echo }
{ RESULTS= for i in {1..100} do RESULTS="$RESULTS:$(curl --silent 10.1.3.99)" done echo "" echo " Results of load-balancing to 10.1.3.99: " echo "***" echo "$RESULTS" | tr ':' '\n' | grep -Ev "^$" | sort | uniq -c echo }
Untuk HTTPS:
Dalam skrip berikut, ganti DOMAIN_NAME dengan nama domain aplikasi Anda, misalnya, test.example.com
.
{ RESULTS= for i in {1..100} do RESULTS="$RESULTS:$(curl -k -s 'https://DOMAIN_NAME:443' --connect-to DOMAIN_NAME:443:10.1.2.99:443)" done echo "" echo " Results of load-balancing to 10.1.2.99: " echo "***" echo "$RESULTS" | tr ':' '\n' | grep -Ev "^$" | sort | uniq -c echo }
{ RESULTS= for i in {1..100} do RESULTS="$RESULTS:$(curl -k -s 'https://DOMAIN_NAME:443' --connect-to DOMAIN_NAME:443:10.1.3.99:443)" done echo "" echo " Results of load-balancing to 10.1.3.99: " echo "***" echo "$RESULTS" | tr ':' '\n' | grep -Ev "^$" | sort | uniq -c echo }
Menguji failover
Memverifikasi failover ke backend di region
REGION_A
jika backend diREGION_B
bermasalah atau tidak dapat dijangkau. Untuk menyimulasikan failover, hapus semua backend dariREGION_B
:gcloud compute backend-services remove-backend BACKEND_SERVICE_NAME \ --balancing-mode=UTILIZATION \ --instance-group=gl7-ilb-mig-b \ --instance-group-zone=ZONE_B
Hubungkan menggunakan SSH ke VM klien di REGION_B.
gcloud compute ssh l7-ilb-client-b \ --zone=ZONE_B
Kirim permintaan ke alamat IP yang di-load balance di region
REGION_B
. Output perintah menampilkan respons dari VM backend diREGION_A
.Dalam skrip berikut, ganti DOMAIN_NAME dengan nama domain aplikasi Anda, misalnya,
test.example.com
.{ RESULTS= for i in {1..100} do RESULTS="$RESULTS:$(curl -k -s 'https://DOMAIN_NAME:443' --connect-to DOMAIN_NAME:443:10.1.3.99:443)" done echo "***" echo "*** Results of load-balancing to 10.1.3.99: " echo "***" echo "$RESULTS" | tr ':' '\n' | grep -Ev "^$" | sort | uniq -c echo }
Opsi konfigurasi tambahan
Bagian ini memperluas contoh konfigurasi untuk memberikan opsi konfigurasi alternatif dan tambahan. Semua tugas bersifat opsional. Anda dapat melakukannya dalam urutan apa pun.
Mengaktifkan afinitas sesi
Prosedur ini menunjukkan cara mengupdate layanan backend untuk contoh Load Balancer Aplikasi internal regional atau Load Balancer Aplikasi internal lintas region sehingga layanan backend menggunakan afinitas cookie yang dihasilkan, afinitas kolom header, atau afinitas cookie HTTP.
Jika afinitas berbasis cookie diaktifkan, load balancer akan mengeluarkan cookie
pada permintaan pertama. Untuk setiap permintaan berikutnya dengan cookie yang sama, load balancer mengarahkan permintaan ke instance atau endpoint mesin virtual (VM) backend yang sama. Dalam contoh ini, cookie diberi nama GCILB
.
Jika afinitas kolom header diaktifkan, load balancer akan merutekan permintaan ke VM atau endpoint backend dalam grup endpoint jaringan (NEG) berdasarkan nilai header HTTP yang diberi nama dalam tanda --custom-request-header
.
Afinitas kolom header hanya valid jika
kebijakan lokalitas load balancing adalah RING_HASH
atau MAGLEV
dan hash konsisten
layanan backend menentukan nama header HTTP.
Jika afinitas cookie HTTP diaktifkan, load balancer akan merutekan permintaan ke
endpoint atau VM backend dalam NEG, berdasarkan cookie HTTP yang diberi nama dalam
flag HTTP_COOKIE
dengan flag --affinity-cookie-ttl
opsional. Jika klien
tidak memberikan cookie dalam permintaan HTTP-nya, proxy akan membuat
cookie dan menampilkannya kepada klien dalam header Set-Cookie
. Afinitas cookie HTTP
hanya valid jika kebijakan lokalitas load balancing adalah
RING_HASH
atau MAGLEV
dan hash konsisten layanan backend menentukan
cookie HTTP.
Konsol
Untuk mengaktifkan atau mengubah afinitas sesi untuk layanan backend:
Di konsol Google Cloud , buka halaman Load balancing.
- Klik Backend.
- Klik gil7-backend-service (nama layanan backend yang Anda buat untuk contoh ini), lalu klik Edit.
- Di halaman Backend service details, klik Advanced configuration.
- Di bagian Afinitas sesi, pilih jenis afinitas sesi yang Anda inginkan.
- Klik Perbarui.
gcloud
Gunakan perintah Google Cloud CLI berikut untuk mengupdate layanan backend ke berbagai jenis afinitas sesi:
gcloud compute backend-services update gil7-backend-service \ --session-affinity=[GENERATED_COOKIE | HEADER_FIELD | HTTP_COOKIE | CLIENT_IP] \ --global
API
Untuk menetapkan afinitas sesi, buat permintaan `PATCH` ke
metode backendServices/patch
.
PATCH https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/gil7-backend-service { "sessionAffinity": ["GENERATED_COOKIE" | "HEADER_FIELD" | "HTTP_COOKIE" | "CLIENT_IP" ] }
Membatasi klien yang dapat mengirim traffic ke load balancer
Anda dapat membatasi klien agar tidak terhubung ke VIP aturan penerusan Load Balancer Aplikasi internal dengan mengonfigurasi aturan firewall keluar pada klien ini. Tetapkan aturan firewall ini di VM klien tertentu berdasarkan akun layanan atau tag.
Anda tidak dapat menggunakan aturan firewall untuk membatasi traffic masuk ke VIP aturan penerusan Load Balancer Aplikasi internal tertentu. Klien mana pun di jaringan VPC yang sama dan di region yang sama dengan VIP aturan penerusan umumnya dapat mengirim traffic ke VIP aturan penerusan.
Selain itu, semua permintaan ke backend berasal dari proxy yang menggunakan alamat IP dalam rentang subnet khusus proxy. Aturan firewall yang mengizinkan atau menolak traffic ingress di backend ini berdasarkan VIP aturan penerusan yang digunakan oleh klien tidak dapat dibuat.
Berikut beberapa contoh cara menggunakan aturan firewall keluar untuk membatasi traffic ke VIP aturan penerusan load balancer.
Konsol
Untuk mengidentifikasi VM klien, beri tag pada
VM tertentu yang ingin Anda batasi. Tag ini digunakan untuk mengaitkan aturan firewall dengan
VM klien yang diberi tag. Kemudian, tambahkan tag ke kolom TARGET_TAG
pada langkah-langkah berikut.
Gunakan satu aturan firewall atau beberapa aturan untuk menyiapkannya.
Aturan firewall keluar tunggal
Anda dapat mengonfigurasi satu aturan keluar firewall untuk menolak semua traffic keluar yang berasal dari VM klien yang diberi tag ke VIP load balancer.
Di konsol Google Cloud , buka halaman Firewall rules.
Klik Create firewall rule untuk membuat aturan yang menolak traffic keluar dari VM klien yang diberi tag ke VIP load balancer.
- Nama:
fr-deny-access
- Jaringan:
lb-network
- Prioritas:
100
- Direction of traffic: Egress
- Tindakan terhadap kecocokan: Tolak
- Targets: Tag target yang ditentukan
- Tag target:
TARGET_TAG
- Filter tujuan: Rentang IP
- Rentang IP tujuan:
10.1.2.99
- Protokol dan port:
- Pilih Specified protocols and ports.
- Pilih kotak centang tcp, lalu masukkan
80
untuk nomor port.
- Nama:
Klik Buat.
Beberapa aturan firewall keluar
Pendekatan yang lebih skalabel melibatkan penetapan dua aturan. Aturan default berprioritas rendah yang membatasi semua klien mengakses VIP load balancer. Aturan kedua dengan prioritas lebih tinggi yang mengizinkan subset klien yang diberi tag untuk mengakses VIP load balancer. Hanya VM yang diberi tag yang dapat mengakses VIP.
Di konsol Google Cloud , buka halaman Firewall rules.
Klik Create firewall rule untuk membuat aturan prioritas yang lebih rendah guna menolak akses secara default:
- Nama:
fr-deny-all-access-low-priority
- Jaringan:
lb-network
- Prioritas:
200
- Direction of traffic: Egress
- Tindakan terhadap kecocokan: Tolak
- Targets: Tag target yang ditentukan
- Tag target:
TARGET_TAG
- Filter tujuan: Rentang IP
- Rentang IP tujuan:
10.1.2.99
- Protokol dan port:
- Pilih Specified protocols and ports.
- Pilih kotak centang TCP, lalu masukkan
80
untuk nomor port.
- Nama:
Klik Buat.
Klik Create firewall rule untuk membuat aturan prioritas yang lebih tinggi guna mengizinkan traffic dari instance tertentu yang diberi tag.
- Nama:
fr-allow-some-access-high-priority
- Jaringan:
lb-network
- Prioritas:
100
- Direction of traffic: Egress
- Tindakan terhadap kecocokan: Izinkan
- Targets: Tag target yang ditentukan
- Tag target:
TARGET_TAG
- Filter tujuan: Rentang IP
- Rentang IP tujuan:
10.1.2.99
- Protokol dan port:
- Pilih Specified protocols and ports.
- Pilih kotak centang TCP, lalu masukkan
80
untuk nomor port.
- Nama:
Klik Buat.
gcloud
Untuk mengidentifikasi VM klien, beri tag pada
VM tertentu yang ingin Anda batasi. Kemudian, tambahkan tag ke kolom TARGET_TAG
dalam langkah-langkah ini.
Gunakan satu aturan firewall atau beberapa aturan untuk menyiapkannya.
Aturan firewall keluar tunggal
Anda dapat mengonfigurasi satu aturan keluar firewall untuk menolak semua traffic keluar yang berasal dari VM klien yang diberi tag ke VIP load balancer.
gcloud compute firewall-rules create fr-deny-access \ --network=lb-network \ --action=deny \ --direction=egress \ --rules=tcp \ --priority=100 \ --destination-ranges=10.1.2.99 \ --target-tags=TARGET_TAG
Beberapa aturan firewall keluar
Pendekatan yang lebih skalabel melibatkan penetapan dua aturan: aturan default berprioritas rendah yang membatasi semua klien agar tidak mengakses VIP load balancer, dan aturan kedua berprioritas lebih tinggi yang mengizinkan subset klien yang diberi tag untuk mengakses VIP load balancer. Hanya VM yang diberi tag yang dapat mengakses VIP.
Buat aturan berprioritas lebih rendah:
gcloud compute firewall-rules create fr-deny-all-access-low-priority \ --network=lb-network \ --action=deny \ --direction=egress \ --rules=tcp \ --priority=200 \ --destination-ranges=10.1.2.99
Buat aturan prioritas yang lebih tinggi:
gcloud compute firewall-rules create fr-allow-some-access-high-priority \ --network=lb-network \ --action=allow \ --direction=egress \ --rules=tcp \ --priority=100 \ --destination-ranges=10.1.2.99 \ --target-tags=TARGET_TAG
Untuk menggunakan akun layanan, bukan tag, guna mengontrol akses, gunakan
opsi --target-service-accounts
, bukan flag --target-tags
saat membuat aturan firewall.
Menskalakan akses terbatas ke backend Load Balancer Aplikasi internal berdasarkan subnet
Mempertahankan aturan firewall terpisah atau menambahkan alamat IP yang di-load balance baru ke aturan yang ada seperti yang dijelaskan di bagian sebelumnya menjadi tidak praktis seiring bertambahnya jumlah aturan penerusan. Salah satu cara untuk mencegah hal ini adalah dengan mengalokasikan alamat IP aturan penerusan dari subnet yang dicadangkan. Kemudian, traffic dari instance atau akun layanan yang diberi tag dapat diizinkan atau diblokir dengan menggunakan subnet yang dicadangkan sebagai rentang tujuan untuk aturan firewall. Dengan begitu, Anda dapat mengontrol akses ke grup VIP aturan penerusan secara efektif tanpa harus mempertahankan aturan traffic keluar firewall per-VIP.
Berikut adalah langkah-langkah umum untuk menyiapkannya, dengan asumsi bahwa Anda akan membuat semua resource load balancer lain yang diperlukan secara terpisah.
gcloud
Buat subnet regional yang akan digunakan untuk mengalokasikan alamat IP yang di-load balance untuk aturan penerusan:
gcloud compute networks subnets create l7-ilb-restricted-subnet \ --network=lb-network \ --region=us-west1 \ --range=10.127.0.0/24
Buat aturan penerusan yang mengambil alamat dari subnet. Contoh berikut menggunakan alamat
10.127.0.1
dari subnet yang dibuat pada langkah sebelumnya.gcloud compute forwarding-rules create l7-ilb-forwarding-rule-restricted \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=lb-network \ --subnet=l7-ilb-restricted-subnet \ --address=10.127.0.1 \ --ports=80 \ --global \ --target-http-proxy=gil7-http-proxy
Buat aturan firewall untuk membatasi traffic yang ditujukan ke rentang alamat IP di subnet aturan penerusan (
l7-ilb-restricted-subnet
):gcloud compute firewall-rules create restrict-traffic-to-subnet \ --network=lb-network \ --action=deny \ --direction=egress \ --rules=tcp:80 \ --priority=100 \ --destination-ranges=10.127.0.0/24 \ --target-tags=TARGET_TAG
Menggunakan alamat IP yang sama di antara beberapa aturan penerusan internal
Agar beberapa aturan penerusan internal dapat berbagi alamat IP internal yang sama,
Anda harus mencadangkan alamat IP dan menetapkan tanda --purpose
-nya ke
SHARED_LOADBALANCER_VIP
.
gcloud
gcloud compute addresses create SHARED_IP_ADDRESS_NAME \ --region=REGION \ --subnet=SUBNET_NAME \ --purpose=SHARED_LOADBALANCER_VIP
Mengonfigurasi kebijakan pemilihan rute DNS
Jika klien Anda berada di beberapa region, Anda dapat membuat Load Balancer Aplikasi internal lintas region dapat diakses dengan menggunakan VIP di region tersebut. Penyiapan multi-region ini meminimalkan latensi dan biaya transit jaringan. Selain itu, Anda dapat menyiapkan solusi load balancing global berbasis DNS yang memberikan ketahanan terhadap pemadaman layanan regional. Untuk mengetahui informasi selengkapnya, lihat Mengelola kebijakan pemilihan rute DNS dan health check.
gcloud
Untuk membuat entri DNS dengan TTL 30 detik, gunakan
perintah gcloud dns record-sets create
.
gcloud dns record-sets create DNS_ENTRY --ttl="30" \ --type="A" --zone="service-zone" \ --routing-policy-type="GEO" \ --routing-policy-data="REGION_A=gil7-forwarding-rule-a@global;REGION_B=gil7-forwarding-rule-b@global" \ --enable-health-checking
Ganti kode berikut:
DNS_ENTRY
: DNS atau nama domain set dataContoh,
service.example.com
REGION_A
danREGION_B
: region tempat Anda telah mengonfigurasi load balancer
API
Buat data DNS dengan membuat permintaan POST
ke metode ResourceRecordSets.create
.
Ganti PROJECT_ID dengan project ID Anda.
POST https://www.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/SERVICE_ZONE/rrsets { "name": "DNS_ENTRY", "type": "A", "ttl": 30, "routingPolicy": { "geo": { "items": [ { "location": "REGION_A", "healthCheckedTargets": { "internalLoadBalancers": [ { "loadBalancerType": "globalL7ilb", "ipAddress": "IP_ADDRESS", "port": "80", "ipProtocol": "tcp", "networkUrl": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "project": "PROJECT_ID" } ] } }, { "location": "REGION_B", "healthCheckedTargets": { "internalLoadBalancers": [ { "loadBalancerType": "globalL7ilb", "ipAddress": "IP_ADDRESS_B", "port": "80", "ipProtocol": "tcp", "networkUrl": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "project": "PROJECT_ID" } ] } } ] } } }
Memperbarui waktu tunggu keep-alive HTTP klien
Load balancer yang dibuat pada langkah sebelumnya telah dikonfigurasi dengan nilai default untuk waktu tunggu keep-alive HTTP klien.Untuk memperbarui waktu tunggu keep-alive HTTP klien, gunakan petunjuk berikut.
Konsol
Di konsol Google Cloud , buka halaman Load balancing.
- Klik nama load balancer yang ingin Anda ubah.
- Klik Edit.
- Klik Frontend configuration.
- Luaskan Fitur lanjutan. Untuk HTTP keepalive timeout, masukkan nilai waktu tunggu.
- Klik Perbarui.
- Untuk meninjau perubahan, klik Tinjau dan selesaikan, lalu klik Perbarui.
gcloud
Untuk load balancer HTTP, perbarui proxy HTTP target menggunakan
perintah gcloud compute target-http-proxies update
:
gcloud compute target-http-proxies update TARGET_HTTP_PROXY_NAME \ --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \ --global
Untuk load balancer HTTPS, perbarui proxy HTTPS target menggunakan
perintah gcloud compute target-https-proxies update
:
gcloud compute target-https-proxies update TARGET_HTTPS_PROXY_NAME \ --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \ --global
Ganti kode berikut:
TARGET_HTTP_PROXY_NAME
: nama proxy HTTP target.TARGET_HTTPS_PROXY_NAME
: nama proxy HTTPS target.HTTP_KEEP_ALIVE_TIMEOUT_SEC
: nilai waktu tunggu HTTP keep-alive dari 5 hingga 600 detik.
Mengaktifkan deteksi pencilan
Anda dapat mengaktifkan deteksi pencilan pada layanan backend global untuk mengidentifikasi NEG tanpa server yang tidak responsif dan mengurangi jumlah permintaan yang dikirim ke NEG tanpa server yang tidak responsif.
Deteksi pencilan diaktifkan pada layanan backend menggunakan salah satu metode berikut:
- Metode
consecutiveErrors
(outlierDetection.consecutiveErrors
), yang di dalamnya kode status HTTP seri5xx
memenuhi syarat sebagai error. - Metode
consecutiveGatewayFailure
(outlierDetection.consecutiveGatewayFailure
), yang hanya kode status HTTP502
,503
, dan504
yang memenuhi syarat sebagai error.
Gunakan langkah-langkah berikut untuk mengaktifkan deteksi pencilan untuk layanan backend yang ada. Perhatikan bahwa meskipun setelah mengaktifkan deteksi pencilan, beberapa permintaan dapat dikirim ke layanan yang tidak responsif dan menampilkan kode status 5xx
ke klien. Untuk lebih mengurangi rasio error, Anda dapat mengonfigurasi nilai yang lebih agresif untuk parameter deteksi pencilan. Untuk mengetahui informasi selengkapnya, lihat kolom
outlierDetection
.
Konsol
Di konsol Google Cloud , buka halaman Load balancing.
Klik nama load balancer yang layanan backend-nya ingin Anda edit.
Di halaman Load balancer details, klik
Edit.Di halaman Edit cross-region internal Application Load Balancer, klik Backend configuration.
Di halaman Backend configuration, klik
Edit untuk layanan backend yang ingin Anda ubah.Scroll ke bawah dan luaskan bagian Konfigurasi lanjutan.
Di bagian Deteksi pencilan, centang kotak Aktifkan.
Klik
Edit untuk mengonfigurasi deteksi anomali.Verifikasi bahwa opsi berikut dikonfigurasi dengan nilai ini:
Properti Nilai Error berturut-turut 5 Interval 1000 Waktu ejeksi dasar 30000 Maks persentase ejeksi 50 Error berturut-turut yang berlaku 100 Dalam contoh ini, analisis deteksi pencilan berjalan setiap satu detik. Jika jumlah kode status HTTP
5xx
berturut-turut yang diterima oleh proxy Envoy adalah lima atau lebih, endpoint backend akan dikeluarkan dari kumpulan penyeimbangan beban proxy Envoy tersebut selama 30 detik. Jika persentase penerapan ditetapkan ke 100%, layanan backend akan menerapkan penghapusan endpoint yang tidak responsif dari kumpulan load balancing proxy Envoy tertentu setiap kali analisis deteksi outlier berjalan. Jika kondisi pengeluaran terpenuhi, hingga 50% endpoint backend dari kumpulan load balancing dapat dikeluarkan.Klik Simpan.
Untuk memperbarui layanan backend, klik Update.
Untuk memperbarui load balancer, di halaman Edit cross-region internal Application Load Balancer, klik Update.
gcloud
Ekspor layanan backend ke file YAML.
gcloud compute backend-services export BACKEND_SERVICE_NAME \ --destination=BACKEND_SERVICE_NAME.yaml --global
Ganti
BACKEND_SERVICE_NAME
dengan nama layanan backend.Edit konfigurasi YAML layanan backend untuk menambahkan kolom deteksi anomali seperti yang ditandai dalam konfigurasi YAML berikut, di bagian
outlierDetection
:Dalam contoh ini, analisis deteksi pencilan berjalan setiap satu detik. Jika jumlah kode status HTTP
5xx
berturut-turut yang diterima oleh proxy Envoy adalah lima atau lebih, endpoint backend akan dikeluarkan dari kumpulan penyeimbangan beban proxy Envoy tersebut selama 30 detik. Jika persentase penerapan ditetapkan ke 100%, layanan backend akan menerapkan penghapusan endpoint yang tidak responsif dari kumpulan load balancing proxy Envoy tertentu setiap kali analisis deteksi outlier berjalan. Jika kondisi pengeluaran terpenuhi, hingga 50% endpoint backend dari kumpulan load balancing dapat dikeluarkan.name: BACKEND_SERVICE_NAME backends: - balancingMode: UTILIZATION capacityScaler: 1.0 group: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_A/networkEndpointGroups/SERVERLESS_NEG_NAME - balancingMode: UTILIZATION capacityScaler: 1.0 group: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_B/networkEndpointGroups/SERVERLESS_NEG_NAME_2 outlierDetection: baseEjectionTime: nanos: 0 seconds: 30 consecutiveErrors: 5 enforcingConsecutiveErrors: 100 interval: nanos: 0 seconds: 1 maxEjectionPercent: 50 port: 80 selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE_NAME sessionAffinity: NONE timeoutSec: 30 ...
Ganti kode berikut:
BACKEND_SERVICE_NAME
: nama layanan backendPROJECT_ID
: ID project AndaREGION_A
danREGION_B
: region tempat load balancer telah dikonfigurasi.SERVERLESS_NEG_NAME
: nama NEG serverless pertamaSERVERLESS_NEG_NAME_2
: nama NEG serverless kedua
Perbarui layanan backend dengan mengimpor konfigurasi terbaru.
gcloud compute backend-services import BACKEND_SERVICE_NAME \ --source=BACKEND_SERVICE_NAME.yaml --global
Deteksi pencilan kini diaktifkan di layanan backend.
Langkah berikutnya
- Mengonversi Load Balancer Aplikasi ke IPv6
- Ringkasan Load Balancer Aplikasi Internal
- Subnet khusus proxy untuk load balancer berbasis Envoy
- Mengelola sertifikat
- Membersihkan penyiapan load balancing