Contoh ini mengasumsikan bahwa Anda memiliki beberapa server web yang berjalan di instance Compute Engine, dan menyeimbangkan koneksi TCP baru di antara server tersebut. Contoh ini menggunakan health check HTTP lama sehingga koneksi baru hanya dikirim ke VM backend yang sehat.
Sebelum memulai, baca Ringkasan Load Balancer Jaringan passthrough eksternal regional untuk mengetahui informasi konseptual tentang Load Balancer Jaringan passthrough eksternal regional.
Sebelum memulai
Instal Google Cloud CLI. Untuk mengetahui ringkasan lengkap alat ini,
lihat Panduan Alat gcloud. Anda dapat menemukan perintah terkait
load balancing di gcloud compute
grup perintah.
Anda juga bisa mendapatkan bantuan mendetail untuk perintah gcloud apa pun menggunakan flag --help:
gcloud compute http-health-checks create --help
Jika Anda belum pernah menjalankan Google Cloud CLI sebelumnya, jalankan
gcloud init terlebih dahulu untuk melakukan autentikasi.
Selain itu, Anda harus membuat alamat IP eksternal statis untuk load balancer. Jika Anda menggunakan image yang disediakan oleh Compute Engine, instance mesin virtual (VM) Anda akan otomatis dikonfigurasi untuk menangani alamat IP ini. Jika Anda menggunakan image lain, Anda harus mengonfigurasi alamat ini sebagai alias di eth0 atau sebagai loopback di setiap instance.
Panduan ini mengasumsikan bahwa Anda sudah memahami bash.
Mengonfigurasi instance VM Compute Engine
Untuk skenario load balancing ini, Anda akan membuat tiga instance VM Compute Engine dan menginstal Apache di instance tersebut. Anda akan menambahkan aturan firewall yang memungkinkan traffic HTTP menjangkau instance.
Instance yang berpartisipasi sebagai VM backend untuk Load Balancer Jaringan passthrough eksternal regional harus menjalankan Lingkungan Tamu Linux, Lingkungan Tamu Windows, atau proses lain yang menyediakan fungsi yang setara.
Menyiapkan instance backend
Konsol
Di Google Cloud konsol, buka halaman VM instances.
Klik Create instance.
Setel Name ke
www1.Setel Region ke us-central1.
Setel Zone ke us-central1-b.
Di bagian Boot disk, image OS default Debian GNU/Linux 12 (bookworm) sudah dipilih.
Klik Advanced options.
Klik Networking dan konfigurasi kolom berikut:
- Untuk Network tags, masukkan
network-lb-tag.
- Untuk Network tags, masukkan
Klik Management. Masukkan skrip berikut ke kolom Startup script.
#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www1</h1></body></html>' | tee /var/www/html/index.html
- Klik Create.
Buat instance bernama
www2dengan setelan yang sama, kecuali dengan skrip berikut yang dimasukkan ke kolom Automation, Startup script.#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www2</h1></body></html>' | tee /var/www/html/index.html
Buat instance bernama
www3dengan setelan yang sama, kecuali dengan skrip berikut yang dimasukkan ke kolom Automation, Startup script.#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www3</h1></body></html>' | tee /var/www/html/index.html
gcloud
Semua perintah di bawah ini dijalankan di sistem lokal Anda dan mengasumsikan perintah bash.
Untuk melihat nama, atribut, dan status image OS, gunakan perintah gcloud compute images list.
Buat tiga mesin virtual baru di zona tertentu dan berikan tag yang sama untuk semuanya. Contoh ini menetapkan zona ke us-central1-b. Dengan menyetel kolom
tags, Anda dapat merujuk semua instance ini sekaligus, seperti saat menggunakan aturan firewall. Perintah ini juga menginstal Apache di setiap instance dan memberi setiap instance halaman beranda yang unik.gcloud compute instances create www1 \ --image-family debian-12 \ --image-project debian-cloud \ --zone us-central1-b \ --tags network-lb-tag \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www1</h1></body></html>' | tee /var/www/html/index.html"gcloud compute instances create www2 \ --image-family debian-12 \ --image-project debian-cloud \ --zone us-central1-b \ --tags network-lb-tag \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www2</h1></body></html>' | tee /var/www/html/index.html"gcloud compute instances create www3 \ --image-family debian-12 \ --image-project debian-cloud \ --zone us-central1-b \ --tags network-lb-tag \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www3</h1></body></html>' | tee /var/www/html/index.html"
api
Buat instance www1 di zona us-central1-b dengan
instances.insert
metode
POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instances
{
"canIpForward": false,
"deletionProtection": false,
"disks": [
{
"type": "PERSISTENT",
"boot": true,
"mode": "READ_WRITE",
"autoDelete": true,
"deviceName": "www1",
"initializeParams": {
"sourceImage": "projects/debian-cloud/global/images/debian-12-buster-v20220719",
"diskType": "projects/[PROJECT_ID]/zones/us-central1-b/diskTypes/pd-standard",
"diskSizeGb": "10"
}
}
],
"machineType": "projects/[PROJECT_ID]/zones/us-central1-b/machineTypes/e2-standard-2",
"metadata": {
"items": [
{
"key": "startup-script",
"value": "sudo apt-get update\nsudo apt-get install apache2 -y\nsudo a2ensite default-ssl\nsudo a2enmod ssl\nsudo service apache2 restart\necho '<!doctype html><html><body><h1>www1</h1></body></html>' | tee /var/www/html/index.html"
}
]
},
"name": "www1",
"networkInterfaces": [
{
"network": "projects/[PROJECT_ID]/global/networks/default",
"subnetwork": "projects/[PROJECT_ID]/regions/us-central1/subnetworks/default"
}
],
"tags": {
"items": [
"network-lb-tag"
]
}
}
Buat instance bernama www2 dan www3 dengan setelan yang sama, kecuali ganti www1 di kolom deviceName, value, dan name.
Membuat aturan firewall untuk mengizinkan traffic eksternal ke instance VM ini
Konsol
Di konsol Google Cloud , buka halaman Firewall policies.
Klik Create firewall rule.
Masukkan Name
www-firewall-network-lb.Pilih Network tempat aturan firewall diterapkan (Default).
Di bagian Targets, pilih Specified target tags.
Di kolom Target tags, masukkan
network-lb-tag.Setel Source filter ke IPv4 ranges.
Setel Source IPv4 ranges ke
0.0.0.0/0, yang memungkinkan traffic dari sumber mana pun.Di bagian Specified protocols and ports, centang kotak TCP dan masukkan
80.Klik Create. Mungkin perlu waktu beberapa saat agar Konsol menampilkan aturan firewall baru, atau Anda mungkin harus mengklik Refresh untuk melihat aturan tersebut.
gcloud
gcloud compute firewall-rules create www-firewall-network-lb \
--target-tags network-lb-tag --allow tcp:80
api
Buat aturan firewall yang mengizinkan semua traffic dalam subnet dengan
firewalls.insert
** metode**
POST https://compute.googleapis.com/compute/projects/[PROJECT_ID]/global/firewalls
{
"name": "www-firewall-network-lb",
"direction": "INGRESS",
"priority": 1000,
"targetTags": [
"network-lb-tag"
],
"allowed": [
{
"IPProtocol": "tcp",
"ports": [
"80"
]
}
],
"sourceRanges": [
"0.0.0.0/0"
]
}
Mendapatkan alamat IP eksternal instance dan memverifikasi bahwa instance berjalan
Konsol
Di Google Cloud konsol, buka halaman VM instances.
Lihat alamat untuk instance Anda di kolom External IP.
Pastikan instance Anda berjalan dengan mencari tanda centang hijau di sebelah kiri nama instance. Jika Anda tidak melihat tanda centang hijau, lihat halaman Pemecahan Masalah Umum untuk instance.
gcloud
Buat daftar instance untuk mendapatkan alamat IP-nya dari kolom
EXTERNAL_IP.gcloud compute instances list
Pastikan setiap instance berjalan.
Di command line, jalankan
curlmenggunakan alamat IP eksternal setiap instance untuk mengonfirmasi bahwa semua instance merespons.curl http://[IP_ADDRESS]
api
Dapatkan informasi tentang instance www1 dengan
instances.get
metode
Pastikan kolom status menampilkan RUNNING, dan cari alamat IP eksternal di kolom natIP.
GET https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instances/www1
{
"kind": "compute#instance",
"id": "6734015273571474749",
"creationTimestamp": "2018-11-09T11:45:23.487-08:00",
"name": "www1",
"description": "",
"tags": {
"items": [
"network-lb-tag"
],
"fingerprint": "9GVlO4gPawg="
},
"machineType": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/machineTypes/e2-standard-2",
"status": "RUNNING",
"zone": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b",
"canIpForward": false,
"networkInterfaces": [
{
"kind": "compute#networkInterface",
"network": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/networks/default",
"subnetwork": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/subnetworks/default",
"networkIP": "10.128.0.2",
"name": "nic0",
"accessConfigs": [
{
"kind": "compute#accessConfig",
"type": "ONE_TO_ONE_NAT",
"name": "External NAT",
"natIP": "35.192.37.233",
"networkTier": "PREMIUM"
}
],
"fingerprint": "lxD5f5ua_sw="
}
],
"disks": [
{
"kind": "compute#attachedDisk",
"type": "PERSISTENT",
"mode": "READ_WRITE",
"source": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/disks/www1",
"deviceName": "www1",
"index": 0,
"boot": true,
"autoDelete": true,
"licenses": [
"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-12-buster"
],
"interface": "SCSI",
"guestOsFeatures": [
{
"type": "VIRTIO_SCSI_MULTIQUEUE"
}
]
}
],
"metadata": {
"kind": "compute#metadata",
"fingerprint": "IyHRmHoJx6E=",
"items": [
{
"key": "startup-script",
"value": "#! /bin/bash\n sudo apt-get update\n sudo apt-get install apache2 -y\n sudo service apache2 restart\n echo '\u003c!doctype html\u003e\u003chtml\u003e\u003cbody\u003e\u003ch1\u003ewww1\u003c/h1\u003e\u003c/body\u003e\u003c/html\u003e' | tee /var/www/html/index.html"
}
]
},
"serviceAccounts": [
{
"email": "674259759219-compute@developer.gserviceaccount.com",
"scopes": [
"https://www.googleapis.com/auth/devstorage.read_only",
"https://www.googleapis.com/auth/logging.write",
"https://www.googleapis.com/auth/monitoring.write",
"https://www.googleapis.com/auth/servicecontrol",
"https://www.googleapis.com/auth/service.management.readonly",
"https://www.googleapis.com/auth/trace.append"
]
}
],
"selfLink": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instances/www1",
"scheduling": {
"onHostMaintenance": "MIGRATE",
"automaticRestart": true,
"preemptible": false
},
"cpuPlatform": "Intel Haswell",
"labelFingerprint": "42WmSpB8rSM=",
"startRestricted": false,
"deletionProtection": false
}
Ulangi panggilan API ini untuk www2 dan www3.
Mengonfigurasi layanan load balancing
Selanjutnya, siapkan layanan load balancing.
Ketika mengonfigurasi layanan load balancing, instance mesin virtual akan menerima paket yang ditujukan untuk alamat IP eksternal statis yang dikonfigurasi. Jika Anda menggunakan image yang disediakan oleh Compute Engine, instance Anda akan otomatis dikonfigurasi untuk menangani alamat IP ini. Jika Anda menggunakan image lain, Anda harus mengonfigurasi alamat ini sebagai alias di eth0 atau sebagai loopback di setiap instance.
Konsol
Anda tidak dapat menggunakan Google Cloud konsol untuk membuat Load Balancer Jaringan passthrough eksternal regional berbasis kumpulan target. Sebagai gantinya, gunakan gcloud atau REST API.
gcloud
Buat alamat IP eksternal statis untuk load balancer
gcloud compute addresses create network-lb-ip-1 \ --region us-central1Tambahkan resource health check HTTP lama
Contoh ini menggunakan setelan default untuk mekanisme health check, tetapi Anda juga dapat menyesuaikan health check sendiri.
gcloud compute http-health-checks create basic-check
Tambahkan kumpulan target
Tambahkan kumpulan target di region yang sama dengan instance mesin virtual Anda. Gunakan health check yang dibuat pada langkah sebelumnya untuk kumpulan target ini.
gcloud compute target-pools create www-pool \ --region us-central1 --http-health-check basic-checkTambahkan instance ke kumpulan target
gcloud compute target-pools add-instances www-pool \ --instances www1,www2,www3 \ --instances-zone us-central1-bInstance dalam kumpulan target harus berada di region yang sama, tetapi dapat tersebar di berbagai zona di region yang sama. Misalnya, Anda dapat memiliki instance di zona
us-central1-fdan instance di zonaus-central1-bdalam satu kumpulan target karena berada di region yang sama,us-central1.Tambahkan aturan penerusan
Tambahkan aturan penerusan yang melayani atas nama alamat IP eksternal dan rentang port yang mengarah ke kumpulan target Anda. Untuk kolom
--address, gunakan alamat IP numerik atau nama yang sepenuhnya memenuhi syarat.gcloud compute forwarding-rules create www-rule \ --region us-central1 \ --ports 80 \ --address network-lb-ip-1 \ --target-pool www-pool
api
Buat alamat IP eksternal statis untuk load balancer
POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID/regions/us-central1/addresses { "name": "network-lb-ip-1" }Tambahkan health check HTTP lama
Contoh ini menggunakan setelan default untuk mekanisme health check, tetapi Anda juga dapat menyesuaikannya sendiri.
POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/httpHealthChecks { "name": "basic-check" }Tambahkan kumpulan target
Tambahkan kumpulan target di region yang sama dengan instance mesin virtual Anda. Gunakan health check yang dibuat pada langkah sebelumnya untuk kumpulan target ini.
POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/targetPools { "name": "www-pool", "healthChecks": [ "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/httpHealthChecks/basic-check" ] }Tambahkan instance ke kumpulan target
POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/targetPools/www-pool/addInstance { "instances": [ { "instance": "projects/[PROJECT_ID]/zones/us-central1-b/instances/www1" } ] }Ulangi panggilan API ini untuk instance
www2danwww3.Instance dalam kumpulan target harus berada di region yang sama, tetapi dapat tersebar di berbagai zona di region yang sama. Misalnya, Anda dapat memiliki instance di zona
us-central1-fdan instance di zonaus-central1-bdalam satu kumpulan target karena berada di region yang sama,us-central1.Tambahkan aturan penerusan
POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/forwardingRules { "name": "www-rule", "portRange": "80", "loadBalancingScheme": "EXTERNAL", "target": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/targetPools/www-network-lb" }
Mengirim traffic ke instance
Setelah layanan load balancing dikonfigurasi, Anda dapat mulai mengirimkan traffic ke aturan penerusan dan melihat traffic tersebar ke berbagai instance.
Mencari alamat IP eksternal aturan penerusan
Konsol
- Buka tab Forwarding Rules di halaman load balancing Advanced
di Google Cloud konsol.
Buka tab Forwarding Rules - Temukan
www-rule, aturan penerusan yang digunakan oleh load balancer. - Di kolom IP Address untuk
www-rule, perhatikan alamat IP eksternal yang tercantum.
gcloud
Masukkan perintah berikut untuk melihat alamat IP eksternal dari aturan penerusan www-rule yang digunakan oleh load balancer.
gcloud compute forwarding-rules describe www-rule --region us-central1
api
Lihat alamat IP eksternal aturan penerusan www-rule dengan
forwardingRules.get
metode
Pada output, cari kolom IPAddress.
GET https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/forwardingRules/www-rule
{
"kind": "compute#forwardingRule",
"id": "5133886346582800002",
"creationTimestamp": "2018-11-09T14:21:33.574-08:00",
"name": "www-rule",
"description": "",
"region": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1",
"IPAddress": "35.232.228.9",
"IPProtocol": "TCP",
"portRange": "80-80",
"target": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/targetPools/www-network-lb",
"selfLink": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/forwardingRules/www-rule",
"loadBalancingScheme": "EXTERNAL",
"networkTier": "PREMIUM"
}ICMP tidak didukung untuk instance backend
Load Balancer Jaringan passthrough eksternal regional tidak mengirimkan paket ICMP ke instance backend. Jika Anda mengirim paket ICMP, misalnya dengan ping atau traceroute, balasan tidak berasal dari instance backend load balancer.
Google Cloud Infrastruktur mungkin mengirim balasan ICMP, meskipun Anda memiliki aturan firewall yang melarang traffic ICMP pada instance backend load balancer. Perilaku ini tidak dapat diubah.
Menggunakan perintah curl untuk mengakses alamat IP eksternal
Respons dari perintah curl bergantian secara acak di antara tiga instance.
Jika respons Anda awalnya gagal, Anda mungkin perlu menunggu sekitar 30 detik agar konfigurasi dimuat sepenuhnya dan instance Anda ditandai sehat sebelum mencoba lagi:
$ while true; do curl -m1 IP_ADDRESS; done
Langkah berikutnya
- Untuk mempelajari cara Load Balancer Jaringan passthrough eksternal regional bekerja dengan kumpulan target, lihat Ringkasan Load Balancer Jaringan passthrough eksternal regional berbasis kumpulan target.
- Untuk mempelajari cara Load Balancer Jaringan passthrough eksternal regional bekerja dengan layanan backend regional, bukan kumpulan target, lihat hal berikut:
- Untuk mengonfigurasi perlindungan DDoS jaringan tingkat lanjut untuk Load Balancer Jaringan passthrough eksternal regional menggunakan Cloud Armor, lihat Mengonfigurasi perlindungan DDoS jaringan tingkat lanjut.
- Untuk mempelajari masalah dan solusinya saat menggunakan Load Balancer Jaringan passthrough eksternal regional untuk traffic UDP, lihat Menggunakan UDP dengan Load Balancer Jaringan passthrough eksternal regional.
- Untuk menghapus resource agar Anda tidak ditagih, lihat Membersihkan penyiapan load balancing.