Selamat malam!

Pada jurnal ini saya ingin berbagi mengenai langkah-langkah bagaimana membuat dan mengkonfigurasi load balancer di Google Cloud Platform. Goal pada jurnal ini adalah client akan secara bergantian mengakses ke dua vm website yang berbeda secara bergantian atau tergantung ketersediaan si website.

Langsung saja ya!

Pertama, set default untuk zona dan region pada cloud shell. Ini agar resource yang akan dibuat berada di zona yang sama. Serta buat file startup.sh untuk startup-script vm. File ini merupakan apa saja yang ingin dijalankan saat vm dibuat, terlihat akan menginstal nginx dan mengubah tampilan default website menjadi Welcome to Google Cloud Platform – $HOSTNAME . Hostname akan menyesuaikan hostname vm.

gcloud config set compute/zone {zona}
gcloud config set compute/region {region}

cat << EOF > startup.sh
#! /bin/bash
apt-get update
apt-get install -y nginx
service nginx start
sed -i -- 's/nginx/Google Cloud Platform - '"\$HOSTNAME"'/' /var/www/html/index.nginx-debian.html
EOF

Lalu buat instance-template bernama nginx-template dan gunakan file startup.sh tadi sebagai startup-script:

gcloud compute instance-templates create nginx-template \
--metadata-from-file startup-script=startup.sh

Buat target-pool bernama nginx-pool:

gcloud compute target-pools create nginx-pool

Lalu buat instance-group bernama nginx-group. Dalam grup instance ini akan dibuat vm sejumlah dua dan konfigurasi vm disesuaikan dengan template nginx-template yang dibuat sebelumnya.

gcloud compute instance-groups managed create nginx-group \
--base-instance-name nginx \
--size 2 \
--template nginx-template \
--target-pool nginx-pool

Verifikasi instance telah dalam keadaan running:

gcloud compute instances list

Lalu buat firewall-rules untuk allow ingress port 80:

gcloud compute firewall-rules create www-firewall --allow tcp:80

Selanjutnya buat forwarding-rules untuk target-pool nginx-pool yang telah dibuat. IP address dari forwarding-rules inilah yang akan digunakan client untuk mengakses website. Jadi, dua buah website akan diakses dari satu IP publik saja.

gcloud compute forwarding-rules create nginx-lb \
--region us-east1 \
--ports=80 \
--target-pool nginx-pool

Jangan lupa verifikasi:

gcloud compute forwarding-rules list

Lalu buat health-check. Ini digunakan oleh si load balancer untuk mengecek apakah website dalam keadaan OK (kode 200 OK) dan dapat diakses. Ketika health check mengecek website pertama dan statusnya bukan 200 OK, maka akses akan dialihkan ke website kedua.

gcloud compute http-health-checks create http-basic-check

Lalu atur set-named-port pada instance-group agar port 80 di allow.

gcloud compute instance-groups managed \
set-named-ports nginx-group \
--named-ports http:80

Buat backend service dan attach ke instance group:

gcloud compute backend-services create nginx-backend \
--protocol HTTP --http-health-checks http-basic-check --global
gcloud compute backend-services add-backend nginx-backend \
--instance-group nginx-group \
--instance-group-zone us-east1-b \
--global

Buat URL map bernama web-map:

gcloud compute url-maps create web-map \
--default-service nginx-backend

Buat target HTTP proxy dan tautkan ke url map yang telah dibuat:

gcloud compute target-http-proxies create http-lb-proxy \
--url-map web-map

Buat forwarding rule dan gunakan target HTTP proxy yang telah dibuat.

gcloud compute forwarding-rules create http-content-rule \
--global \
--target-http-proxy http-lb-proxy \
--ports 80

Verifikasi:

gcloud compute forwarding-rules list

Untuk pengujian, akses website nginx menggunakan external IP dari vm:

Coba reload browser:

Terlihat hostname berubah, menandakan browser mengakses ke dua vm yang berbeda secara bergantian.

Sekian!