Memulai load balancing untuk API Gateway

Tutorial ini menunjukkan cara membuat Load Balancer Aplikasi eksternal Global untuk merutekan permintaan ke API Gateway. Proses konfigurasi mengikuti langkah-langkah yang sama dengan yang digunakan untuk mengonfigurasi integrasi Load Balancer Aplikasi eksternal global dengan produk serverless lainnya seperti Cloud Run, fungsi Cloud Run, dan App Engine.

Meskipun load balancer tidak diperlukan agar API Gateway berfungsi, load balancer memungkinkan gateway Anda memanfaatkan manfaat load balancer. Misalnya, menggunakan Load Balancer Aplikasi eksternal global dengan API Gateway memungkinkan Anda:

  • Menggunakan domain kustom.
  • Manfaatkan Google Cloud Armor sebagai layanan keamanan jaringan.
  • Kelola load balancing yang efisien di seluruh gateway di beberapa lokasi.
  • Terapkan pengelolaan traffic lanjutan.

Sebelum memulai

  1. Jika Anda belum melakukannya, download dan instal Google Cloud CLI.

    Mendownload gcloud CLI

  2. Perbarui komponen gcloud:

    gcloud components update
  3. Ikuti Panduan Memulai API Gateway untuk men-deploy layanan Cloud Run dan membuat gateway yang mengarah ke layanan tersebut.

  4. Mengonfigurasi izin.

  5. Tambahkan resource sertifikat SSL.

Men-deploy layanan Cloud Run dan instance API Gateway

Dalam tutorial ini, Anda akan men-deploy layanan "hello-world" ke Cloud Run, membuat gateway yang merutekan ke layanan Cloud Run, dan mengonfigurasi Load Balancer Aplikasi eksternal global untuk merutekan permintaan ke domain kustom.

Meskipun tutorial ini menggunakan Cloud Run sebagai layanan backend untuk API Gateway, langkah-langkah ini juga berlaku untuk layanan backend apa pun yang didukung API Gateway.

Setelah berhasil menyelesaikan panduan memulai API Gateway, Anda akan memiliki URL gateway yang di-deploy yang mengarah ke layanan Cloud Run.

Konfigurasikan izin

Dalam tutorial ini, Anda akan membuat grup endpoint jaringan (NEG) tanpa server dan membuat Load Balancer Aplikasi eksternal global di project Cloud. Tindakan ini memerlukan peran pemilik atau editor project, atau peran IAM Compute Engine berikut:

Tugas Peran yang Diperlukan
Membuat komponen jaringan dan load balancer Admin Jaringan
Membuat dan mengubah NEG Compute Instance Admin
Membuat dan mengubah sertifikat SSL Security Admin

Membuat resource sertifikat SSL

Untuk membuat Load Balancer Aplikasi eksternal global, resource sertifikat SSL harus ditambahkan ke frontend load balancer. Buat resource sertifikat SSL menggunakan sertifikat SSL yang dikelola Google atau sertifikat SSL yang dikelola sendiri.

  • Sertifikat yang dikelola Google. Sebaiknya gunakan sertifikat yang dikelola Google karena Google Cloud memperoleh, mengelola, dan memperpanjang sertifikat ini secara otomatis. Untuk membuat sertifikat yang dikelola Google, Anda harus memiliki domain dan data DNS untuk domain tersebut agar sertifikat dapat disediakan. Jika belum memiliki domain, Anda bisa mendapatkannya dari Google Domains. Selain itu, Anda harus memperbarui data A DNS domain agar mengarah ke alamat IP load balancer yang dibuat di langkah berikutnya. Untuk petunjuk mendetail, lihat Menggunakan sertifikat yang dikelola Google.

  • Sertifikat yang ditandatangani sendiri. Jika tidak ingin menyiapkan domain saat ini, Anda dapat menggunakan sertifikat SSL yang ditandatangani sendiri untuk pengujian.

Tutorial ini mengasumsikan bahwa Anda telah membuat resource sertifikat SSL.

Jika ingin menguji proses ini tanpa membuat resource sertifikat SSL (atau domain seperti yang diperlukan oleh sertifikat yang dikelola Google), Anda masih dapat menggunakan petunjuk di halaman ini untuk menyiapkan load balancer HTTP.

Membuat Load Balancer Aplikasi eksternal global

  1. Buat NEG tanpa server untuk API Gateway.

    Grup endpoint jaringan (NEG) menentukan grup endpoint backend untuk load balancer. NEG tanpa server adalah backend yang mengarah ke layanan seperti API Gateway, seperti yang ditunjukkan dalam gambar berikut:

    diagram neg serverless sebagai backend untuk gateway multi-region

    Untuk membuat NEG tanpa server untuk gateway Anda, jalankan perintah berikut, dengan:

    • SERVERLESS_NEG_NAME adalah nama NEG tanpa server yang akan dibuat.
    • GATEWAY_ID menentukan nama gateway.
    • REGION_ID adalah region deployment untuk NEG serverless (harus cocok dengan region gateway).
    gcloud beta compute network-endpoint-groups create SERVERLESS_NEG_NAME \
      --region=REGION_ID \
      --network-endpoint-type=serverless \
      --serverless-deployment-platform=apigateway.googleapis.com \
      --serverless-deployment-resource=GATEWAY_ID

    Contoh:

    gcloud beta compute network-endpoint-groups create api-gateway-serverless-neg \
      --region=us-central1 \
      --network-endpoint-type=serverless \
      --serverless-deployment-platform=apigateway.googleapis.com \
      --serverless-deployment-resource=my-gateway
  2. Buat layanan backend untuk menentukan cara Load Balancer Aplikasi eksternal global mendistribusikan traffic.

    Konfigurasi layanan backend berisi kumpulan nilai, seperti protokol yang digunakan untuk terhubung ke backend, berbagai setelan distribusi dan sesi, health check, dan waktu tunggu, seperti yang ditunjukkan pada gambar berikut:

    diagram neg serverless sebagai backend untuk layanan backend

    Untuk membuat layanan backend, jalankan perintah berikut:

    gcloud compute backend-services create BACKEND_SERVICE_NAME --global

    dengan BACKEND_SERVICE_NAME adalah nama layanan backend baru Anda.

    Contoh:

    gcloud compute backend-services create api-gateway-backend-service --global

    Untuk menambahkan NEG tanpa server sebagai backend ke layanan backend, jalankan perintah berikut, dengan:

    • BACKEND_SERVICE_NAME adalah nama layanan backend Anda.
    • SERVERLESS_NEG_NAME adalah nama NEG serverless yang dibuat di langkah sebelumnya.
    • REGION_ID adalah region deployment untuk NEG serverless (harus cocok dengan region gateway).
    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
      --global \
      --network-endpoint-group=SERVERLESS_NEG_NAME \
      --network-endpoint-group-region=REGION_ID

    Contoh:

    gcloud compute backend-services add-backend api-gateway-backend-service \
      --global \
      --network-endpoint-group=api-gateway-serverless-neg \
      --network-endpoint-group-region=us-central1
  3. Buat peta URL untuk mengarahkan permintaan masuk ke layanan backend, seperti yang ditunjukkan pada gambar di bawah:

    diagram peta URL ke layanan backend

    Untuk membuat peta URL, jalankan perintah berikut, dengan:

    • URL_MAP_NAME adalah nama peta URL yang akan dibuat.
    • BACKEND_SERVICE_NAME adalah nama layanan backend Anda.
    gcloud compute url-maps create URL_MAP_NAME \
      --default-service BACKEND_SERVICE_NAME

    Contoh:

    gcloud compute url-maps create api-gateway-url-map \
      --default-service api-gateway-backend-service

    Contoh peta URL ini hanya menargetkan satu layanan backend yang mewakili satu gateway, sehingga aturan host atau pencocok jalur tidak diperlukan. Jika memiliki lebih dari satu layanan backend, Anda dapat menggunakan aturan host untuk mengarahkan permintaan ke layanan yang berbeda berdasarkan nama host. Gunakan pencocok jalur untuk mengarahkan permintaan ke layanan yang berbeda berdasarkan jalur permintaan.

    Contoh:

    gcloud compute url-maps add-path-matcher api-gateway-url-map \
      --path-matcher-name=my-pm2  \
      --default-service=my-host-default-backend \
      --path-rules="/video=video-service,/video/*=video-service" \
      --new-hosts my-hosts.com
    gcloud compute url-maps add-host-rule api-gateway-url-map \
      --hosts=my-app-domain \
      --path-matcher-name=my-app-path-matcher

    Untuk mempelajari aturan host dan pencocok jalur lebih lanjut, lihat dokumentasi Peta URL.

  4. Buat sertifikat SSL untuk proxy target Anda, seperti yang ditunjukkan pada gambar di bawah:

    diagram sertifikat ssl untuk proxy target

    Untuk membuat Load Balancer Aplikasi eksternal global, resource sertifikat SSL diperlukan untuk proxy target HTTP(S). Anda dapat membuat resource sertifikat SSL menggunakan sertifikat SSL yang dikelola Google atau sertifikat SSL yang dikelola sendiri. Sebaiknya gunakan sertifikat yang dikelola Google. Jika Anda menguji proses ini tanpa resource sertifikat SSL dan ingin menyiapkan load balancer HTTP, Anda dapat melewati langkah ini.

    Untuk membuat sertifikat yang dikelola Google, Anda harus memiliki domain. Jika tidak memiliki domain, Anda dapat menggunakan sertifikat SSL yang ditandatangani sendiri untuk pengujian.

    Untuk membuat resource sertifikat SSL yang dikelola Google:

    gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
      --domains DOMAIN

    Untuk membuat resource sertifikat SSL yang dikelola sendiri:

    gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
      --certificate CRT_FILE_PATH \
      --private-key KEY_FILE_PATH
  5. Buat proxy HTTP(S) target untuk merutekan permintaan ke peta URL, seperti yang ditunjukkan pada gambar di bawah:

    diagram proxy http ke peta URL

    Untuk membuat proxy target, gunakan perintah berikut, dengan:

    • TARGET_HTTPS_PROXY_NAME adalah nama proxy HTTP(S) target yang akan dibuat.
    • URL_MAP_NAME adalah nama peta URL yang dibuat di langkah sebelumnya.
    • Opsional: SSL_CERT_NAME adalah nama sertifikat SSL yang dibuat.
    gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \
      --ssl-certificates=SSL_CERT_NAME \
      --url-map=URL_MAP_NAME

    Contoh:

    gcloud compute target-https-proxies create api-gateway-https-proxy \
      --ssl-certificates=hello-cert \
      --url-map=api-gateway-url-map

    Seperti yang telah disebutkan sebelumnya, Anda dapat membuat load balancer HTTP tanpa membuat resource sertifikat SSL. Untuk melakukannya, gunakan perintah berikut:

    gcloud compute target-http-proxies create TARGET_HTTP_PROXY_NAME \
          --url-map=URL_MAP_NAME

    Contoh:

    gcloud compute target-http-proxies create api-gateway-http-proxy \
      --url-map=api-gateway-url-map

    Perintah berikutnya untuk proxy HTTP harus diubah untuk mengakomodasi tanda --target-http-proxy dan TARGET_HTTP_PROXY_NAME Anda untuk HTTP(S)-nya.

  6. Buat aturan penerusan untuk mengarahkan permintaan masuk ke proxy, seperti yang ditunjukkan pada gambar berikut:

    diagram aturan penerusan ke proxy http

    Gunakan perintah berikut untuk membuat aturan penerusan, dengan:

    • HTTPS_FORWARDING_RULE_NAME adalah nama aturan yang akan dibuat.
    • TARGET_HTTPS_PROXY_NAME adalah nama proxy target HTTP(S).
    gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \
      --target-https-proxy=TARGET_HTTPS_PROXY_NAME \
      --global \
      --ports=443

    Contoh:

    gcloud compute forwarding-rules create my-fw \
      --target-https-proxy=api-gateway-https-proxy \
      --global \
      --ports=443

Memperbarui data DNS dengan alamat IP load balancer

Jika Anda memiliki domain kustom, langkah ini diperlukan untuk menyiapkan setelan DNS agar domain Anda mengarah ke alamat IP baru layanan Anda. Domain juga diperlukan jika Anda membuat Load Balancer Aplikasi eksternal global dengan sertifikat yang dikelola Google (yang memerlukan domain). Sebaiknya alokasikan dan gunakan alamat IP statis saat digunakan dengan DNS. Petunjuk spesifik untuk langkah ini bergantung pada penyedia DNS Anda.

  1. Untuk mengirim traffic ke load balancer, data DNS domain Anda (dalam tutorial ini, my-app-domain) harus mengarah ke alamat IP load balancer.

    Untuk menemukan alamat IP aturan penerusan global, gunakan perintah ini:

    gcloud compute forwarding-rules list
  2. Perbarui data A atau AAAA DNS domain Anda agar mengarah ke alamat IP load balancer sehingga traffic yang dikirim ke URL domain kustom yang ada akan dirutekan melalui load balancer. Mungkin perlu waktu beberapa detik atau beberapa jam agar DNS menerapkan perubahan ini ke server DNS.

  3. Uji untuk mengonfirmasi bahwa gateway Anda menerima traffic menggunakan curl atau dengan membuka URL di browser. Contoh: https://my-app-domain

    Setelah pengujian, Anda akan melihat respons yang dihasilkan oleh layanan Cloud Run. Misalnya, ini dapat berupa halaman HTML "Hello World" atau respons lain yang diharapkan yang dihasilkan oleh layanan backend secara langsung. Ini berarti permintaan Anda akan melalui load balancer, dan layanan backend menginstruksikan load balancer untuk mengirimkannya ke gateway Anda.

Menguji konfigurasi load balancer

Setelah mengonfigurasi load balancer, Anda dapat mulai mengirimkan traffic ke alamat IP aturan penerusan.

Untuk menemukan alamat IP aturan penerusan global Anda, gunakan perintah berikut:

gcloud compute forwarding-rules list

Gunakan perintah curl untuk menguji respons berbagai URL untuk layanan Anda. Contoh:

curl https://HOST_URL/hello/
curl https://HOST_URL

Anda dapat menggunakan konsol Cloud API Gateway untuk memverifikasi bahwa permintaan menjangkau layanan yang benar.

Selamat! Anda telah berhasil mengonfigurasi Load Balancer Aplikasi eksternal global untuk API GatewayPREVIEW.

Pembersihan

Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam panduan memulai ini, Anda dapat menghapus resource Cloud Load Balancing yang Anda buat. Jika resource ini dibuat dalam project-nya sendiri, Anda dapat menghapus seluruh project. Jika tidak, Anda dapat menghapus resource satu per satu.

Menghapus project

Jalankan perintah berikut, ganti PROJECT_ID dengan project ID Anda:

gcloud projects delete PROJECT_ID

Menghapus resource satu per satu

Hapus setiap komponen di load balancer:

  1. Hapus aturan penerusan:

    gcloud compute forwarding-rules delete HTTPS_FORWARDING_RULE_NAME --global
  2. Hapus alamat IP eksternal global:

    gcloud compute addresses delete IP_ADDRESSES --global
  3. Hapus proxy target:

    gcloud compute target-https-proxies delete TARGET_HTTP_PROXY_NAME
  4. Menghapus peta URL:

    gcloud compute url-maps delete URL_MAP_NAME
  5. Hapus layanan backend:

    gcloud compute backend-services delete BACKEND_SERVICE_NAME --global
  6. (Opsional) Hapus sertifikat SSL:

    gcloud compute ssl-certificates delete SSL_CERTIFICATE_NAME

Hapus NEG serverless:

gcloud compute network-endpoint-groups delete SERVERLESS_NEG_NAME --region=REGION