Deploy Aplikasi dengan Global External HTTP(S) Load Balancing - Google Cloud Load Balancer
2023-10-02 | Technology
Intro
Arsitektur Load Balancer
Sekilas tentang perbedaan Load Balancer Google Cloud.
Fitur | Load balancing eksternal | Load balancing internal |
---|---|---|
Sumber traffic | Internet | Jaringan VPC Google Cloud |
Keamanan | Membutuhkan SSL/TLS untuk mengamankan traffic | Tidak membutuhkan SSL/TLS |
Fitur | Mendukung berbagai jenis load balancing, seperti HTTP, HTTPS, TCP, dan UDP | Mendukung berbagai jenis load balancing, seperti HTTP, HTTPS, TCP, dan UDP |
Skalabilitas | Dapat menskalakan secara otomatis berdasarkan traffic | Dapat menskalakan secara manual |
Konfigurasi Firewall
Langkah pertama yang perlu kita lakukan adalah menambahkan Firewall rule untuk mengizinkan akses HTTP dan Health Check.
Atau pada GCP yang terbaru, kita sudah di fasilitasi firewall default. Seperti dibawah ini:
Sebenarnya bisa saja tidak perlu mengkonfigurasi firewall, karena sudah ada dari bawaan GCP yang terbaru.
Tapi pada kasus kali ini kita akan membuat firewall sendiri.
-
Buka halaman Firewall rule dengan cara masuk ke Navigation menu -> VPC network -> Firewall.
-
Di bagian atas halaman, klik tombol Create Firewall Rule.
-
Isikan form seperti berikut untuk membuat HTTP firewall rule:
- Name: (bebas)
- Network: default
- Targets: Specified target tags
- Target tags: http-server
- Direction of traffic: Ingress
- Source filter: IPv4 ranges
- Source IP ranges: 0.0.0.0/0
- Protocols and ports: Pilih Specified protocols and ports, centang tcp, isikan 80.
Note:
-
Targets: Specified target tags. Karena kita akan menargetkan pada VM instance dengan tags (http-server).
-
Direction of traffic: Ingress. Karena kita akan mengakses ke dalam. Ingress dari luar ke dalam, jika Egress dari dalam ke luar.
-
Source IP ranges: 0.0.0.0/0. Kita mengizinkan semua IP address untuk mengakses VM instance kita, jadi IP berapapun bisa mengakses website.
-
Protocols and ports: TCP: 80. Karena kita akan membuat website dengan HTTP maka aktifkan port 80 untuk HTTP.
-
Setelah itu, Create.
-
Selanjutnya, buat satu firewall rule lagi untuk health check.
-
Di bagian atas halaman, klik tombol Create Firewall Rule.
-
Isikan form seperti berikut untuk membuat HTTP firewall rule:
- Name: (bebas)
- Network: default
- Targets: Specified target tags
- Target tags: http-server
- Direction of traffic: Ingress
- Source filter: IPv4 ranges
- Source IP ranges: 130.211.0.0/22, 35.191.0.0/16
- Protocols and ports: Pilih Specified protocols and ports, centang tcp.
-
Setelah itu, Create.
Note:
Kurang lebih sama seperti sebelumnya. Tetapi yang berbeda adalah:
-
Source IP ranges: 130.211.0.0/22, 35.191.0.0/16. Ini adalah bawaan IP instance dari GCP.
-
Protocols and ports: TCP. Hanya mencentang TCP karena itu yang mendasari untuk Health Check.
-
Sebagai informasi, health check pada load balancer menggunakan IP address range 130.211.0.0/22 dan 35.191.0.0/16 sehingga kita cukup mengizinkan IP range tersebut.
Baca untuk: Dokumentasi Health Check
Membuat Instance Template
Untuk membuat load balancer, kita perlu menggunakan Managed Instance Group. Untuk membuatnya, kita memerlukan Instance Template untuk Autoscaling.
Pada kasus ini, kita akan membuat 2 instance groups di 2 region berbeda, yaitu asia-southeast2 dan europe-west1. Ikuti langkah-langkah berikut:
-
Masuk ke Navigation menu > Compute Engine > Instance templates.
-
Di bagian atas halaman, klik Create Instance Template.
-
Isi nama instance template, misalnya asia-southeast2-template. Biarkan konfigurasi lain tetap sesuai default.
- Setting Machine configuration ke yang kecil saja, biar murah meriah.
-
Buka panah pada Networking, Disks, Security, Management, Sole-Tenancy.
-
Pada bagian Networking kemudian pada Network tags, isikan http-server. Tags inilah yang digunakan pada Firewall rule. Buka panah Network interfaces. Lalu, pada Subnetwork, pilih subnet asia-southeast2.
- Pada bagian Management -> Automation, isikan kode berikut untuk Startup script:
sudo apt-get update
sudo apt-get install apache2 -y
echo '<!doctype html><html><body><h1>Hello from Jakarta!<h1></body></html>' | sudo tee /var/www/html/index.html
-
Setelah itu, Create.
-
Ulangi langkah seperti tadi dan ubah bagian:
- Nama: europe-west1-template
- Tags: http-server
- Subnet: europe-west1
- Script:
sudo apt-get update
sudo apt-get install apache2 -y
echo '<!doctype html><html><body><h1>Hello from Belgium!<h1></body></html>' | sudo tee /var/www/html/index.html
- Setelah itu, Create lagi.
Kita sudah mempunyai 2 Instance Template, 1 untuk region southeast2 (Jakarta) dan 1 untuk region europe-west1 (Belgium).
Baca untuk: Dokumentasi Regions dan Zones
Setelah membuat 2 buah instance template, selanjutnya kita akan buat instance group yang bersumber dari instance template tersebut.
Membuat Instance Group
-
Buka halaman Instance groups yang ada di menu sebelah kiri.
-
Klik Create Instance Group.
- Lalu, isi form seperti berikut:
- Name: asia-southeast2-group
- Location: Multiple zones
- Region: asia-southeast2
- Instance template: asia-southeast2-template
- Autoscaling policy: Klik ikon pensil, pilih CPU utilization pada Metric type, dan isi 80 pada Target CPU utilization. Klik Done.
- Minimum number of instances: 1
- Maximum number of instances: 5
Pada contoh di atas kita membuat sebuah Managed Instance Group bernama asia-southeast2-group di beberapa zone yang berada di region asia-southeast2. Managed Instance Group adalah kumpulan instance yang memiliki fitur untuk autoscaling. Kita bisa menentukan jumlah instance yang digunakan untuk autoscaling dan kapan instance harus melakukan scaling. Kali ini kita menentukan ketika penggunaan CPU mencapai 80% dan bisa melakukan scaling hingga 5 instance.
Note:
Jangan setting Minimum ke 0 jika tidak ingin server anda lambat untuk pertama kali diakses setelah tidak ada orang yang mengaksesnya. Ini juga biasa disebut dengan Cold Start.
-
Oke, setelah selesai, klik tombol Create.
-
Tunggu hingga instance group selesai dibuat. Lalu, masuklah ke halaman VM Instances di menu sebelah kiri. Anda akan melihat instance baru dengan nama namainstancegroup-xxxx.
-
Selanjutnya, buat satu instance group lagi untuk region europe-west1.
-
Masuk lagi ke menu Instance groups, lalu klik Create Instance Group.
-
Kurang lebih sama seperti sebelumnya, tetapi kita mengganti nama dan region:
- Name: europe-west1-group
- Location: Multiple zones
- Region: europe-west1
- Instance template: europe-west1-template
- Autoscaling policy: Klik ikon pensil, pilih CPU utilization pada Metric type, dan isi 80 pada Target CPU utilization. Klik Done.
- Minimum number of instances: 1
- Maximum number of instances: 5
-
Oke, setelah selesai, klik tombol Create.
-
Tunggu hingga instance group selesai dibuat. Lalu, masuklah ke halaman VM Instances di menu sebelah kiri. Anda akan melihat instance baru dengan nama namainstancegroup-xxxx.
Kita sudah mempunya 2 instance di VM Instance dan ini akan bertambah dan berkurang secara otomatis tergantung dengan penggunaan CPU tadi yang sudah kita set ke 80%.
Konfigurasi Load Balancer
Setelah kedua Managed Instance Group siap, selanjutnya kita akan membuat Global External HTTP(S) Load Balancing dan mengatur konfigurasinya.
-
Buka halaman load balancing melalui Navigation Menu -> Network services -> Load balancing, kemudian klik Create Load Balancer.
-
Pilih Start configuration pada HTTP(S) Load Balancing. Saat muncul opsi, biarkan saja sesuai default dengan mengeklik tombol Continue karena kita akan menggunakan external load balancer (dari internet ke VM) dengan cakupan global.
-
Pilih Frontend configuration. Pilih IPv4 pada IP version, pilih Ephemeral pada IP address, dan pilih 80 pada Port. Lalu, klik Done.
Untuk nama bebas saja
-
Tambahkan lagi Frontend configuration dengan klik Add Frontend IP and Port. Pilih IPv6 pada IP version, pilih Auto-allocate pada IP address, dan pilih 80 pada Port. Lalu, klik Done.
- Pada bagian Backend configuration, klik kolom Backend services & backend buckets, lalu pilih Create a Backend Service.
- Pada dialog yang muncul, berikan nama untuk backend service, sebagai contoh lb-http-backend.
- Tambahkan backend baru menggunakan instance group yang tadi Anda buat. Pilih asia-southeast2-group pada kolom Instance group dan isikan 80 pada kolom Port numbers.
Pada Balancing mode, kita bisa mengatur bagaimana pembagian beban untuk backend instance tersebut. Pada backend asia-southeast2 ini, kita akan menggunakan mode Rate dengan Maximum RPS (request per second) sebesar 50 per instance. Artinya, load akan tetap dijalankan di backend ini selama traffic masih di bawah 50 RPS. Klik Done.
-
Lalu, klik Add Backend untuk membuat backend baru. Pilih europe-west1-group untuk Instance group dan isi 80 untuk Port numbers.
-
Biarkan konfigurasi Balancing mode sesuai defaut. Klik Done.
-
Selanjutnya, pada field Health check, pilih Create a Health Check. Health check ini berperan untuk memantau kondisi ketersediaan dari instance.
-
Berikan nama untuk health check dengan http-health-check, lalu ubah Protocol menjadi HTTP. Klik Save.
-
Kemudian, klik Create untuk menyimpan konfigurasi dari backend service. Lalu, pilih OK.
- Masuk ke bagian Review and finalize untuk mengulas kembali konfigurasi dari load balancer yang akan kita buat. Jika sudah benar, klik tombol Create.
-
Tunggu beberapa menit. GCP sedang membuat load balancer dan health check sedang melakukan pengecekan terhadap instance.
-
Selang beberapa menit, klik pada nama load balancer, lalu salin IP:Port untuk IPv4 di bagian Frontend, kemudian jalankan pada tab browser Anda.
Anda akan diarahkan ke instance terdekat dari lokasi Anda. Anda juga bisa coba akses IP tersebut menggunakan VPN agar menerima respons dari Europe.
Contoh Proxy EU :
Stress Test terhadap Load Balancer
Setelah berhasil membuat load balancer untuk mengakses instance yang berada di lokasi terdekat dari pelanggan, langkah selanjutnya kita akan melakukan stress test guna menguji pembagian beban pada load balancer.
- Install siege
sudo apt-get install siege
- Jalankan perintah berikut untuk memulai stress test:
siege -c 250 http://load_balancer_ip
- Buka halaman Load balancing, lalu klik pada nama load balancer Anda. Buka tab Monitoring, Anda akan melihat alur dari traffic yang dikirim dari Siege. Karena kita telah mengatur backend di asia-southeast2 hanya bisa menerima 50 RPS, traffic pun akan dialihkan ke europe-west1 meskipun VM tempat kita mengakses berada di Asia.
Setelah melakukan stress test, walaupun kita sedang berada di dekat Jakarta tetapi kita di pindahkan ke server Belgium. karena traffic di Jakarta sedang full.
Gambar kiri yang baru, dan Gambar kanan yang lama.