Menyiapkan Load Balancer Aplikasi eksternal global dengan bucket Cloud Storage

Dokumen ini menunjukkan cara membuat Load Balancer Aplikasi eksternal untuk mengarahkan permintaan konten statis ke bucket Cloud Storage. Setelah Anda mengonfigurasi load balancer dengan bucket backend, permintaan ke jalur URL yang diawali dengan /love-to-fetch dikirim ke bucket Cloud Storage us-east1, dan semua permintaan lainnya dikirim ke bucket Cloud Storage europe-north1, terlepas dari region pengguna.

Jika backend Anda menayangkan konten dinamis daripada HTTP(S), pertimbangkan untuk menggunakan layanan backend, bukan bucket backend.

Jika Anda adalah pengguna Load Balancer Aplikasi klasik yang sudah ada, pastikan Anda meninjau Merencanakan migrasi ke Load Balancer Aplikasi eksternal global saat merencanakan deployment baru dengan Load Balancer Aplikasi eksternal global.

Bucket Cloud Storage sebagai backend load balancer

Load Balancer Aplikasi eksternal menggunakan peta URL untuk mengarahkan traffic dari jalur URL yang ditentukan ke backend Anda.

Dalam diagram berikut, load balancer mengirimkan traffic dengan jalur /love-to-fetch/ ke bucket Cloud Storage di region us-east1. Semua permintaan lainnya masuk ke bucket Cloud Storage di region europe-north1.

Load balancer mengirimkan traffic ke backend Cloud Storage.
Mendistribusikan traffic ke Cloud Storage

Secara default, Cloud Storage menggunakan cache yang sama dengan yang digunakan Cloud CDN. Jika mengaktifkan Cloud CDN di bucket backend, Anda dapat menggunakan kontrol Cloud CDN di konten Anda. Kontrol Cloud CDN mencakup, misalnya, mode cache, URL bertanda tangan, dan pembatalan validasi. Cloud CDN juga memungkinkan Anda meng-cache konten berukuran besar (> 10 MB). Jika tidak mengaktifkan Cloud CDN di bucket backend, Anda hanya dapat menggunakan header Cache-Control origin guna mengontrol caching untuk konten yang lebih kecil, seperti yang ditetapkan oleh metadata Cloud Storage.

Sebelum memulai

Pastikan penyiapan Anda memenuhi prasyarat berikut. Jika menggunakan utilitas gcloud storage, Anda dapat menginstalnya dengan menggunakan petunjuk di bagian Menemukan penyimpanan objek dengan alat gcloud.

Menetapkan project default

Konsol

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  4. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  5. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

gcloud

gcloud config set project PROJECT_ID

Ganti PROJECT_ID dengan project yang Anda gunakan untuk panduan ini.

Terraform

export GOOGLE_CLOUD_PROJECT=PROJECT_ID

Izin

Untuk mengikuti panduan ini, Anda perlu membuat bucket Cloud Storage dan load balancer dalam sebuah project. Anda harus merupakan pemilik atau editor project, atau Anda harus memiliki peran IAM Compute Engine berikut:

Tugas Peran yang Diperlukan
Membuat komponen load balancer Admin Jaringan
Membuat bucket Cloud Storage Storage Object Admin

Untuk informasi selengkapnya, lihat panduan berikut:

Menyiapkan resource sertifikat SSL

Untuk load balancer HTTPS, buat resource sertifikat SSL seperti yang dijelaskan dalam dokumentasi berikut:

Sebaiknya gunakan sertifikat yang dikelola Google.

Contoh ini mengasumsikan bahwa Anda sudah memiliki resource sertifikat SSL bernama www-ssl-cert.

Menyiapkan bucket dan konten Cloud Storage

Proses untuk menyiapkan bucket Cloud Storage Anda adalah sebagai berikut:

  • Buat bucket.

  • Salin konten ke bucket.

  • Berikan akses publik ke bucket.

Membuat bucket Cloud Storage

Dalam contoh ini, Anda membuat dua bucket Cloud Storage untuk diakses oleh load balancer. Untuk deployment produksi, sebaiknya pilih bucket multi-region, yang secara otomatis mereplikasi objek di beberapa region Google Cloud. Hal ini dapat meningkatkan ketersediaan konten dan meningkatkan toleransi kegagalan di seluruh aplikasi Anda.

Perhatikan nama bucket Cloud Storage yang Anda buat, karena bucket tersebut digunakan nanti. Dalam panduan ini, keduanya disebut sebagai BUCKET_1_NAME dan BUCKET_2_NAME.

Konsol

  1. Di konsol Google Cloud, buka halaman Cloud Storage Buckets.

    Buka Bucket Cloud Storage

  2. Klik Create bucket.

  3. Di kotak Name your bucket, masukkan nama unik secara global yang sesuai dengan panduan penamaan.

  4. Klik Pilih lokasi untuk menyimpan data.

  5. Setel Location type ke Region.

  6. Setel Location ke europe-north1. Nama ini adalah BUCKET_1_NAME dalam panduan ini.

  7. Klik Create.

  8. Klik Buckets untuk kembali ke halaman Cloud Storage Buckets. Gunakan petunjuk ini untuk membuat bucket kedua, tetapi tetapkan Location ke us-east1. Penjelasan tersebut adalah BUCKET_2_NAME dalam panduan ini.

gcloud

gcloud storage buckets create gs://BUCKET_1_NAME --project=PROJECT_ID --default-storage-class=standard --location=europe-north1 --uniform-bucket-level-access
gcloud storage buckets create gs://BUCKET_2_NAME --project=PROJECT_ID --default-storage-class=standard --location=us-east1 --uniform-bucket-level-access

Ganti BUCKET_1_NAME dan BUCKET_2_NAME dengan nama bucket yang ingin Anda buat.

Terraform

Untuk membuat bucket, gunakan resource google_storage_bucket.

# Create Cloud Storage buckets
resource "random_id" "bucket_prefix" {
  byte_length = 8
}

resource "google_storage_bucket" "bucket_1" {
  name                        = "${random_id.bucket_prefix.hex}-bucket-1"
  location                    = "us-east1"
  uniform_bucket_level_access = true
  storage_class               = "STANDARD"
  // delete bucket and contents on destroy.
  force_destroy = true
}

resource "google_storage_bucket" "bucket_2" {
  name                        = "${random_id.bucket_prefix.hex}-bucket-2"
  location                    = "us-east1"
  uniform_bucket_level_access = true
  storage_class               = "STANDARD"
  // delete bucket and contents on destroy.
  force_destroy = true
}

Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.

Mentransfer konten ke bucket Cloud Storage Anda

Agar Anda dapat menguji penyiapan nanti, salin gambar berikut dari bucket Cloud Storage publik ke bucket Cloud Storage Anda sendiri.

gcloud

  1. Klik Activate Cloud Shell.

  2. Jalankan perintah berikut di Cloud Shell dan ganti variabel nama bucket dengan nama bucket Cloud Storage Anda:

gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET_1_NAME/never-fetch/
gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET_2_NAME/love-to-fetch/

Terraform

Untuk menyalin item ke dalam bucket, Anda dapat menggunakan resource google_storage_bucket_object.

resource "google_storage_bucket_object" "cat_image" {
  name         = "never-fetch/three-cats.jpg"
  source       = "images/three-cats.jpg"
  content_type = "image/jpeg"

  bucket = google_storage_bucket.bucket_1.name
}

resource "google_storage_bucket_object" "dog_image" {
  name         = "love-to-fetch/two-dogs.jpg"
  source       = "images/two-dogs.jpg"
  content_type = "image/jpeg"

  bucket = google_storage_bucket.bucket_2.name
}

Atau, gunakan referensi null_resource.

resource "null_resource" "upload_cat_image" {
provisioner "local-exec" {
  command = "gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://${google_storage_bucket.bucket_1.name}/never-fetch/"
}
}

resource "null_resource" "upload_dog_image" {
provisioner "local-exec" {
  command = "gcloud storage cp gs://gcp-external-http-lb-with-bucket/two-dogs.jpg gs://${google_storage_bucket.bucket_2.name}/love-to-fetch/"
}
}

Di Konsol Google Cloud, klik Refresh di setiap halaman detail bucket untuk memverifikasi bahwa file berhasil disalin.

Membuat bucket Cloud Storage dapat dibaca oleh publik

Saat Anda membuat bucket Cloud Storage dapat dibaca oleh publik, siapa pun di internet dapat mencantumkan dan melihat objeknya, serta melihat metadatanya (tidak termasuk ACL). Jangan sertakan informasi sensitif dalam bucket publik Anda.

Untuk mengurangi kemungkinan eksposur informasi sensitif secara tidak disengaja, jangan simpan objek publik dan data sensitif di bucket yang sama.

Konsol

Untuk memberi semua pengguna akses agar dapat melihat objek di bucket Anda, ulangi prosedur berikut untuk setiap bucket:

  1. Di konsol Google Cloud, buka halaman Cloud Storage Buckets.

    Buka Bucket Cloud Storage

  2. Klik nama bucket, lalu tab Izin.

  3. Klik Tambahkan.

  4. Di kotak New principals, masukkan allUsers.

  5. Pada kotak Select a role, pilih Cloud Storage > Storage Object Viewer.

  6. Klik Save.

  7. Klik Allow public access.

gcloud

Untuk memberi semua pengguna akses untuk melihat objek di bucket Anda, jalankan perintah berikut:

gcloud storage buckets add-iam-policy-binding gs://BUCKET_1_NAME --member=allUsers --role=roles/storage.objectViewer
gcloud storage buckets add-iam-policy-binding gs://BUCKET_2_NAME --member=allUsers --role=roles/storage.objectViewer

Terraform

Untuk memberi semua pengguna akses untuk melihat objek di bucket Anda, gunakan resource google_storage_bucket_iam_member dan tentukan anggota allUsers.

# Make buckets public
resource "google_storage_bucket_iam_member" "bucket_1" {
  bucket = google_storage_bucket.bucket_1.name
  role   = "roles/storage.objectViewer"
  member = "allUsers"
}

resource "google_storage_bucket_iam_member" "bucket_2" {
  bucket = google_storage_bucket.bucket_2.name
  role   = "roles/storage.objectViewer"
  member = "allUsers"
}

Mencadangkan alamat IP eksternal

Setelah menyiapkan bucket Cloud Storage, Anda dapat mencadangkan alamat IP eksternal statis global yang digunakan audiens untuk menjangkau load balancer.

Langkah ini bersifat opsional, tetapi direkomendasikan, karena alamat IP eksternal statis menyediakan satu alamat untuk mengarahkan domain Anda.

Konsol

  1. Di konsol Google Cloud, buka halaman External IP addresses.

    Buka External IP addresses

  2. Klik Reserve static address.

  3. Di kotak Name, masukkan example-ip.

  4. Tetapkan Tingkat Layanan Jaringan ke Premium.

  5. Tetapkan IP version ke IPv4.

  6. Tetapkan Type ke Global.

  7. Klik Reserve.

gcloud

gcloud compute addresses create example-ip \
    --network-tier=PREMIUM \
    --ip-version=IPV4 \
    --global

Perhatikan alamat IPv4 yang dicadangkan:

gcloud compute addresses describe example-ip \
    --format="get(address)" \
    --global

Terraform

Untuk mencadangkan alamat IP eksternal, gunakan resource google_compute_global_address.

# Reserve IP address
resource "google_compute_global_address" "default" {
  name = "example-ip"
}

Membuat Load Balancer Aplikasi eksternal dengan bucket backend

Petunjuk ini membahas pembuatan load balancer HTTP atau HTTPS. Untuk membuat load balancer HTTPS, Anda harus menambahkan resource sertifikat SSL ke frontend load balancer. Untuk informasi selengkapnya, lihat Ringkasan sertifikat SSL.

Konsol

Memulai konfigurasi Anda

  1. Di Konsol Google Cloud, buka halaman Load balancing.

    Buka Load balancing

  2. Klik Create load balancer.
  3. Untuk Type of load balancer, pilih Application Load Balancer (HTTP/HTTPS) lalu klik Next.
  4. Untuk Public facing or internal, pilih Public facing (eksternal), lalu klik Next.
  5. Untuk Global or single region deployment, pilih Best for global Workload, lalu klik Next.
  6. Untuk Load balancer Generation, pilih Global external Application Load Balancer, lalu klik Next.
  7. Klik Konfigurasikan.

Konfigurasi dasar

  1. Di kotak Name, masukkan http-lb.

Mengonfigurasi backend

  1. Klik Backend configuration.

  2. Klik kotak Backend services and backend buckets, lalu klik Create a backend bucket.

  3. Di kotak Backend bucket name, masukkan cats.

  4. Dalam kotak Cloud Storage bucket, klik Browse.

  5. Pilih BUCKET_1_NAME, lalu klik Select. Membuat bucket backend cats terlebih dahulu akan menjadikannya default, tempat semua permintaan traffic yang tidak cocok akan diarahkan. Anda tidak dapat mengubah aturan pengalihan bucket backend default di load balancer.

  6. Klik Create.

  7. Gunakan proses yang sama untuk membuat bucket backend bernama dogs, lalu pilih BUCKET_2_NAME.

  8. Klik OK.

Mengonfigurasi aturan pemilihan rute

Aturan pemilihan rute menentukan cara traffic Anda diarahkan. Untuk mengonfigurasi pemilihan rute, Anda akan menyiapkan aturan host dan pencocok jalur, yang merupakan komponen konfigurasi dari peta URL Load Balancer Aplikasi eksternal. Untuk menyiapkan aturan pada contoh ini:

  1. Klik Routing rules.
  2. Untuk dogs, masukkan * di kolom Hosts, dan /love-to-fetch/* di kolom Paths.

Mengonfigurasi frontend

  1. Klik Frontend configuration.

  2. Pastikan opsi berikut dikonfigurasi dengan nilai ini:

    Properti Nilai (ketik nilai atau pilih opsi yang ditentukan)
    Protokol HTTP
    Network Service Tier Premium
    IP version IPv4
    Alamat IP example-ip
    Port 80
    Opsional: Waktu tunggu keepalive HTTP Masukkan nilai waktu tunggu dari 5 hingga 1200 detik. Nilai defaultnya adalah 610 detik.

    Jika ingin membuat load balancer HTTPS, bukan load balancer HTTP, Anda harus memiliki sertifikat SSL (gcloud compute ssl-certificates list), dan Anda harus mengisi kolom sebagai berikut:

    Properti Nilai (ketik nilai atau pilih opsi yang ditentukan)
    Protokol HTTP(S)
    Network Service Tier Premium
    IP version IPv4
    Alamat IP example-ip
    Port 443
    Opsional: Waktu tunggu keepalive HTTP Masukkan nilai waktu tunggu dari 5 hingga 1200 detik. Nilai defaultnya adalah 610 detik.
    Pilih sertifikat atau buat sertifikat baru
    Opsional: Mengaktifkan Pengalihan HTTP ke HTTPS Gunakan kotak centang ini untuk mengaktifkan pengalihan.

    Jika kotak centang ini diaktifkan, load balancer HTTP sebagian tambahan akan dibuat yang menggunakan alamat IP yang sama dengan load balancer HTTPS dan akan mengalihkan permintaan HTTP ke frontend HTTPS load balancer.

    Kotak centang ini hanya dapat dipilih jika protokol HTTPS dipilih dan alamat IP yang dicadangkan digunakan.

  3. Klik Done.

Meninjau konfigurasi

  1. Klik Review and finalize.

  2. Tinjau Frontend, Aturan host dan jalur, serta Bucket backend.

  3. Klik Create dan tunggu hingga load balancer selesai dibuat.

  4. Klik nama load balancer (http-lb).

  5. Catat alamat IP load balancer untuk tugas berikutnya. Dalam panduan ini, ini disebut sebagai IP_ADDRESS.

gcloud

Mengonfigurasi backend

gcloud compute backend-buckets create cats \
  --gcs-bucket-name=BUCKET_1_NAME
gcloud compute backend-buckets create dogs \
  --gcs-bucket-name=BUCKET_2_NAME

Mengonfigurasi peta URL

gcloud compute url-maps create http-lb \
  --default-backend-bucket=cats
gcloud compute url-maps add-path-matcher http-lb \
  --path-matcher-name=path-matcher-2 \
  --new-hosts=* \
  --backend-bucket-path-rules="/love-to-fetch/*=dogs" \
  --default-backend-bucket=cats

Mengonfigurasi proxy target

gcloud compute target-http-proxies create http-lb-proxy \
  --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \
  --url-map=http-lb

Ganti HTTP_KEEP_ALIVE_TIMEOUT_SEC dengan nilai waktu tunggu keepalive HTTP klien dari 5 menjadi 1.200 detik. Nilai defaultnya adalah 610 detik. Kolom ini bersifat opsional.

Mengonfigurasi aturan penerusan

gcloud compute forwarding-rules create http-lb-forwarding-rule \
  --load-balancing-scheme=EXTERNAL_MANAGED \
  --network-tier=PREMIUM \
  --address=example-ip \
  --global \
  --target-http-proxy=http-lb-proxy \
  --ports=80

Terraform

Untuk membuat load balancer, gunakan resource Terraform berikut.

Mengonfigurasi backend

Untuk membuat backend, gunakan resource google_compute_backend_bucket.

# Create LB backend buckets
resource "google_compute_backend_bucket" "bucket_1" {
  name        = "cats"
  description = "Contains cat image"
  bucket_name = google_storage_bucket.bucket_1.name
}

resource "google_compute_backend_bucket" "bucket_2" {
  name        = "dogs"
  description = "Contains dog image"
  bucket_name = google_storage_bucket.bucket_2.name
}

Mengonfigurasi peta URL

Untuk membuat peta URL, gunakan resource google_compute_url_map.

# Create url map
resource "google_compute_url_map" "default" {
  name = "http-lb"

  default_service = google_compute_backend_bucket.bucket_1.id

  host_rule {
    hosts        = ["*"]
    path_matcher = "path-matcher-2"
  }
  path_matcher {
    name            = "path-matcher-2"
    default_service = google_compute_backend_bucket.bucket_1.id

    path_rule {
      paths   = ["/love-to-fetch/*"]
      service = google_compute_backend_bucket.bucket_2.id
    }
  }
}

Mengonfigurasi proxy target

Untuk membuat proxy HTTP target, gunakan resource google_compute_target_http_proxy.

# Create HTTP target proxy
resource "google_compute_target_http_proxy" "default" {
  name    = "http-lb-proxy"
  url_map = google_compute_url_map.default.id
}

Mengonfigurasi aturan penerusan

Untuk membuat aturan penerusan, gunakan resource google_compute_global_forwarding_rule.

# Create forwarding rule
resource "google_compute_global_forwarding_rule" "default" {
  name                  = "http-lb-forwarding-rule"
  ip_protocol           = "TCP"
  load_balancing_scheme = "EXTERNAL_MANAGED"
  port_range            = "80"
  target                = google_compute_target_http_proxy.default.id
  ip_address            = google_compute_global_address.default.id
}

CATATAN: Untuk mengubah mode ke Load Balancer Aplikasi klasik, tetapkan atribut load_balancing_scheme ke "EXTERNAL", bukan "EXTERNAL_MANAGED".

Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.

Mengirim traffic ke load balancer

Beberapa menit setelah mengonfigurasi load balancer, Anda dapat mulai mengirimkan traffic ke alamat IP load balancer.

Konsol

Konsol Google Cloud tidak didukung.

gcloud

Gunakan perintah curl untuk menguji respons dari URL berikut. Ganti IP_ADDRESS dengan alamat IPv4 load balancer:

curl http://IP_ADDRESS/love-to-fetch/two-dogs.jpg
curl http://IP_ADDRESS/never-fetch/three-cats.jpg

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.

Memperbarui waktu tunggu keepalive HTTP klien

Load balancer yang dibuat pada langkah sebelumnya telah dikonfigurasi dengan nilai default untuk waktu tunggu keepalive HTTP klien. Untuk mengupdate waktu tunggu keepalive HTTP klien, gunakan petunjuk berikut.

Konsol

  1. Di Konsol Google Cloud, buka halaman Load balancing.

    Buka Load balancing.

  2. Klik nama load balancer yang ingin diubah.
  3. Klik Edit.
  4. Klik Frontend configuration.
  5. Luaskan Advanced features. Untuk HTTP keepalive timeout, masukkan nilai waktu tunggu dari 5 hingga 1.200 detik.
  6. Klik Perbarui.
  7. Untuk meninjau perubahan, klik Review and finalize, lalu klik Update.

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 keepalive HTTP dari 5 hingga 1.200 detik.

Batasan

  • Bucket backend hanya didukung dengan Load Balancer Aplikasi eksternal global dan Load Balancer Aplikasi klasik. Load Balancer Aplikasi eksternal regional tidak didukung oleh Load Balancer Aplikasi eksternal regional atau jenis load balancer lainnya.
  • Bucket backend tidak didukung dengan Identity-Aware Proxy.
  • Load Balancer Aplikasi eksternal global tidak mendukung upload ke bucket Cloud Storage.

Langkah selanjutnya