Dokumen ini berisi petunjuk cara mengonfigurasi Load Balancer Jaringan proxy internal lintas region untuk layanan Anda yang dijalankan di VM Compute Engine.
Sebelum memulai
Sebelum mengikuti panduan ini, biasakan diri Anda dengan hal-hal berikut:
Izin
Untuk mengikuti panduan ini, Anda harus dapat membuat instance dan mengubah jaringan dalam sebuah 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 | Admin Jaringan Compute |
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 Load Balancer Jaringan proxy internal lintas region di jaringan VPC, dengan satu layanan backend dan dua grup instance terkelola (MIG) backend di region REGION_A
dan REGION_B
.
Diagram menampilkan 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 Jaringan proxy internal lintas region. Subnet khusus proxy region dibagikan ke semua Load Balancer Jaringan proxy internal lintas region di region tersebut. Alamat sumber paket yang dikirim dari load balancer ke backend layanan dialokasikan dari subnet khusus proxy. Dalam contoh ini, subnet khusus proxy untuk region
REGION_B
memiliki rentang alamat IP utama10.129.0.0/23
, dan untukREGION_A
, 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 mengalami gangguan, traffic akan gagal ke region lain.Layanan backend global yang memantau penggunaan dan kondisi backend.
Proxy TCP target global, yang menerima permintaan dari pengguna dan meneruskannya ke layanan backend.
Aturan penerusan global, yang memiliki alamat IP internal regional dari load balancer Anda dan dapat meneruskan setiap permintaan yang 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 dan menetapkan flag
--purpose
-nya keGLOBAL_MANAGED_PROXY
. - Jika Anda ingin menggunakan alamat IP internal yang sama dengan beberapa aturan penerusan, tetapkan flag
--purpose
alamat IP keSHARED_LOADBALANCER_VIP
.
Mengonfigurasi jaringan dan subnet
Dalam jaringan VPC, konfigurasikan subnet di setiap region tempat backend Anda dikonfigurasi. Selain itu, konfigurasikan proxy-only-subnet
di setiap region tempat Anda ingin mengonfigurasi load balancer.
Contoh ini menggunakan jaringan, region, dan subnet VPC berikut:
Jaringan. Jaringan 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 Konsol Google Cloud, buka halaman jaringan VPC.
Klik Create VPC network.
Berikan Nama untuk jaringan.
Di bagian Subnets, tetapkan Subnet creation mode ke Custom.
Buat subnet untuk backend load balancer. Di bagian Subnet baru, masukkan informasi berikut:
- Berikan Name untuk subnet.
- Pilih Wilayah: REGION_A
- Masukkan rentang alamat IP:
10.1.2.0/24
Klik Done.
Klik Tambahkan subnet.
Buat subnet untuk backend load balancer. Di bagian New subnet, masukkan informasi berikut:
- Berikan Name untuk subnet.
- Pilih Wilayah: REGION_B
- Masukkan rentang alamat IP:
10.1.3.0/24
Klik Done.
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", }
Mengonfigurasi subnet khusus proxy
Subnet khusus proxy memberikan sekumpulan alamat IP yang digunakan Google Cloud untuk menjalankan proxy Envoy atas nama Anda. Proxy tersebut menghentikan koneksi dari klien dan membuat koneksi baru ke backend.
Subnet khusus proxy ini digunakan oleh semua load balancing 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, gunakan langkah-langkah berikut:
Di Konsol Google Cloud, buka halaman jaringan VPC.
- Klik nama jaringan VPC.
- Pada tab Subnet, klik Add subnet.
- Berikan Nama untuk subnet khusus proxy.
- Pilih Wilayah: REGION_A
- Dalam daftar Destination, pilih Cross-region Managed Proxy.
- Di kolom Rentang alamat IP, masukkan
10.129.0.0/23
. - Klik Tambahkan.
Buat subnet khusus proxy di REGION_B
- Pada tab Subnet, klik Add subnet.
- Berikan Nama untuk subnet khusus proxy.
- Pilih Wilayah: REGION_B
- Dalam daftar Destination, pilih Cross-region Managed Proxy.
- Di kolom Rentang alamat IP, 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
, yang menggantikan
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 masuk, berlaku untuk instance yang sedang di-load balanced, yang memungkinkan konektivitas SSH yang masuk di port TCP22
dari alamat apa pun. Anda dapat memilih rentang alamat IP sumber yang lebih ketat untuk aturan ini. Misalnya, Anda dapat menentukan hanya rentang alamat IP di sistem tempat Anda memulai sesi SSH. Contoh ini menggunakan tag targetallow-ssh
untuk mengidentifikasi VM yang menerapkan aturan firewall.fw-healthcheck
. Aturan ingress, berlaku untuk instance yang di-load balanced, yang memungkinkan semua traffic TCP dari sistem health check Google Cloud (di130.211.0.0/22
dan35.191.0.0/16
). Contoh ini menggunakan tag targetload-balanced-backend
untuk mengidentifikasi VM yang menjadi tempat penerapan aturan firewall.fw-backends
. Aturan ingress, yang berlaku untuk instance yang sedang di-load balanced, yang memungkinkan traffic TCP pada port80
,443
, dan8080
dari proxy yang dikelola Load Balancer Jaringan proxy 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.
Tag target menentukan instance backend. Tanpa tag target, aturan firewall akan berlaku untuk semua backend instance 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 akan mengizinkan koneksi SSH yang masuk:
- Name:
fw-ilb-to-backends
- Jaringan: NETWORK
- Arah traffic: Ingress
- Tindakan jika 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.
- Name:
Klik Create.
Klik Create firewall rule untuk kedua kalinya guna membuat aturan guna mengizinkan health check Google Cloud:
- Name:
fw-healthcheck
- Jaringan: NETWORK
- Arah traffic: Ingress
- Tindakan jika 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
Protokol dan port:
- 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 pada port80
untuk menghubungi VM Anda, tetapi tidak dapat menggunakan HTTPS pada port443
untuk menghubungi VM.
- Name:
Klik Create.
Klik Create firewall rule untuk ketiga kalinya guna membuat aturan agar server proxy load balancer dapat menghubungkan backend:
- Name:
fw-backends
- Jaringan: NETWORK
- Arah traffic: Ingress
- Tindakan jika 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.
- Name:
Klik Create.
gcloud
Buat aturan firewall
fw-ilb-to-backends
untuk mengizinkan konektivitas SSH ke VM dengan tag jaringanallow-ssh
. Saat 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 Jaringan proxy 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
API
Buat aturan firewall fw-ilb-to-backends
dengan membuat permintaan POST
ke metode firewalls.insert
, yang mengganti 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
, yang mengganti 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
, yang 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 dari contoh Load Balancer Jaringan proxy 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 balanced ke server backend. Untuk tujuan demonstrasi, backend menyediakan nama host-nya sendiri.
Konsol
Di Konsol Google Cloud, buka halaman Instance templates.
- Klik Create instance template.
- Untuk Name, masukkan
gil4-backendeast1-template
. - Pastikan Boot disk disetel ke image Debian, seperti Debian GNU/Linux 10 (buster). Petunjuk ini menggunakan perintah yang
hanya tersedia di Debian, seperti
apt-get
. - Klik Advanced options.
- Klik Networking dan konfigurasikan 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 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 Create.
Klik Create instance template.
Untuk Name, masukkan
gil4-backendwest1-template
.Pastikan Boot disk disetel ke image Debian, seperti Debian GNU/Linux 10 (buster). Petunjuk ini menggunakan perintah yang hanya tersedia di Debian, seperti
apt-get
.Klik Advanced options.
Klik Networking dan konfigurasikan 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 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 Create.
Di Konsol Google Cloud, buka halaman Instance groups.
- Klik Create grup instance.
- 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
gil4-backendwest1-template
. Tentukan jumlah instance yang ingin Anda buat dalam grup.
Untuk contoh ini, tentukan opsi berikut di bagian Autoscaling:
- 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 secara otomatis menambahkan atau menghapus instance berdasarkan penggunaan CPU instance.
- Untuk Autoscaling mode, pilih
Klik Create.
Klik Create grup instance.
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
gil4-backendeast1-template
.Tentukan jumlah instance yang ingin Anda buat dalam grup.
Untuk contoh ini, tentukan opsi berikut di bagian Autoscaling:
- 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 secara otomatis menambahkan atau menghapus instance berdasarkan penggunaan CPU instance.
- Untuk Autoscaling mode, pilih
Klik Create.
gcloud
Petunjuk gcloud CLI dalam panduan ini mengasumsikan bahwa Anda menggunakan Cloud Shell atau lingkungan lain yang telah menginstal bash.
Buat template instance VM dengan server HTTP menggunakan perintah
gcloud compute instance-templates create
.gcloud compute instance-templates create gil4-backendwest1-template \ --region=REGION_A \ --network=NETWORK \ --subnet=SUBNET_A \ --tags=allow-ssh,load-balanced-backend \ --image-family=debian-10 \ --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 gil4-backendeast1-template \ --region=REGION_B \ --network=NETWORK \ --subnet=SUBNET_B \ --tags=allow-ssh,load-balanced-backend \ --image-family=debian-10 \ --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 dalam 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=gil4-backendwest1-template
gcloud compute instance-groups managed create gl7-ilb-mig-b \ --zone=ZONE_B \ --size=2 \ --template=gil4-backendeast1-template
API
Buat template instance dengan metode instanceTemplates.insert
, dengan mengganti PROJECT_ID
dengan project ID Anda.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates { "name":"gil4-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-10" }, "autoDelete":true } ] } }
Buat grup instance terkelola di setiap zona dengan metode instanceGroupManagers.insert
, yang mengganti 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/gil4-backendwest1-template", "baseInstanceName": "gl4-ilb-migb", "targetSize": 2 }
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates { "name":"gil4-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-10" }, "autoDelete":true } ] } }
Buat grup instance terkelola di setiap zona dengan metode instanceGroupManagers.insert
, yang mengganti 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_A", "instanceTemplate": "projects/PROJECT_ID/global/instanceTemplates/gil4-backendwest1-template", "baseInstanceName": "gl4-ilb-migb", "targetSize": 2 }
Mengonfigurasi load balancer
Contoh ini menunjukkan cara membuat resource Load Balancer Jaringan proxy internal lintas region berikut:
- Health check TCP global.
- Layanan backend global dengan MIG yang sama dengan backend.
- 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.
Ketersediaan proxy
Terkadang region Google Cloud tidak memiliki kapasitas proxy yang cukup untuk load balancer baru. Jika hal ini terjadi, Google Cloud Console akan memberikan pesan peringatan ketersediaan proxy saat Anda membuat load balancer. Untuk mengatasi masalah ini, Anda dapat melakukan salah satu tindakan berikut:
- Pilih region lain untuk load balancer Anda. Ini bisa menjadi opsi praktis jika Anda memiliki backend di region lain.
- Pilih jaringan VPC yang sudah memiliki alokasi subnet khusus proxy.
Tunggu hingga masalah kapasitas selesai.
Konsol
Memulai konfigurasi Anda
Di Konsol Google Cloud, buka halaman Load balancing.
- Klik Create load balancer.
- Untuk Type of load balancer, pilih Network Load Balancer (TCP/UDP/SSL), lalu klik Next.
- Untuk Proxy or passthrough, pilih Proxy load balancer, lalu klik Next.
- Untuk Terhadap publik atau internal, pilih Internal, lalu klik Berikutnya.
- Untuk Cross-region or single region deployment, pilih Best for cross-region working, lalu klik Next.
- Klik Konfigurasikan.
Konfigurasi dasar
- Berikan Nama untuk load balancer.
- Untuk Network, pilih NETWORK.
Mengonfigurasi frontend dengan dua aturan penerusan
- Klik Frontend configuration.
- Berikan Nama aturan penerusan.
- Dalam daftar Subnetwork region, pilih REGION_A.
Mencadangkan subnet khusus proxy
- Dalam daftar Subnetwork, pilih SUBNET_A.
- Dalam daftar Alamat IP, klik Buat alamat IP. Halaman Reserve a static internal IP address akan terbuka.
- Berikan Nama untuk alamat IP statis.
- Dalam daftar Alamat IP statis, pilih Biarkan saya pilih.
- Di kolom Alamat IP khusus, masukkan
10.1.2.99
. - Pilih Reserve.
- Klik Done.
- Untuk menambahkan aturan penerusan kedua, klik Tambahkan IP dan port frontend.
- Berikan Nama aturan penerusan.
- Dalam daftar Subnetwork region, pilih REGION_B.
Mencadangkan subnet khusus proxy
- Dalam daftar Subnetwork, pilih SUBNET_B.
- Dalam daftar Alamat IP, klik Buat alamat IP. Halaman Reserve a static internal IP address akan terbuka.
- Berikan Nama untuk alamat IP statis.
- Dalam daftar Alamat IP statis, pilih Biarkan saya pilih.
- Di kolom Alamat IP khusus, masukkan
10.1.3.99
. - Pilih Reserve.
- Klik Done.
- Klik Backend configuration.
- Dalam daftar Create or select backend services, klik Create a backend service.
- Berikan Nama untuk layanan backend.
- Untuk Protocol, pilih TCP.
- Untuk Port Bernama, masukkan
http
. - Dalam daftar Backend type, pilih Instance group.
- Di bagian New backend:
- Dalam daftar Instance group, pilih
gl7-ilb-mig-a
di REGION_A. - Setel Transfer nomor ke
80
. - Klik Done.
- Untuk menambahkan backend lain, klik Add backend.
- Dalam daftar Instance group, pilih
gl7-ilb-mig-b
di REGION_B. - Setel Transfer nomor ke
80
. - Klik Done.
- Di daftar Health check, klik Create a health check.
- Di kolom Name, masukkan
global-http-health-check
. - Setel Protocol ke
HTTP
. - Tetapkan Port ke
80
. - Klik Save.
Meninjau konfigurasi
- Klik Review and finalize.
- Tinjau setelan konfigurasi load balancer Anda.
- Klik Create.
gcloud
Tentukan health check TCP dengan perintah
gcloud compute health-checks create tcp
.gcloud compute health-checks create tcp global-health-check \ --use-serving-port \ --global
Tentukan layanan backend dengan perintah
gcloud compute backend-services create
.gcloud compute backend-services create gl4-gilb-backend-service \ --load-balancing-scheme=INTERNAL_MANAGED \ --protocol=TCP \ --enable-logging \ --logging-sample-rate=1.0 \ --health-checks=global-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 gl4-gilb-backend-service \ --balancing-mode=CONNECTION \ --max-connections=50 \ --instance-group=gl4-ilb-migb \ --instance-group-zone=ZONE_A \ --global
gcloud compute backend-services add-backend gl4-gilb-backend-service \ --balancing-mode=CONNECTION \ --max-connections=50 \ --instance-group=gl4-ilb-migb \ --instance-group-zone=ZONE_B \ --global
Buat proxy target.
Buat proxy target dengan perintah
gcloud compute target-tcp-proxies create
.gcloud compute target-tcp-proxies create gilb-tcp-proxy \ --backend-service=gl4-gilb-backend-service \ --global
Buat dua aturan penerusan, satu dengan VIP (10.1.2.99) di
REGION_B
dan satu lagi dengan VIP (10.1.3.99) diREGION_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.
Gunakan perintah
gcloud compute forwarding-rules create
dengan tanda yang benar.gcloud compute forwarding-rules create gil4forwarding-rule-a \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=NETWORK \ --subnet=SUBNET_A \ --subnet-region=REGION_A \ --address=10.1.2.99 \ --ports=80 \ --target-tcp-proxy=gilb-tcp-proxy \ --global
gcloud compute forwarding-rules create gil4forwarding-rule-b \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=NETWORK \ --subnet=SUBNET_B \ --subnet-region=REGION_B \ --address=10.1.3.99 \ --ports=80 \ --target-tcp-proxy=gilb-tcp-proxy \ --global
API
Buat health check dengan membuat permintaan POST
ke metode healthChecks.insert
, yang mengganti PROJECT_ID
dengan project ID Anda.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/healthChecks { "name": "global-health-check", "type": "TCP", "httpHealthCheck": { "portSpecification": "USE_SERVING_PORT" } }
Buat layanan backend global dengan membuat permintaan POST
ke metode backendServices.insert
, yang mengganti PROJECT_ID
dengan project ID Anda.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices { "name": "gl4-gilb-backend-service", "backends": [ { "group": "projects/PROJECT_ID/zones/ZONE_A/instanceGroups/gl4-ilb-migb", "balancingMode": "CONNECTION" }, { "group": "projects/PROJECT_ID/zones/ZONE_B/instanceGroups/gl4-ilb-migb", "balancingMode": "CONNECTION" } ], "healthChecks": [ "projects/PROJECT_ID/regions/global/healthChecks/global-health-check" ], "loadBalancingScheme": "INTERNAL_MANAGED" }
Buat proxy TCP target dengan membuat permintaan POST
ke metode targetTcpProxies.insert
, yang mengganti PROJECT_ID
dengan project ID Anda.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/targetTcpProxy { "name": "l4-ilb-proxy", }
Buat aturan penerusan dengan membuat permintaan POST
ke metode forwardingRules.insert
, yang mengganti PROJECT_ID
dengan project ID Anda.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules { "name": "gil4forwarding-rule-a", "IPAddress": "10.1.2.99", "IPProtocol": "TCP", "portRange": "80-80", "target": "projects/PROJECT_ID/global/targetTcpProxies/l4-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": "gil4forwarding-rule-b", "IPAddress": "10.1.3.99", "IPProtocol": "TCP", "portRange": "80-80", "target": "projects/PROJECT_ID/global/targetTcpProxies/l4-ilb-proxy", "loadBalancingScheme": "INTERNAL_MANAGED", "subnetwork": "projects/PROJECT_ID/regions/REGION_B/subnetworks/SUBNET_B", "network": "projects/PROJECT_ID/global/networks/NETWORK", "networkTier": "PREMIUM" }
Buat aturan penerusan dengan membuat permintaan POST
ke metode globalForwardingRules.insert
, yang mengganti PROJECT_ID
dengan project ID Anda.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules { "name": "gil4forwarding-rule-a", "IPAddress": "10.1.2.99", "IPProtocol": "TCP", "portRange": "80-80", "target": "projects/PROJECT_ID/global/targetTcpProxies/l4-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": "gil4forwarding-rule-b", "IPAddress": "10.1.3.99", "IPProtocol": "TCP", "portRange": "80-80", "target": "projects/PROJECT_ID/global/targetTcpProxies/l4-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
Buat instance VM untuk menguji konektivitas
Buat VM klien di region
REGION_B
danREGION_A
:gcloud compute instances create l4-ilb-client-a \ --image-family=debian-10 \ --image-project=debian-cloud \ --network=NETWORK \ --subnet=SUBNET_A \ --zone=ZONE_A \ --tags=allow-ssh
gcloud compute instances create l4-ilb-client-b \ --image-family=debian-10 \ --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 l4-ilb-client-a --zone=ZONE_A
gcloud compute ssh l4-ilb-client-b --zone=ZONE_B
Memverifikasi bahwa alamat IP menampilkan nama host
Pastikan bahwa VM klien dapat menjangkau kedua alamat IP. Perintah akan berhasil dan menampilkan nama VM backend yang menyalurkan permintaan:
curl 10.1.2.99
curl 10.1.3.99
Menguji failover
Verifikasi failover ke backend di region
REGION_A
saat backend diREGION_B
tidak responsif atau tidak dapat dijangkau. Untuk menyimulasikan failover, hapus semua backend dariREGION_B
:gcloud compute backend-services remove-backend gl4-gilb-backend-service \ --instance-group=gl4-ilb-migb \ --instance-group-zone=ZONE_B \ --global
Hubungkan menggunakan SSH ke VM klien di
REGION_B
.gcloud compute ssh l4-ilb-client-b \ --zone=ZONE_B
Kirim permintaan ke alamat IP yang di-load balanced di region
REGION_B
. Output perintah menampilkan respons dari VM backend diREGION_A
:{ RESULTS= for i in {1..100} do RESULTS="$RESULTS:$(curl -k -s 'https://test.example.com:443' --connect-to test.example.com: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.
Protokol PROXY untuk menyimpan informasi koneksi klien
Load Balancer Jaringan proxy internal menghentikan koneksi TCP dari klien dan membuat koneksi baru ke instance VM. Secara default, informasi porta dan IP klien asli tidak dipertahankan.
Untuk menyimpan dan mengirim informasi koneksi asli ke instance Anda, aktifkan protokol PROXY (versi 1). Protokol ini mengirimkan header tambahan yang berisi alamat IP sumber, alamat IP tujuan, dan nomor port ke instance sebagai bagian dari permintaan.
Pastikan instance backend Load Balancer Jaringan proxy internal menjalankan server HTTP atau HTTPS yang mendukung header protokol PROXY. Jika server HTTP atau HTTPS tidak dikonfigurasi untuk mendukung header protokol PROXY, backend instance akan menampilkan respons kosong. Misalnya, protokol PROXY tidak berfungsi dengan software Server HTTP Apache. Anda dapat menggunakan perangkat lunak server web yang berbeda, seperti Nginx.
Jika menetapkan protokol PROXY untuk traffic pengguna, Anda juga harus menetapkannya untuk health check. Jika Anda memeriksa konten kondisi dan penayangan di port yang sama, tetapkan --proxy-header
health check agar cocok dengan setelan load balancer.
Header protokol PROXY biasanya berupa satu baris teks yang dapat dibaca pengguna dalam format berikut:
PROXY TCP4 <client IP> <load balancing IP> <source port> <dest port>\r\n
Berikut adalah contoh protokol PROXY:
PROXY TCP4 192.0.2.1 198.51.100.1 15221 110\r\n
Pada contoh sebelumnya, IP klien adalah 192.0.2.1
, IP load balancing adalah 198.51.100.1
, port klien adalah 15221
, dan port tujuannya adalah 110
.
Jika IP klien tidak diketahui, load balancer menghasilkan header protokol PROXY dalam format berikut:
PROXY UNKNOWN\r\n
Mengupdate header protokol PROXY untuk proxy TCP target
Contoh penyiapan load balancer di halaman ini menunjukkan cara mengaktifkan header protokol PROXY saat membuat Load Balancer Jaringan proxy internal. Gunakan langkah-langkah ini untuk mengubah header protokol PROXY untuk proxy TCP target yang ada.
Konsol
Di konsol Google Cloud, buka halaman Load balancing.
Klik
Edit untuk load balancer.Klik Frontend configuration.
Ubah nilai bidang Protokol proxy ke Aktif.
Klik Update untuk menyimpan perubahan.
gcloud
Dalam perintah berikut, edit kolom --proxy-header
dan tetapkan ke NONE
atau PROXY_V1
, bergantung pada kebutuhan Anda.
gcloud compute target-ssl-proxies update int-tcp-target-proxy \ --proxy-header=[NONE | PROXY_V1]
Gunakan alamat IP yang sama di antara beberapa aturan penerusan internal
Agar beberapa aturan penerusan internal dapat menggunakan alamat IP internal yang sama, Anda harus mencadangkan alamat IP dan menetapkan flag --purpose
ke SHARED_LOADBALANCER_VIP
.
gcloud
gcloud compute addresses create SHARED_IP_ADDRESS_NAME \ --region=REGION \ --subnet=SUBNET_NAME \ --purpose=SHARED_LOADBALANCER_VIP
Mengaktifkan afinitas sesi
Contoh konfigurasi ini akan membuat layanan backend tanpa afinitas sesi.
Prosedur ini menunjukkan cara mengupdate layanan backend untuk contoh load balancer, sehingga layanan backend menggunakan afinitas IP klien atau afinitas cookie yang dihasilkan.
Saat afinitas IP klien diaktifkan, load balancer akan mengarahkan permintaan klien tertentu ke VM backend yang sama berdasarkan hash yang dibuat dari alamat IP klien dan alamat IP load balancer (alamat IP internal dari aturan penerusan internal).
Konsol
Untuk mengaktifkan afinitas sesi IP klien:
- Di Konsol Google Cloud, buka halaman Load balancing.
Buka Load balancing - Click Backends.
- Klik nama layanan backend yang Anda buat untuk contoh ini dan klik Edit.
- Di halaman Backend service details, klik Advanced configuration.
- Di bagian Afinitas sesi, pilih IP Klien dari menu.
- Klik Perbarui.
gcloud
Gunakan perintah gcloud berikut untuk memperbarui layanan backend BACKEND_SERVICE
, dengan menentukan afinitas sesi IP klien:
gcloud compute backend-services update BACKEND_SERVICE \ --global \ --session-affinity=CLIENT_IP
Aktifkan pengosongan koneksi
Anda dapat mengaktifkan pengosongan koneksi pada layanan backend untuk memastikan gangguan yang minimal bagi pengguna saat instance yang menyalurkan traffic dihentikan, dihapus secara manual, atau dihapus oleh penskalaan otomatis. Untuk mempelajari lebih lanjut pengosongan koneksi, baca dokumentasi Mengaktifkan pengosongan koneksi.
Langkah selanjutnya
- Ringkasan Load Balancer Jaringan proxy internal.
- Subnet khusus proxy untuk load balancer berbasis Envoy.
- Bersihkan penyiapan load balancing.