Menyiapkan Load Balancer Aplikasi internal dengan VPC Bersama

Dokumen ini menunjukkan dua contoh konfigurasi untuk menyiapkan Load Balancer Aplikasi internal di lingkungan VPC Bersama:

  • Contoh pertama membuat semua komponen load balancer dan backend dalam satu project layanan.
  • Contoh kedua membuat komponen frontend load balancer dan peta URL dalam satu project layanan, sedangkan layanan backend dan backend load balancer dibuat dalam project layanan yang berbeda. Jenis deployment ini, dengan peta URL yang merujuk ke layanan backend di project lain, disebut sebagai Referensi layanan lintas project.

Kedua contoh ini memerlukan konfigurasi awal yang sama untuk memberikan izin dan menyiapkan VPC Bersama sebelum Anda dapat mulai membuat load balancer.

Konfigurasi ini bukan satu-satunya konfigurasi VPC Bersama yang didukung oleh Load Balancer Aplikasi internal. Untuk arsitektur VPC Bersama lainnya yang valid, lihat Arsitektur VPC Bersama.

Jika Anda tidak ingin menggunakan jaringan VPC Bersama, lihat Menyiapkan Load Balancer Aplikasi internal.

Sebelum memulai

  1. Baca Ringkasan VPC Bersama.
  2. Baca Ringkasan Load Balancer Aplikasi Internal, termasuk bagian Arsitektur VPC Bersama.

Izin diperlukan

Menyiapkan load balancer di jaringan VPC Bersama memerlukan beberapa penyiapan awal dan penyediaan oleh administrator. Setelah penyiapan awal, pemilik project layanan dapat melakukan salah satu tindakan berikut:

  • Men-deploy semua komponen load balancer dan backend-nya dalam project layanan.
  • Deploy komponen backend load balancer (layanan backend dan backend) di project layanan yang dapat direferensikan oleh peta URL di layanan lain atau project host.

Bagian ini merangkum izin yang diperlukan untuk mengikuti panduan ini guna menyiapkan load balancer di jaringan VPC Bersama.

Menyiapkan VPC Bersama

Peran berikut diperlukan untuk tugas berikut:

  1. Melakukan tugas administratif satu kali seperti menyiapkan VPC Bersama dan mengaktifkan project host.
  2. Melakukan tugas administratif yang harus diulang setiap kali Anda ingin mengaktivasi project layanan baru. Hal ini termasuk melampirkan project layanan, menyediakan dan mengonfigurasi resource jaringan, serta memberikan akses ke administrator project layanan.

Tugas ini harus dilakukan di project host VPC Bersama. Sebaiknya Admin VPC Bersama juga menjadi pemilik project host VPC Bersama. Peran ini secara otomatis memberikan peran Admin Jaringan dan Admin Keamanan.

Tugas Peran yang diperlukan
Menyiapkan VPC Bersama, mengaktifkan project host, dan memberikan akses kepada administrator project layanan Admin VPC Bersama
Membuat subnet di project host VPC Bersama dan memberikan akses kepada administrator project layanan Admin Jaringan
Menambahkan dan menghapus aturan firewall Security Admin

Setelah subnet disediakan, pemilik project host harus memberikan peran Pengguna Jaringan dalam project host kepada siapa saja (biasanya administrator project layanan, developer, atau akun layanan) yang perlu menggunakan resource ini.

Tugas Peran yang diperlukan
Gunakan jaringan dan subnet VPC yang termasuk dalam project host Pengguna Jaringan

Peran ini dapat diberikan pada level project atau untuk subnet individual. Sebaiknya Anda memberikan peran tersebut di setiap subnet. Pemberian peran pada project akan memberikan akses ke semua subnet saat ini dan yang akan datang dalam jaringan VPC dari project host.

Men-deploy load balancer dan backend

Administrator project layanan memerlukan peran berikut dalam project layanan untuk membuat backend dan resource load balancing. Izin ini diberikan secara otomatis kepada pemilik atau editor project layanan.

Peran yang diberikan dalam project layanan
Tugas Peran yang diperlukan
Membuat komponen load balancer Admin Jaringan
Membuat instance Admin Instance
Membuat dan mengubah sertifikat SSL Security Admin

Mereferensikan layanan backend lintas project

Jika load balancer perlu mereferensikan layanan backend dari project layanan lain, yang juga dikenal sebagai referensi layanan lintas project, administrator load balancer akan memerlukan peran berikut dalam project layanan tempat layanan backend dibuat.

Peran yang diberikan dalam project layanan
Tugas Peran yang diperlukan
Izin untuk menggunakan layanan dalam project lain Pengguna Layanan Load Balancer

Peran ini dapat diberikan di level project atau untuk layanan backend individual. Untuk mengetahui petunjuk tentang cara memberikan peran ini, lihat contoh referensi layanan lintas-project di halaman ini.

Untuk mengetahui informasi selengkapnya tentang IAM, lihat panduan berikut:

Prasyarat

Di bagian ini, Anda perlu melakukan langkah-langkah berikut:

  1. Mengonfigurasi jaringan dan subnet di project host.
  2. Menyiapkan VPC Bersama di project host.

Langkah-langkah di bagian ini tidak perlu dilakukan setiap kali Anda ingin membuat load balancer baru. Namun, Anda harus memastikan bahwa Anda memiliki akses ke resource yang dijelaskan di sini sebelum melanjutkan untuk membuat load balancer.

Mengonfigurasi jaringan dan subnet di project host

Anda memerlukan jaringan VPC Bersama dengan dua subnet: satu untuk frontend dan backend load balancer, serta satu untuk proxy load balancer.

Contoh ini menggunakan jaringan, region, dan subnet berikut:

  • Jaringan. Jaringan ini diberi nama lb-network.

  • Subnet untuk frontend dan backend load balancer. Subnet bernama lb-frontend-and-backend-subnet di region us-west1 menggunakan 10.1.2.0/24 untuk rentang IP utamanya.

  • Subnet untuk proxy. Subnet bernama proxy-only-subnet di region us-west1 menggunakan 10.129.0.0/23 untuk rentang IP utamanya.

Mengonfigurasi subnet untuk frontend dan backend load balancer

Langkah ini tidak perlu dilakukan setiap kali Anda ingin membuat load balancer baru. Anda hanya perlu memastikan bahwa project layanan memiliki akses ke subnet di jaringan VPC Bersama (selain subnet khusus proxy).

Semua langkah di bagian ini harus dilakukan di project host.

Konsol

  1. Di Konsol Google Cloud, buka halaman jaringan VPC.

    Buka VPC networks

  2. Klik Create VPC network.
  3. Untuk Name, masukkan lb-network.
  4. Di bagian Subnet:

    1. Setel Subnet creation mode ke Custom.
    2. Di bagian Subnet baru, masukkan informasi berikut:

      • Name: lb-frontend-and-backend-subnet
      • Region: us-west1

      • Rentang alamat IP: 10.1.2.0/24

    3. Klik Done.

  5. Klik Create.

gcloud

  1. Buat jaringan VPC dengan perintah gcloud compute networks create:

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. Buat subnet di jaringan lb-network di region us-west1:

    gcloud compute networks subnets create lb-frontend-and-backend-subnet \
        --network=lb-network \
        --range=10.1.2.0/24 \
        --region=us-west1
    

Terraform

  1. Buat jaringan VPC:

    # Shared VPC network
    resource "google_compute_network" "lb_network" {
      name                    = "lb-network"
      provider                = google-beta
      project                 = "my-host-project-id"
      auto_create_subnetworks = false
    }

  2. Buat subnet di region us-west1:

    # Shared VPC network - backend subnet
    resource "google_compute_subnetwork" "lb_frontend_and_backend_subnet" {
      name          = "lb-frontend-and-backend-subnet"
      provider      = google-beta
      project       = "my-host-project-id"
      region        = "us-west1"
      ip_cidr_range = "10.1.2.0/24"
      role          = "ACTIVE"
      network       = google_compute_network.lb_network.id
    }

Mengonfigurasi subnet khusus proxy

Subnet khusus proxy digunakan oleh semua load balancer berbasis Envoy regional di region us-west1, di jaringan VPC lb-network. Hanya boleh ada satu subnet khusus proxy aktif per region, per jaringan.

Jangan melakukan langkah ini jika sudah ada subnet khusus proxy yang dicadangkan di region us-west1 dalam jaringan ini.

Semua langkah di bagian ini harus dilakukan di project host.

Konsol

  1. Di Konsol Google Cloud, buka halaman jaringan VPC.

    Buka VPC networks

  2. Klik nama jaringan VPC Bersama: lb-network.
  3. Klik Tambahkan subnet.
  4. Untuk Name, masukkan proxy-only-subnet.
  5. Untuk Region, pilih us-west1.
  6. Tetapkan Destination ke Regional Managed Proxy.
  7. Untuk Rentang alamat IP, masukkan 10.129.0.0/23.
  8. Klik Tambahkan.

gcloud

Buat subnet khusus proxy dengan perintah gcloud compute networks subnets create:

gcloud compute networks subnets create proxy-only-subnet \
    --purpose=REGIONAL_MANAGED_PROXY \
    --role=ACTIVE \
    --region=us-west1 \
    --network=lb-network \
    --range=10.129.0.0/23

Terraform

Buat subnet khusus proxy:

# Shared VPC network - proxy-only subnet
resource "google_compute_subnetwork" "proxy_only_subnet" {
  name          = "proxy-only-subnet"
  provider      = google-beta
  project       = "my-host-project-id"
  region        = "us-west1"
  ip_cidr_range = "10.129.0.0/23"
  role          = "ACTIVE"
  purpose       = "REGIONAL_MANAGED_PROXY"
  network       = google_compute_network.lb_network.id
}

Memberikan akses ke subnet backend kepada admin project layanan

Administrator project layanan memerlukan akses ke subnet lb-frontend-and-backend-subnet agar dapat menyediakan backend load balancer.

Admin VPC Bersama harus memberikan akses ke subnet backend kepada administrator project layanan (atau developer yang men-deploy resource dan backend yang menggunakan subnet). Untuk mengetahui petunjuknya, lihat Admin Project Layanan untuk beberapa subnet.

Mengonfigurasi aturan firewall di project host

Contoh ini menggunakan aturan firewall berikut:
  • fw-allow-health-check. Aturan ingress, yang berlaku untuk instance yang di-load balanced, yang memungkinkan semua traffic TCP dari sistem health check Google Cloud di 130.211.0.0/22 dan 35.191.0.0/16. Contoh ini menggunakan tag target load-balanced-backend untuk mengidentifikasi instance yang harus diterapkan tag tersebut.
  • fw-allow-proxies. Aturan ingress, berlaku untuk instance yang mengalami load balancing, yang memungkinkan traffic TCP di port 80, 443, dan 8080 dari proxy terkelola load balancer. Contoh ini menggunakan tag target load-balanced-backend untuk mengidentifikasi instance yang harus diterapkan.
  • fw-allow-ssh. Aturan masuk, berlaku untuk instance yang sedang di-load balanced, yang memungkinkan konektivitas SSH yang masuk di port TCP 22 dari alamat apa pun. Anda dapat memilih rentang IP sumber yang lebih ketat untuk aturan ini. Misalnya, Anda dapat menentukan hanya rentang IP sistem tempat Anda memulai sesi SSH. Contoh ini menggunakan tag target allow-ssh untuk mengidentifikasi mesin virtual (VM) yang menerapkan aturan firewall.
Tanpa aturan firewall ini, aturan menolak traffic masuk akan memblokir traffic masuk ke instance backend.

Semua langkah di bagian ini harus dilakukan di project host.

Konsol

  1. Di Konsol Google Cloud, buka halaman Firewall policies.

    Buka Kebijakan firewall

  2. Klik Create firewall rule untuk membuat aturan guna mengizinkan health check Google Cloud:
    • Name: fw-allow-health-check
    • Jaringan: lb-network
    • Direction of traffic: Masuk
    • Action on match: Izinkan
    • Targets: Tag target yang ditentukan
    • Tag target: load-balanced-backend
    • Filter sumber: Rentang IPv4
    • Rentang IPv4 sumber: 130.211.0.0/22 dan 35.191.0.0/16
    • Protokol dan port:
      • Pilih Specified protocols and ports.
      • Periksa TCP dan masukkan 80 untuk nomor port.
      • Sebagai praktik terbaik, batasi aturan ini hanya untuk protokol dan port yang cocok dengan yang digunakan oleh health check Anda. Jika Anda menggunakan tcp:80 untuk protokol dan port, Google Cloud dapat menggunakan HTTP di port 80 untuk menghubungi VM Anda, tetapi tidak dapat menggunakan HTTPS pada port 443 untuk menghubungi mereka.

  3. Klik Create.
  4. Klik Create firewall rule untuk membuat aturan guna mengizinkan health check Google Cloud:
    • Name: fw-allow-proxies
    • Jaringan: lb-network
    • Direction of traffic: Masuk
    • Action on match: Izinkan
    • Targets: Tag target yang ditentukan
    • Tag target: load-balanced-backend
    • Filter sumber: Rentang IPv4
    • Rentang IPv4 sumber: 10.129.0.0/23
    • Protokol dan port:
      • Pilih Specified protocols and ports.
      • Periksa TCP dan masukkan 80, 443, 8080 untuk nomor port.
  5. Klik Create.
  6. Klik Create firewall rule untuk membuat aturan guna mengizinkan health check Google Cloud:
    • Name: fw-allow-ssh
    • Jaringan: lb-network
    • Direction of traffic: Masuk
    • Action on match: Izinkan
    • Targets: Tag target yang ditentukan
    • Tag target: allow-ssh
    • Filter sumber: Rentang IPv4
    • Rentang IPv4 sumber: 0.0.0.0/0
    • Protokol dan port:
      • Pilih Specified protocols and ports.
      • Periksa TCP dan masukkan 22 untuk nomor port.
  7. Klik Create.

gcloud

  1. Buat aturan firewall fw-allow-health-check untuk mengizinkan health check Google Cloud. Contoh ini memungkinkan semua lalu lintas TCP dari prober {i>health check<i}. Namun, Anda dapat mengonfigurasi kumpulan port yang lebih sempit untuk memenuhi kebutuhan Anda.

    gcloud compute firewall-rules create fw-allow-health-check \
       --network=lb-network \
       --action=allow \
       --direction=ingress \
       --source-ranges=130.211.0.0/22,35.191.0.0/16 \
       --target-tags=load-balanced-backend \
       --rules=tcp
    
  2. Buat aturan firewall fw-allow-proxies untuk mengizinkan traffic dari subnet khusus proxy Envoy menjangkau backend Anda.

    gcloud compute firewall-rules create fw-allow-proxies \
       --network=lb-network \
       --action=allow \
       --direction=ingress \
       --source-ranges=10.129.0.0/23 \
       --target-tags=load-balanced-backend \
       --rules=tcp:80,tcp:443,tcp:8080
    

  3. Buat aturan firewall fw-allow-ssh untuk mengizinkan konektivitas SSH ke VM dengan tag jaringan allow-ssh. Saat Anda menghapus source-ranges, Google Cloud akan menafsirkan aturan sebagai sumber apa pun.

    gcloud compute firewall-rules create fw-allow-ssh \
       --network=lb-network \
       --action=allow \
       --direction=ingress \
       --target-tags=allow-ssh \
       --rules=tcp:22
    

Terraform

  1. Buat aturan firewall untuk mengizinkan health check Google Cloud.

    resource "google_compute_firewall" "fw_allow_health_check" {
      name          = "fw-allow-health-check"
      provider      = google-beta
      project       = "my-host-project-id"
      direction     = "INGRESS"
      network       = google_compute_network.lb_network.id
      source_ranges = ["130.211.0.0/22", "35.191.0.0/16"]
      allow {
        protocol = "tcp"
      }
      target_tags = ["load-balanced-backend"]
    }

  2. Buat aturan firewall untuk mengizinkan traffic dari subnet khusus proxy Envoy menjangkau backend Anda.

    resource "google_compute_firewall" "fw_allow_proxies" {
      name          = "fw-allow-proxies"
      provider      = google-beta
      project       = "my-host-project-id"
      direction     = "INGRESS"
      network       = google_compute_network.lb_network.id
      source_ranges = ["10.129.0.0/23"]
      allow {
        protocol = "tcp"
        ports    = ["80", "443", "8080"]
      }
      target_tags = ["load-balanced-backend"]
    }

  3. Buat aturan firewall untuk mengizinkan konektivitas SSH ke VM dengan tag jaringan allow-ssh.

    resource "google_compute_firewall" "fw_allow_ssh" {
      name          = "fw-allow-ssh"
      provider      = google-beta
      project       = "my-host-project-id"
      direction     = "INGRESS"
      network       = google_compute_network.lb_network.id
      source_ranges = ["0.0.0.0/0"]
      allow {
        protocol = "tcp"
        ports    = ["22"]
      }
      target_tags = ["allow-ssh"]
    }

Menyiapkan VPC Bersama di project host

Langkah ini termasuk mengaktifkan project host VPC Bersama, membagikan subnet project host, dan melampirkan project layanan ke project host sehingga project layanan dapat menggunakan jaringan VPC Bersama. Untuk menyiapkan VPC Bersama di project host, lihat halaman berikut:

Petunjuk selanjutnya mengasumsikan bahwa Anda telah menyiapkan VPC Bersama. Hal ini mencakup menyiapkan kebijakan IAM untuk organisasi Anda serta menetapkan project host dan layanan.

Jangan lanjutkan sebelum Anda menyiapkan VPC Bersama dan mengaktifkan project host dan layanan.

Mengonfigurasi load balancer dalam project layanan

Contoh ini membuat Load Balancer Aplikasi internal tempat semua komponen load balancing (aturan penerusan, proxy target, peta URL, dan layanan backend) serta backend dibuat dalam project layanan.

Resource jaringan Load Balancer Aplikasi internal, seperti subnet khusus proxy dan subnet untuk instance backend, akan dibuat di project host. Aturan firewall untuk instance backend juga dibuat di project host.

Gambar 1. Load Balancer Aplikasi Internal di VPC Bersama
Gambar 1. Load Balancer Aplikasi Internal di VPC Bersama

Bagian ini menunjukkan cara menyiapkan load balancer dan backend. Langkah-langkah ini harus dilakukan oleh administrator project layanan (atau developer yang beroperasi dalam project layanan) dan tidak memerlukan keterlibatan dari administrator project host. Langkah-langkah di bagian ini sebagian besar mirip dengan langkah standar untuk menyiapkan Load Balancer Aplikasi internal.

Contoh di halaman ini secara eksplisit menetapkan alamat IP internal yang dicadangkan untuk aturan penerusan Load Balancer Aplikasi internal, bukan mengizinkan alokasi alamat IP internal efemeral. Sebagai praktik terbaik, sebaiknya Anda melakukan reservasi alamat IP untuk aturan penerusan.

Membuat backend grup instance terkelola

Bagian ini menunjukkan cara membuat template dan grup instance terkelola. Grup instance terkelola menyediakan instance VM yang menjalankan server backend contoh Load Balancer Aplikasi internal. Traffic dari klien di-load balanced ke server backend ini. Untuk tujuan demonstrasi, backend menyediakan nama host mereka sendiri.

Konsol

  1. Membuat template instance. Di konsol Google Cloud, buka halaman Instance templates.

    Buka Instance templates

    1. Klik Create instance template.
    2. Untuk Name, masukkan l7-ilb-backend-template.
    3. Pastikan Boot disk disetel ke image Debian, seperti Debian GNU/Linux 10 (buster). Petunjuk ini menggunakan perintah yang hanya tersedia di Debian, seperti apt-get. Jika Anda perlu mengubah Boot disk, klik Change.
      1. Untuk Operating System, pilih Debian.
      2. Untuk Version, pilih salah satu image Debian yang tersedia, seperti Debian GNU/Linux 10 (buster).
      3. Klik Select.
    4. Klik Advanced options, lalu klik Networking.
    5. Masukkan Tag jaringan berikut: allow-ssh,load-balanced-backend.
    6. Di bagian Network interfaces, pilih Network shared with me (from host project: HOST_PROJECT_ID).
    7. Pilih subnet lb-frontend-and-backend-subnet dari jaringan lb-network.
    8. Klik Management. Untuk Management, sisipkan skrip berikut ke kolom Startup script.
       #! /bin/bash
       apt-get update
       apt-get install apache2 -y
       a2ensite default-ssl
       a2enmod ssl
       vm_hostname="$(curl -H "Metadata-Flavor:Google" 
      http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" |
      tee /var/www/html/index.html systemctl restart apache2
    9. Klik Create.
  2. Membuat grup instance terkelola. Di Konsol Google Cloud, buka halaman Instance groups.

    Buka Instance groups

    1. Klik Create grup instance.
    2. Pilih Grup instance terkelola baru (stateless). Untuk mengetahui informasi selengkapnya, lihat MIG stateless atau stateful.
    3. Untuk Name, masukkan l7-ilb-backend-example.
    4. Untuk Location, pilih Single zone.
    5. Untuk Region, pilih us-west1.
    6. Untuk Zone, pilih us-west1-a.
    7. Untuk Instance template, pilih l7-ilb-backend-template.
    8. Tentukan jumlah instance yang ingin Anda buat dalam grup.

      Untuk contoh ini, tentukan opsi berikut untuk Autoscaling:

      • Untuk Autoscaling mode, pilih Off:do not autoscale.
      • Untuk Maximum number of instances, masukkan 2.

      Secara opsional, di bagian Autoscaling pada UI, Anda dapat mengonfigurasi grup instance untuk secara otomatis menambahkan atau menghapus instance berdasarkan penggunaan CPU instance.

    9. Klik Create.

gcloud

Petunjuk gcloud dalam panduan ini mengasumsikan bahwa Anda menggunakan Cloud Shell atau lingkungan lain yang menginstal bash.

  1. Buat template instance VM dengan server HTTP menggunakan perintah gcloud compute instance-templates create.

    gcloud compute instance-templates create l7-ilb-backend-template \
    --region=us-west1 \
    --network=projects/HOST_PROJECT_ID/global/networks/lb-network \
    --subnet=projects/HOST_PROJECT_ID/regions/us-west1/subnetworks/lb-frontend-and-backend-subnet \
    --tags=allow-ssh,load-balanced-backend \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --metadata=startup-script='#! /bin/bash
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://metadata.google.internal/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    systemctl restart apache2' \
    --project=SERVICE_PROJECT_ID
    
  2. Buat grup instance terkelola di zona tersebut dengan perintah gcloud compute instance-groups managed create.

    gcloud compute instance-groups managed create l7-ilb-backend-example \
        --zone=us-west1-a \
        --size=2 \
        --template=l7-ilb-backend-template \
        --project=SERVICE_PROJECT_ID
    

Terraform

  1. Buat template instance VM.

    # Instance template
    resource "google_compute_instance_template" "default" {
      name     = "l7-ilb-backend-template"
      provider = google-beta
      project  = "my-service-project-id"
      region   = "us-west1"
      # For machine type, using small. For more options check https://cloud.google.com/compute/docs/machine-types
      machine_type = "e2-small"
      tags         = ["allow-ssh", "load-balanced-backend"]
      network_interface {
        network    = google_compute_network.lb_network.id
        subnetwork = google_compute_subnetwork.lb_frontend_and_backend_subnet.id
        access_config {
          # add external ip to fetch packages like apache2, ssl
        }
      }
      disk {
        source_image = "debian-cloud/debian-10"
        auto_delete  = true
        boot         = true
      }
    
      # install apache2 and serve a simple web page
      metadata = {
        startup-script = <<EOF
        #! /bin/bash
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo a2ensite default-ssl
        sudo a2enmod ssl
        vm_hostname="$(curl -H "Metadata-Flavor:Google" \
        http://metadata.google.internal/computeMetadata/v1/instance/name)"
        sudo echo "Page served from: $vm_hostname" | \
        tee /var/www/html/index.html
        sudo systemctl restart apache2
        EOF
      }
    }
  2. Membuat grup instance terkelola.

    Untuk HTTP:

    # MIG
    resource "google_compute_instance_group_manager" "default" {
      name               = "l7-ilb-backend-example"
      provider           = google-beta
      project            = "my-service-project-id"
      zone               = "us-west1-a"
      base_instance_name = "vm"
      target_size        = 2
      version {
        instance_template = google_compute_instance_template.default.id
        name              = "primary"
      }
      named_port {
        name = "http"
        port = 80
      }
    }

    Untuk HTTPS:

    # MIG
    resource "google_compute_instance_group_manager" "default" {
      name               = "l7-ilb-backend-example"
      provider           = google-beta
      project            = "my-service-project-id"
      zone               = "us-west1-a"
      base_instance_name = "vm"
      target_size        = 2
      version {
        instance_template = google_compute_instance_template.default.id
        name              = "primary"
      }
      named_port {
        name = "https"
        port = 443
      }
    }

Mengonfigurasi load balancer

Bagian ini menunjukkan cara membuat resource Load Balancer Aplikasi internal:

  • Health check HTTP
  • Layanan backend dengan grup instance terkelola sebagai backend
  • Peta URL
  • Sertifikat SSL (hanya diperlukan untuk HTTPS)
  • Proxy target
  • Aturan penerusan

Ketersediaan proxy

Bergantung pada jumlah project layanan yang menggunakan jaringan VPC Bersama, Anda mungkin mencapai kuota atau batas lebih cepat daripada model deployment jaringan yang mana setiap project Google Cloud menghosting jaringannya sendiri.

Misalnya, terkadang region Google Cloud tidak memiliki kapasitas proxy yang cukup untuk Load Balancer Aplikasi internal baru. Jika hal ini terjadi, Konsol Google Cloud akan memberikan pesan peringatan ketersediaan proxy saat Anda membuat load balancer. Untuk mengatasi masalah ini, Anda dapat melakukan salah satu langkah berikut:

  • Tunggu hingga masalah kapasitas selesai.
  • Hubungi tim penjualan Google Cloud Anda untuk meningkatkan batas ini.

Konsol

Mengalihkan konteks ke project layanan

  1. Di konsol Google Cloud, buka halaman Dasbor.

    Buka Dasbor

  2. Klik daftar Pilih dari di bagian atas halaman. Di jendela Select from yang muncul, pilih project layanan tempat Anda ingin membuat load balancer.

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 Terhadap publik atau internal, pilih Internal, lalu klik Berikutnya.
  5. Untuk Cross-region or single region deployment, pilih Best for regional working, lalu klik Next.
  6. Klik Konfigurasikan.

Konfigurasi dasar

  1. Untuk Name load balancer, masukkan l7-ilb-shared-vpc.
  2. Untuk Region, pilih us-west1.
  3. Untuk Network, pilih lb-network (dari Project: HOST_PROJECT_ID).

    Jika Anda melihat peringatan Subnet khusus proxy diperlukan di jaringan VPC Bersama, pastikan admin project host telah membuat proxy-only-subnet di region us-west1 pada jaringan VPC Bersama lb-network. Pembuatan load balancer akan berhasil meskipun Anda tidak memiliki izin untuk melihat subnet khusus proxy di halaman ini.

  4. Biarkan jendela tetap terbuka untuk melanjutkan.

Mengonfigurasi backend

  1. Klik Backend configuration.
  2. Dari menu Create or select backend services, pilih Create a backend service.
  3. Setel Name layanan backend ke l7-ilb-backend-service.
  4. Setel Backend type ke Instance groups.
  5. Di bagian New backend:
    1. Setel Instance group ke l7-ilb-backend-example.
    2. Setel Nomor port ke 80.
    3. Setel Mode penyeimbangan ke Pemanfaatan.
    4. Klik Done.
  6. Di bagian Health check, pilih Create a health check dengan parameter berikut:
    1. Name: l7-ilb-basic-check
    2. Protokol: HTTP
    3. Port: 80
  7. Klik Save and Continue.
  8. Klik Create.

Mengonfigurasi aturan pemilihan rute

  • Klik Routing rules. Pastikan bahwa l7-ilb-backend-service adalah satu-satunya layanan backend untuk host yang tidak cocok dan jalur yang tidak cocok.

Untuk informasi tentang pengelolaan traffic, lihat Menyiapkan pengelolaan traffic.

Mengonfigurasi frontend

Untuk HTTP:

  1. Klik Frontend configuration.
  2. Tetapkan Name ke l7-ilb-forwarding-rule.
  3. Setel Protocol ke HTTP.
  4. Setel Subnetwork ke lb-frontend-and-backend-subnet. Jangan memilih subnet khusus proxy untuk frontend meskipun itu adalah opsi dalam daftar.
  5. Tetapkan Port ke 80.
  6. Klik menu IP address, lalu klik Create IP address.
  7. Di panel Reserve a static internal IP address, berikan detail berikut:
    1. Untuk Name, masukkan ip-address-shared-vpc.
    2. Untuk Alamat IP Statis, klik Pilihan saya adalah. Untuk Custom IP address, masukkan 10.1.2.99.
    3. (Opsional) Jika Anda ingin membagikan alamat IP ini dengan frontend yang berbeda, tetapkan Tujuan ke Dibagikan.
  8. Klik Done.

Untuk HTTPS:

Jika menggunakan HTTPS antara klien dan load balancer, Anda memerlukan satu atau beberapa resource sertifikat SSL untuk mengonfigurasi proxy. Untuk mendapatkan informasi tentang cara membuat resource sertifikat SSL, lihat Sertifikat SSL. Sertifikat yang dikelola Google saat ini tidak didukung dengan Load Balancer Aplikasi internal.

  1. Klik Frontend configuration.
  2. Di kolom Name, masukkan l7-ilb-forwarding-rule.
  3. Pada kolom Protocol, pilih HTTPS (includes HTTP/2).
  4. Setel Subnetwork ke lb-frontend-and-backend-subnet. Jangan memilih subnet khusus proxy untuk frontend meskipun itu adalah opsi dalam daftar.
  5. Pastikan Port ditetapkan ke 443 untuk mengizinkan traffic HTTPS.
  6. Klik menu IP address, lalu klik Create IP address.
  7. Di panel Reserve a static internal IP address, berikan detail berikut:
    1. Untuk Name, masukkan ip-address-shared-vpc.
    2. Untuk Alamat IP Statis, klik Pilihan saya adalah. Untuk Custom IP address, masukkan 10.1.2.99.
    3. (Opsional) Jika Anda ingin membagikan alamat IP ini dengan frontend yang berbeda, tetapkan Tujuan ke Dibagikan.
  8. Klik daftar Sertifikat.
    1. Jika Anda sudah memiliki resource sertifikat SSL yang dikelola sendiri dan ingin digunakan sebagai sertifikat SSL utama, pilih resource tersebut dari menu.
    2. Jika tidak, pilih Create a new certificate.
      1. Isi Name l7-ilb-cert.
      2. Di kolom yang sesuai, upload file berformat PEM:
        • Sertifikat kunci publik
        • Rantai sertifikat
        • Kunci pribadi
      3. Klik Create.
  9. Untuk menambahkan resource sertifikat selain resource sertifikat SSL utama:
    1. Klik Add certificate.
    2. Pilih sertifikat dari daftar Sertifikat atau klik Buat sertifikat baru dan ikuti petunjuk sebelumnya.
  10. Klik Done.

Meninjau dan menyelesaikan konfigurasi

  • Klik Create.

gcloud

  1. Tentukan health check HTTP dengan perintah gcloud compute health-checks create http.

    gcloud compute health-checks create http l7-ilb-basic-check \
       --region=us-west1 \
       --use-serving-port \
       --project=SERVICE_PROJECT_ID
    
  2. Tentukan layanan backend dengan perintah gcloud compute backend-services create.

    gcloud compute backend-services create l7-ilb-backend-service \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --protocol=HTTP \
      --health-checks=l7-ilb-basic-check \
      --health-checks-region=us-west1 \
      --region=us-west1 \
      --project=SERVICE_PROJECT_ID
    
  3. Tambahkan backend ke layanan backend dengan perintah gcloud compute backend-services add-backend.

    gcloud compute backend-services add-backend l7-ilb-backend-service \
      --balancing-mode=UTILIZATION \
      --instance-group=l7-ilb-backend-example \
      --instance-group-zone=us-west1-a \
      --region=us-west1 \
      --project=SERVICE_PROJECT_ID
    
  4. Buat peta URL dengan perintah gcloud compute url-maps create.

    gcloud compute url-maps create l7-ilb-map \
      --default-service=l7-ilb-backend-service \
      --region=us-west1 \
      --project=SERVICE_PROJECT_ID
    
  5. Buat proxy target.

    Untuk HTTP:

    Untuk load balancer HTTP internal, buat proxy target dengan perintah gcloud compute target-http-proxies create.

    gcloud compute target-http-proxies create l7-ilb-proxy \
      --url-map=l7-ilb-map \
      --url-map-region=us-west1 \
      --region=us-west1 \
      --project=SERVICE_PROJECT_ID
    

    Untuk HTTPS:

    Untuk mendapatkan informasi tentang cara membuat resource sertifikat SSL, lihat Sertifikat SSL. Sertifikat yang dikelola Google saat ini tidak didukung dengan Load Balancer Aplikasi internal.

    Menetapkan jalur file ke nama variabel.

    export LB_CERT=path to PEM-formatted file
    
    export LB_PRIVATE_KEY=path to PEM-formatted file
    

    Buat sertifikat SSL regional menggunakan perintah gcloud compute ssl-certificates create.

    gcloud compute ssl-certificates create l7-ilb-cert \
      --certificate=$LB_CERT \
      --private-key=$LB_PRIVATE_KEY \
      --region=us-west1
    

    Gunakan sertifikat SSL regional untuk membuat proxy target dengan perintah gcloud compute target-https-proxies create.

    gcloud compute target-https-proxies create l7-ilb-proxy \
      --url-map=l7-ilb-map \
      --region=us-west1 \
      --ssl-certificates=l7-ilb-cert \
      --project=SERVICE_PROJECT_ID
    
  6. Membuat aturan penerusan.

    Untuk jaringan kustom, Anda harus mereferensikan subnet dalam aturan penerusan.

    Untuk alamat IP aturan penerusan, gunakan lb-frontend-and-backend-subnet. Jika Anda mencoba menggunakan subnet khusus proxy, pembuatan aturan penerusan akan gagal.

    Untuk HTTP:

    Gunakan perintah gcloud compute forwarding-rules create dengan flag yang benar.

    gcloud compute forwarding-rules create l7-ilb-forwarding-rule \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=projects/HOST_PROJECT_ID/global/networks/lb-network \
      --subnet=projects/HOST_PROJECT_ID/regions/us-west1/subnetworks/lb-frontend-and-backend-subnet \
      --address=IP_ADDRESS_NAME \
      --ports=80 \
      --region=us-west1 \
      --target-http-proxy=l7-ilb-proxy \
      --target-http-proxy-region=us-west1 \
      --project=SERVICE_PROJECT_ID
    

    Untuk HTTPS:

    Gunakan perintah gcloud compute forwarding-rules create dengan flag yang benar.

    gcloud compute forwarding-rules create l7-ilb-forwarding-rule \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=projects/HOST_PROJECT_ID/global/networks/lb-network \
      --subnet=projects/HOST_PROJECT_ID/regions/us-west1/subnetworks/lb-frontend-and-backend-subnet \
      --address=IP_ADDRESS_NAME \
      --ports=443 \
      --region=us-west1 \
      --target-https-proxy=l7-ilb-proxy \
      --target-https-proxy-region=us-west1 \
      --project=SERVICE_PROJECT_ID
    

Terraform

  1. Menentukan health check HTTP.

    Untuk HTTP:

    # health check
    resource "google_compute_health_check" "default" {
      name               = "l7-ilb-basic-check"
      provider           = google-beta
      project            = "my-service-project-id"
      timeout_sec        = 1
      check_interval_sec = 1
      http_health_check {
        port = "80"
      }
    }

    Untuk HTTPS:

    # health check
    resource "google_compute_health_check" "default" {
      name               = "l7-ilb-basic-check"
      provider           = google-beta
      project            = "my-service-project-id"
      timeout_sec        = 1
      check_interval_sec = 1
      https_health_check {
        port = "443"
      }
    }

  2. Tentukan layanan backend.

    # backend service
    resource "google_compute_region_backend_service" "default" {
      name                  = "l7-ilb-backend-service"
      provider              = google-beta
      project               = "my-service-project-id"
      region                = "us-west1"
      protocol              = "HTTP"
      load_balancing_scheme = "INTERNAL_MANAGED"
      timeout_sec           = 10
      health_checks         = [google_compute_health_check.default.id]
      backend {
        group           = google_compute_instance_group_manager.default.instance_group
        balancing_mode  = "UTILIZATION"
        capacity_scaler = 1.0
      }
    }
  3. Membuat peta URL.

    # URL map
    resource "google_compute_region_url_map" "default" {
      name            = "l7-ilb-map"
      provider        = google-beta
      project         = "my-service-project-id"
      region          = "us-west1"
      default_service = google_compute_region_backend_service.default.id
    }
  4. Buat proxy target.

    Untuk HTTP:

    # HTTP target proxy
    resource "google_compute_region_target_http_proxy" "default" {
      name     = "l7-ilb-proxy"
      provider = google-beta
      project  = "my-service-project-id"
      region   = "us-west1"
      url_map  = google_compute_region_url_map.default.id
    }

    Untuk HTTPS: Buat sertifikat SSL regional

    Untuk mendapatkan informasi tentang cara membuat resource sertifikat SSL, lihat Sertifikat SSL. Sertifikat yang dikelola Google saat ini tidak didukung dengan Load Balancer Aplikasi internal.

    # Use self-signed SSL certificate
    resource "google_compute_region_ssl_certificate" "default" {
      name        = "l7-ilb-cert"
      provider    = google-beta
      project     = "my-service-project-id"
      region      = "us-west1"
      private_key = file("sample-private.key") # path to PEM-formatted file
      certificate = file("sample-server.cert") # path to PEM-formatted file
    }

    Menggunakan sertifikat SSL regional untuk membuat proxy target

    # HTTPS target proxy
    resource "google_compute_region_target_https_proxy" "default" {
      name             = "l7-ilb-proxy"
      provider         = google-beta
      project          = "my-service-project-id"
      region           = "us-west1"
      url_map          = google_compute_region_url_map.default.id
      ssl_certificates = [google_compute_region_ssl_certificate.default.id]
    }
  5. Membuat aturan penerusan.

    Untuk jaringan kustom, Anda harus mereferensikan subnet dalam aturan penerusan.

    Untuk HTTP:

    # Forwarding rule
    resource "google_compute_forwarding_rule" "default" {
      name                  = "l7-ilb-forwarding-rule"
      provider              = google-beta
      project               = "my-service-project-id"
      region                = "us-west1"
      ip_protocol           = "TCP"
      port_range            = "80"
      load_balancing_scheme = "INTERNAL_MANAGED"
      target                = google_compute_region_target_http_proxy.default.id
      network               = google_compute_network.lb_network.id
      subnetwork            = google_compute_subnetwork.lb_frontend_and_backend_subnet.id
      network_tier          = "PREMIUM"
      depends_on            = [google_compute_subnetwork.lb_frontend_and_backend_subnet]
    }

    Untuk HTTPS:

    # Forwarding rule
    resource "google_compute_forwarding_rule" "default" {
      name                  = "l7-ilb-forwarding-rule"
      provider              = google-beta
      project               = "my-service-project-id"
      region                = "us-west1"
      ip_protocol           = "TCP"
      port_range            = "443"
      load_balancing_scheme = "INTERNAL_MANAGED"
      target                = google_compute_region_target_https_proxy.default.id
      network               = google_compute_network.lb_network.id
      subnetwork            = google_compute_subnetwork.lb_frontend_and_backend_subnet.id
      network_tier          = "PREMIUM"
      depends_on            = [google_compute_subnetwork.lb_frontend_and_backend_subnet]
    }

Menguji load balancer

Untuk menguji load balancer, buat contoh VM klien terlebih dahulu. Kemudian, buat sesi SSH dengan VM dan kirim traffic dari VM ini ke load balancer.

Membuat instance VM pengujian

Klien dapat ditempatkan di project host atau project layanan yang terhubung. Dalam contoh ini, Anda menguji apakah load balancer berfungsi dengan men-deploy VM klien di project layanan. Klien harus menggunakan jaringan VPC Bersama yang sama dan berada di region yang sama dengan load balancer.

Konsol

  1. Di konsol Google Cloud, buka halaman Instance VM.

    Buka instance VM

  2. Klik Create instance.

  3. Tetapkan Name ke client-vm.

  4. Tetapkan Zone ke us-west1-a.

  5. Klik Advanced options, lalu klik Networking.

  6. Masukkan Tag jaringan berikut: allow-ssh,load-balanced-backend.

  7. Di bagian Network interfaces, pilih Network shared with me (from host project: HOST_PROJECT_ID).

  8. Pilih subnet lb-frontend-and-backend-subnet dari jaringan lb-network.

  9. Klik Create.

gcloud

Buat instance VM pengujian.

gcloud compute instances create client-vm \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --subnet=projects/HOST_PROJECT_ID/regions/us-west1/subnetworks/lb-frontend-and-backend-subnet \
    --zone=us-west1-a \
    --tags=allow-ssh \
    --project=SERVICE_PROJECT_ID

Terraform

Buat instance VM pengujian.

resource "google_compute_instance" "vm_test" {
  name         = "client-vm"
  provider     = google-beta
  project      = "my-service-project-id"
  zone         = "us-west1-a"
  machine_type = "e2-small"
  tags         = ["allow-ssh"]
  network_interface {
    network    = google_compute_network.lb_network.id
    subnetwork = google_compute_subnetwork.lb_frontend_and_backend_subnet.id
  }
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-10"
    }
  }
  lifecycle {
    ignore_changes = [
      metadata["ssh-keys"]
    ]
  }
}

Mengirim traffic ke load balancer

Gunakan SSH untuk terhubung ke instance yang baru saja Anda buat, dan uji bahwa layanan HTTP(S) di backend dapat dijangkau melalui alamat IP aturan penerusan Load Balancer Aplikasi internal dan traffic tersebut sedang di-load balanced di seluruh instance backend.

  1. Hubungkan ke instance klien dengan SSH.

    gcloud compute ssh client-vm \
       --zone=us-west1-a
    
  2. Pastikan alamat IP menampilkan nama host. Ganti LB_IP_ADDRESS dengan alamat IP load balancer.

    curl LB_IP_ADDRESS
    

    Untuk pengujian HTTPS, ganti curl dengan kode berikut:

    curl -k -s 'https://LB_IP_ADDRESS:443'
    

    Flag -k menyebabkan curl melewati validasi sertifikat.

Mengonfigurasi load balancer dengan layanan backend lintas-project

Contoh sebelumnya di halaman ini menunjukkan cara menyiapkan deployment VPC Bersama tempat semua komponen load balancer dan backend-nya dibuat dalam project layanan.

Load Balancer Aplikasi Internal juga dapat Anda gunakan untuk mengonfigurasi deployment VPC Bersama, yakni peta URL di satu host atau project layanan dapat mereferensikan layanan backend (dan backend) yang terletak di beberapa project layanan di lingkungan VPC Bersama. Ini disebut sebagai pereferensi layanan lintas-project.

Anda dapat menggunakan langkah-langkah di bagian ini sebagai referensi untuk mengonfigurasi salah satu kombinasi yang didukung yang tercantum di sini:

  • Aturan penerusan, proxy target, dan peta URL dalam project host, serta layanan backend dalam project layanan
  • Aturan penerusan, proxy target, dan peta URL dalam suatu project layanan, serta layanan backend di project layanan lain

Rujukan layanan lintas project dapat digunakan dengan grup instance, NEG serverless, atau jenis backend lain yang didukung. Jika menggunakan NEG serverless, Anda perlu membuat VM di jaringan VPC tempat Anda ingin membuat frontend load balancer. Sebagai contoh, lihat artikel Membuat instance VM di subnet tertentu dalam artikel Menyiapkan Load Balancer Aplikasi internal dengan Cloud Run.

Persyaratan penyiapan

Contoh ini mengonfigurasi load balancer contoh dengan frontend dan backend-nya di dua project layanan yang berbeda.

Jika belum melakukannya, Anda harus menyelesaikan semua langkah prasyarat untuk menyiapkan VPC Bersama dan mengonfigurasi aturan jaringan, subnet, dan firewall yang diperlukan untuk contoh ini. Untuk mengetahui petunjuknya, lihat referensi berikut:

Gambar 2. Frontend dan backend load balancer di berbagai project layanan
Gambar 2. Frontend dan backend load balancer di berbagai project layanan

Membuat backend dan layanan backend di project layanan B

Semua langkah di bagian ini harus dilakukan di project layanan B.

Konsol

  1. Membuat template instance. Di konsol Google Cloud, buka halaman Instance templates.

    Buka Instance templates

    1. Klik Create instance template.
    2. Masukkan Nama untuk template instance: cross-ref-backend-template.
    3. Pastikan Boot disk disetel ke image Debian, seperti Debian GNU/Linux 10 (buster). Petunjuk ini menggunakan perintah yang hanya tersedia di Debian, seperti apt-get. Jika Anda perlu mengubah Boot disk, klik Change.
      1. Untuk Operating System, pilih Debian.
      2. Untuk Version, pilih salah satu image Debian yang tersedia, seperti Debian GNU/Linux 10 (buster).
      3. Klik Select.
    4. Klik Advanced options, lalu klik Networking.
    5. Masukkan Tag jaringan berikut: allow-ssh,load-balanced-backend.
    6. Di bagian Network interfaces, pilih Network shared with me (from host project: HOST_PROJECT_ID).
    7. Pilih subnet lb-frontend-and-backend-subnet dari jaringan lb-network.
    8. Klik Management. Untuk Management, sisipkan skrip berikut ke kolom Startup script.
      #! /bin/bash
      apt-get update
      apt-get install apache2 -y
      a2ensite default-ssl
      a2enmod ssl
      vm_hostname="$(curl -H "Metadata-Flavor:Google" 
      http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" |
      tee /var/www/html/index.html systemctl restart apache2
    9. Klik Create.
  2. Membuat grup instance terkelola. Di Konsol Google Cloud, buka halaman Instance groups.

    Buka Instance groups

    1. Klik Create grup instance.
    2. Pilih Grup instance terkelola baru (stateless). Untuk mengetahui informasi selengkapnya, lihat MIG stateless atau stateful.
    3. Masukkan Nama untuk grup instance: cross-ref-ig-backend.
    4. Untuk Location, pilih Single zone.
    5. Untuk Region, pilih us-west1.
    6. Untuk Zone, pilih us-west1-a.
    7. Untuk Instance template, pilih cross-ref-backend-template.
    8. Tentukan jumlah instance yang ingin Anda buat dalam grup.

      Untuk contoh ini, tentukan opsi berikut untuk Autoscaling:

      • Untuk Autoscaling mode, pilih Off:do not autoscale.
      • Untuk Maximum number of instances, masukkan 2.

      Secara opsional, di bagian Autoscaling pada UI, Anda dapat mengonfigurasi grup instance untuk secara otomatis menambahkan atau menghapus instance berdasarkan penggunaan CPU instance.

    9. Klik Create.

  3. Membuat layanan backend regional. Sebagai bagian dari langkah ini, kita juga akan membuat health check dan menambahkan backend ke layanan backend. Di konsol Google Cloud, buka halaman Backend.

    Buka Backend

    1. Klik Create regional backend service.
    2. Masukkan Nama untuk layanan backend: cross-ref-backend-service.
    3. Untuk Region, pilih us-west1.
    4. Untuk Load balancer type, pilih Regional internal Application Load Balancer (INTERNAL_MANAGED).
    5. Setel Backend type ke Instance groups.
    6. Di bagian Backends, tetapkan Network ke lb-network.
    7. Klik Add backend, lalu tetapkan kolom berikut:
      1. Tetapkan Instance group ke cross-ref-ig-backend.
      2. Masukkan Nomor port: 80.
      3. Setel Mode penyeimbangan ke Pemanfaatan.
      4. Klik Done.
    8. Di bagian Health check, pilih Create a health check dengan parameter berikut:
      1. Name: cross-ref-http-health-check
      2. Protokol: HTTP
      3. Port: 80
      4. Klik Save.
    9. Klik Lanjutkan.
    10. Opsional: Di bagian Tambahkan izin, masukkan akun utama IAM (biasanya alamat email) Admin Load Balancing dari project lain, sehingga mereka dapat menggunakan layanan backend ini untuk load balancer dalam project-nya sendiri. Tanpa izin ini, Anda tidak dapat menggunakan referensi layanan lintas project.

      Jika tidak memiliki izin untuk menetapkan kebijakan kontrol akses untuk layanan backend dalam project ini, Anda masih dapat membuat layanan backend sekarang, dan pengguna yang diberi otorisasi dapat melakukan langkah ini nanti seperti yang dijelaskan di bagian, Memberikan izin ke Admin Load Balancer untuk menggunakan layanan backend. Bagian tersebut juga menjelaskan cara memberikan akses ke semua layanan backend dalam project ini, sehingga Anda tidak perlu memberikan akses setiap kali membuat layanan backend baru.

    11. Klik Create.

gcloud

  1. Buat template instance VM dengan server HTTP menggunakan perintah gcloud compute instance-templates create.

    gcloud compute instance-templates create BACKEND_IG_TEMPLATE \
        --region=us-west1 \
        --network=projects/HOST_PROJECT_ID/global/networks/lb-network \
        --subnet=projects/HOST_PROJECT_ID/regions/us-west1/subnetworks/lb-frontend-and-backend-subnet \
        --tags=allow-ssh,load-balanced-backend \
        --image-family=debian-10 \
        --image-project=debian-cloud \
        --metadata=startup-script='#! /bin/bash
        apt-get update
        apt-get install apache2 -y
        a2ensite default-ssl
        a2enmod ssl
        vm_hostname="$(curl -H "Metadata-Flavor:Google" \
        http://metadata.google.internal/computeMetadata/v1/instance/name)"
        echo "Page served from: $vm_hostname" | \
        tee /var/www/html/index.html
        systemctl restart apache2' \
        --project=SERVICE_PROJECT_B_ID
    

    Ganti kode berikut:

    • BACKEND_IG_TEMPLATE: nama untuk template grup instance.
    • SERVICE_PROJECT_B_ID: project ID untuk project layanan B, tempat backend load balancer dan layanan backend sedang dibuat.
    • HOST_PROJECT_ID: project ID untuk project host VPC Bersama.
  2. Buat grup instance terkelola di zona tersebut dengan perintah gcloud compute instance-groups managed create.

    gcloud compute instance-groups managed create BACKEND_MIG \
        --zone=us-west1-a \
        --size=2 \
        --template=BACKEND_IG_TEMPLATE \
        --project=SERVICE_PROJECT_B_ID
    

    Ganti kode berikut:

    • BACKEND_MIG: nama untuk grup instance backend.
  3. Tentukan health check HTTP dengan perintah gcloud compute health-checks create http.

    gcloud compute health-checks create http HTTP_HEALTH_CHECK_NAME \
      --region=us-west1 \
      --use-serving-port \
      --project=SERVICE_PROJECT_B_ID
    

    Ganti kode berikut:

    • HTTP_HEALTH_CHECK_NAME: nama untuk health check HTTP.
  4. Tentukan layanan backend dengan perintah gcloud compute backend-services create.

    gcloud compute backend-services create BACKEND_SERVICE_NAME \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --protocol=HTTP \
      --health-checks=HTTP_HEALTH_CHECK_NAME \
      --health-checks-region=us-west1 \
      --region=us-west1 \
      --project=SERVICE_PROJECT_B_ID
    

    Ganti kode berikut:

    • BACKEND_SERVICE_NAME: nama untuk layanan backend yang dibuat di project layanan B.
  5. Tambahkan backend ke layanan backend dengan perintah gcloud compute backend-services add-backend.

    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
      --balancing-mode=UTILIZATION \
      --instance-group=BACKEND_MIG \
      --instance-group-zone=us-west1-a \
      --region=us-west1 \
      --project=SERVICE_PROJECT_B_ID
    

Terraform

  1. Membuat template instance.

    # Instance template
    resource "google_compute_instance_template" "default" {
      name     = "l7-ilb-backend-template"
      provider = google-beta
      project  = "my-service-project-b-id"
      region   = "us-west1"
      # For machine type, using small. For more options check https://cloud.google.com/compute/docs/machine-types
      machine_type = "e2-small"
      tags         = ["allow-ssh", "load-balanced-backend"]
      network_interface {
        network    = google_compute_network.lb_network.id
        subnetwork = google_compute_subnetwork.lb_frontend_and_backend_subnet.id
        access_config {
          # add external ip to fetch packages like apache2, ssl
        }
      }
      disk {
        source_image = "debian-cloud/debian-10"
        auto_delete  = true
        boot         = true
      }
    
      # install apache2 and serve a simple web page
      metadata = {
        startup-script = <<EOF
        #! /bin/bash
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo a2ensite default-ssl
        sudo a2enmod ssl
        vm_hostname="$(curl -H "Metadata-Flavor:Google" \
        http://metadata.google.internal/computeMetadata/v1/instance/name)"
        sudo echo "Page served from: $vm_hostname" | \
        tee /var/www/html/index.html
        sudo systemctl restart apache2
        EOF
      }
    }
  2. Membuat grup instance terkelola.

    Untuk HTTP

    # MIG
    resource "google_compute_instance_group_manager" "default" {
      name               = "l7-ilb-backend-example"
      provider           = google-beta
      project            = "my-service-project-b-id"
      zone               = "us-west1-a"
      base_instance_name = "vm"
      target_size        = 2
      version {
        instance_template = google_compute_instance_template.default.id
        name              = "primary"
      }
      named_port {
        name = "http"
        port = 80
      }
    }

    Untuk HTTPS

    # MIG
    resource "google_compute_instance_group_manager" "default" {
      name               = "l7-ilb-backend-example"
      provider           = google-beta
      project            = "my-service-project-b-id"
      zone               = "us-west1-a"
      base_instance_name = "vm"
      target_size        = 2
      version {
        instance_template = google_compute_instance_template.default.id
        name              = "primary"
      }
      named_port {
        name = "https"
        port = 443
      }
    }
  3. Membuat health check untuk backend.

    Untuk HTTP

    # health check
    resource "google_compute_health_check" "default" {
      name               = "l7-ilb-basic-check"
      provider           = google-beta
      project            = "my-service-project-b-id"
      timeout_sec        = 1
      check_interval_sec = 1
      http_health_check {
        port = "80"
      }
    }

    Untuk HTTPS

    # health check
    resource "google_compute_health_check" "default" {
      name               = "l7-ilb-basic-check"
      provider           = google-beta
      project            = "my-service-project-b-id"
      timeout_sec        = 1
      check_interval_sec = 1
      https_health_check {
        port = "443"
      }
    }
  4. Membuat layanan backend regional.

    # backend service
    resource "google_compute_region_backend_service" "default" {
      name                  = "l7-ilb-backend-service"
      provider              = google-beta
      project               = "my-service-project-b-id"
      region                = "us-west1"
      protocol              = "HTTP"
      load_balancing_scheme = "INTERNAL_MANAGED"
      timeout_sec           = 10
      health_checks         = [google_compute_health_check.default.id]
      backend {
        group           = google_compute_instance_group_manager.default.instance_group
        balancing_mode  = "UTILIZATION"
        capacity_scaler = 1.0
      }
    }

Membuat frontend load balancer dan peta URL di project layanan A

Semua langkah di bagian ini harus dilakukan dalam project layanan A.

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 Terhadap publik atau internal, pilih Internal, lalu klik Berikutnya.
  5. Untuk Cross-region or single region deployment, pilih Best for regional working, lalu klik Next.
  6. Klik Konfigurasikan.

Konfigurasi dasar

  1. Masukkan Nama untuk load balancer.
  2. Untuk Region, pilih us-west1.
  3. Untuk Network, pilih lb-network (dari Project: HOST_PROJECT_NAME).

    Jika Anda melihat peringatan Subnet khusus proxy diperlukan di jaringan VPC Bersama, pastikan admin project host telah membuat proxy-only-subnet di region us-west1 pada jaringan VPC Bersama lb-network. Pembuatan load balancer akan berhasil meskipun Anda tidak memiliki izin untuk melihat subnet khusus proxy di halaman ini.

  4. Biarkan jendela tetap terbuka untuk melanjutkan.

Mengonfigurasi backend

  1. Klik Backend configuration.
  2. Klik Layanan backend lintas project.
  3. Untuk Project ID, masukkan project ID untuk project layanan B.
  4. Untuk Backend service name, masukkan nama layanan backend dari project layanan B yang ingin Anda gunakan. Untuk contoh ini, parameternya adalah cross-ref-backend-service.
  5. Klik Add backend service.

Mengonfigurasi aturan pemilihan rute

  • Klik Routing rules. Pastikan cross-ref-backend-service adalah satu-satunya layanan backend untuk setiap host yang tidak cocok dan jalur yang tidak cocok.

Untuk informasi tentang pengelolaan traffic, lihat Menyiapkan pengelolaan traffic.

Mengonfigurasi frontend

Agar referensi layanan lintas-project berfungsi, frontend harus menggunakan jaringan yang sama (lb-network) dari project host VPC Bersama yang digunakan untuk membuat layanan backend.

Untuk HTTP:

  1. Klik Frontend configuration.
  2. Masukkan Nama untuk aturan penerusan: cross-ref-http-forwarding-rule.
  3. Setel Protocol ke HTTP.
  4. Setel Subnetwork ke lb-frontend-and-backend-subnet. Jangan memilih subnet khusus proxy untuk frontend meskipun itu adalah opsi dalam daftar.
  5. Tetapkan Port ke 80.
  6. Klik menu IP address, lalu klik Create IP address.
  7. Di panel Reserve a static internal IP address, berikan detail berikut:
    1. Untuk Name, masukkan cross-ref-ip-address.
    2. Untuk Alamat IP Statis, klik Pilihan saya adalah. Untuk Custom IP address, masukkan 10.1.2.98.
    3. (Opsional) Jika Anda ingin membagikan alamat IP ini dengan frontend yang berbeda, tetapkan Tujuan ke Dibagikan.
  8. Klik Done.

Untuk HTTPS:

Jika menggunakan HTTPS antara klien dan load balancer, Anda memerlukan satu atau beberapa resource sertifikat SSL untuk mengonfigurasi proxy. Untuk mendapatkan informasi tentang cara membuat resource sertifikat SSL, lihat Sertifikat SSL. Sertifikat yang dikelola Google saat ini tidak didukung dengan Load Balancer Aplikasi internal.

  1. Klik Frontend configuration.
  2. Masukkan Nama untuk aturan penerusan: cross-ref-https-forwarding-rule.
  3. Pada kolom Protocol, pilih HTTPS (includes HTTP/2).
  4. Setel Subnetwork ke lb-frontend-and-backend-subnet. Jangan memilih subnet khusus proxy untuk frontend meskipun itu adalah opsi dalam daftar.
  5. Pastikan Port ditetapkan ke 443 untuk mengizinkan traffic HTTPS.
  6. Klik menu IP address, lalu klik Create IP address.
  7. Di panel Reserve a static internal IP address, berikan detail berikut:
    1. Untuk Name, masukkan cross-ref-ip-address.
    2. Untuk Alamat IP Statis, klik Pilihan saya adalah. Untuk Custom IP address, masukkan 10.1.2.98.
    3. (Opsional) Jika Anda ingin membagikan alamat IP ini dengan frontend yang berbeda, tetapkan Tujuan ke Dibagikan.
  8. Klik daftar Sertifikat.
    1. Jika Anda sudah memiliki resource sertifikat SSL yang dikelola sendiri yang ingin digunakan sebagai sertifikat SSL utama, pilih resource tersebut dari menu.
    2. Jika tidak, pilih Create a new certificate.
      1. Masukkan Nama untuk sertifikat SSL.
      2. Di kolom yang sesuai, upload file berformat PEM:
        • Sertifikat kunci publik
        • Rantai sertifikat
        • Kunci pribadi
      3. Klik Create.
  9. Untuk menambahkan resource sertifikat selain resource sertifikat SSL utama:
    1. Klik Add certificate.
    2. Pilih sertifikat dari daftar Sertifikat atau klik Buat sertifikat baru dan ikuti petunjuk sebelumnya.
  10. Klik Done.

Meninjau dan menyelesaikan konfigurasi

  • Klik Create.

Menguji load balancer

Setelah load balancer dibuat, uji load balancer menggunakan langkah-langkah yang dijelaskan dalam Menguji load balancer.

gcloud

  1. Buat peta URL dan tetapkan layanan default ke layanan backend yang dibuat di project layanan B.

    gcloud compute url-maps create URL_MAP_NAME \
        --default-service=projects/SERVICE_PROJECT_B_ID/regions/us-west1/backendServices/BACKEND_SERVICE_NAME \
        --region=us-west1 \
        --project=SERVICE_PROJECT_A_ID
    

    Ganti kode berikut:

    • URL_MAP_NAME: nama untuk peta URL.
    • BACKEND_SERVICE_NAME: nama untuk layanan backend yang dibuat di project layanan B.
    • SERVICE_PROJECT_B_ID: project ID untuk project layanan B, tempat backend load balancer dan layanan backend dibuat.
    • SERVICE_PROJECT_A_ID: project ID untuk project layanan A, tempat frontend load balancer dibuat.

    Pembuatan peta URL akan gagal jika Anda tidak memiliki izin compute.backendServices.use untuk layanan backend dalam project layanan B.

  2. Buat proxy target.

    Untuk HTTP:

    gcloud compute target-http-proxies create HTTP_TARGET_PROXY_NAME \
      --url-map=URL_MAP_NAME \
      --url-map-region=us-west1 \
      --region=us-west1 \
      --project=SERVICE_PROJECT_A_ID
    

    Ganti kode berikut:

    • HTTP_TARGET_PROXY_NAME: nama untuk proxy HTTP target.

    Untuk HTTPS:

    Buat sertifikat SSL regional menggunakan perintah gcloud compute ssl-certificates create.

    gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
      --certificate=PATH_TO_CERTIFICATE \
      --private-key=PATH_TO_PRIVATE_KEY \
      --region=us-west1 \
      --project=SERVICE_PROJECT_A_ID
    

    Ganti kode berikut:

    • SSL_CERTIFICATE_NAME: nama untuk resource sertifikat SSL.
    • PATH_TO_CERTIFICATE: jalur ke file sertifikat SSL lokal dalam format PEM.
    • PATH_TO_PRIVATE_KEY: jalur ke kunci pribadi sertifikat SSL lokal dalam format PEM.

    Gunakan sertifikat SSL regional untuk membuat proxy target dengan perintah gcloud compute target-https-proxies create.

    gcloud compute target-https-proxies create HTTPS_TARGET_PROXY_NAME \
      --url-map=URL_MAP_NAME \
      --region=us-west1 \
      --ssl-certificates=SSL_CERTIFICATE_NAME \
      --project=SERVICE_PROJECT_A_ID
    

    Ganti kode berikut:

    • HTTPS_TARGET_PROXY_NAME: nama untuk proxy HTTPS target.
  3. Membuat aturan penerusan. Agar layanan lintas project mereferensikan berfungsi, aturan penerusan harus menggunakan jaringan yang sama (lb-network) dari project host VPC Bersama yang digunakan untuk membuat layanan backend.

    Untuk HTTP:

    gcloud compute forwarding-rules create HTTP_FORWARDING_RULE_NAME \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=projects/HOST_PROJECT_ID/global/networks/lb-network \
      --subnet=projects/HOST_PROJECT_ID/regions/us-west1/subnetworks/lb-frontend-and-backend-subnet \
      --address=IP_ADDRESS_CROSS_REF \
      --ports=80 \
      --region=us-west1 \
      --target-http-proxy=HTTP_TARGET_PROXY_NAME \
      --target-http-proxy-region=us-west1 \
      --project=SERVICE_PROJECT_A_ID
    

    Ganti kode berikut:

    • HTTP_FORWARDING_RULE_NAME: nama untuk aturan penerusan yang digunakan untuk menangani traffic HTTP.

    Untuk HTTPS:

    gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=projects/HOST_PROJECT_ID/global/networks/lb-network \
      --subnet=projects/HOST_PROJECT_ID/regions/us-west1/subnetworks/lb-frontend-and-backend-subnet \
      --address=IP_ADDRESS_CROSS_REF \
      --ports=443 \
      --region=us-west1 \
      --target-https-proxy=HTTPS_TARGET_PROXY_NAME \
      --target-https-proxy-region=us-west1 \
      --project=SERVICE_PROJECT_A_ID
    

    Ganti kode berikut:

    • HTTPS_FORWARDING_RULE_NAME: nama untuk aturan penerusan yang digunakan untuk menangani traffic HTTPS.
  4. Untuk menguji load balancer, gunakan langkah-langkah yang dijelaskan dalam artikel Menguji load balancer.

Terraform

  1. Membuat peta URL.

    # URL map
    resource "google_compute_region_url_map" "default" {
      name            = "l7-ilb-map"
      provider        = google-beta
      project         = "my-service-project-a-id"
      region          = "us-west1"
      default_service = google_compute_region_backend_service.default.id
    }
  2. Buat proxy target.

    Untuk HTTP

    # HTTP target proxy
    resource "google_compute_region_target_http_proxy" "default" {
      name     = "l7-ilb-proxy"
      provider = google-beta
      project  = "my-service-project-a-id"
      region   = "us-west1"
      url_map  = google_compute_region_url_map.default.id
    }

    Untuk HTTPS

    Membuat sertifikat SSL regional

    # Use self-signed SSL certificate
    resource "google_compute_region_ssl_certificate" "default" {
      name        = "l7-ilb-cert"
      provider    = google-beta
      project     = "my-service-project-a-id"
      region      = "us-west1"
      private_key = file("sample-private.key") # path to PEM-formatted file
      certificate = file("sample-server.cert") # path to PEM-formatted file
    }

    Menggunakan sertifikat SSL regional untuk membuat proxy target

    # HTTPS target proxy
    resource "google_compute_region_target_https_proxy" "default" {
      name             = "l7-ilb-proxy"
      provider         = google-beta
      project          = "my-service-project-a-id"
      region           = "us-west1"
      url_map          = google_compute_region_url_map.default.id
      ssl_certificates = [google_compute_region_ssl_certificate.default.id]
    }
  3. Membuat aturan penerusan.

    Untuk HTTP

    # Forwarding rule
    resource "google_compute_forwarding_rule" "default" {
      name                  = "l7-ilb-forwarding-rule"
      provider              = google-beta
      project               = "my-service-project-a-id"
      region                = "us-west1"
      ip_protocol           = "TCP"
      port_range            = "80"
      load_balancing_scheme = "INTERNAL_MANAGED"
      target                = google_compute_region_target_http_proxy.default.id
      network               = google_compute_network.lb_network.id
      subnetwork            = google_compute_subnetwork.lb_frontend_and_backend_subnet.id
      network_tier          = "PREMIUM"
      depends_on            = [google_compute_subnetwork.lb_frontend_and_backend_subnet]
    }

    Untuk HTTPS

    # Forwarding rule
    resource "google_compute_forwarding_rule" "default" {
      name                  = "l7-ilb-forwarding-rule"
      provider              = google-beta
      project               = "my-service-project-a-id"
      region                = "us-west1"
      ip_protocol           = "TCP"
      port_range            = "443"
      load_balancing_scheme = "INTERNAL_MANAGED"
      target                = google_compute_region_target_https_proxy.default.id
      network               = google_compute_network.lb_network.id
      subnetwork            = google_compute_subnetwork.lb_frontend_and_backend_subnet.id
      network_tier          = "PREMIUM"
      depends_on            = [google_compute_subnetwork.lb_frontend_and_backend_subnet]
    }
  4. Untuk menguji load balancer, gunakan langkah-langkah yang dijelaskan dalam artikel Menguji load balancer.

Memberikan izin ke Admin Load Balancer untuk menggunakan layanan backend

Jika Anda ingin load balancer mereferensikan layanan backend di project layanan lain, Admin Load Balancer harus memiliki izin compute.backendServices.use. Untuk memberikan izin ini, Anda dapat menggunakan peran IAM yang telah ditentukan yang disebut Compute Load Balancer Services User (roles/compute.loadBalancerServiceUser). Peran ini harus diberikan oleh Service Project Admin dan dapat diterapkan di level project atau pada level layanan backend individual.

Langkah ini tidak diperlukan jika Anda sudah memberikan izin yang diperlukan di tingkat layanan backend saat membuat layanan backend. Anda dapat melewati bagian ini atau melanjutkan membaca untuk mempelajari cara memberikan akses ke semua layanan backend dalam project ini, sehingga Anda tidak perlu memberikan akses setiap kali membuat layanan backend baru.

Dalam contoh ini, Admin Project Layanan dari project layanan B harus menjalankan salah satu perintah berikut untuk memberikan izin compute.backendServices.use kepada Admin Load Balancer dari project layanan A. Hal ini dapat dilakukan di level project (untuk semua layanan backend dalam project) atau per layanan backend.

Konsol

Izin level project

Gunakan langkah-langkah berikut untuk memberikan izin ke semua layanan backend di project Anda.

Anda memerlukan izin compute.regionBackendServices.setIamPolicy dan resourcemanager.projects.setIamPolicy untuk menyelesaikan langkah ini.

  1. Di konsol Google Cloud, buka halaman Layanan load balancing bersama.

    Buka Layanan load balancing bersama

  2. Di bagian All backend service permissions (project-level permissions), pilih project Anda.

  3. Jika panel izin tidak terlihat, klik Tampilkan panel izin. Panel Izin level project akan terbuka di sebelah kanan.

  4. Klik Add principal.

  5. Untuk Akun utama baru, masukkan alamat email akun utama atau ID lainnya.

  6. Untuk Role, pilih peran Compute Load Balancer Services User dari menu drop-down.

  7. Opsional: Tambahkan kondisi ke peran.

  8. Klik Save.

Izin tingkat resource untuk setiap layanan backend

Gunakan langkah-langkah berikut untuk memberikan izin ke setiap layanan backend di project Anda.

Anda memerlukan izin compute.regionBackendServices.setIamPolicy untuk menyelesaikan langkah ini.

gcloud

Izin level project

Gunakan langkah-langkah berikut untuk memberikan izin ke semua layanan backend di project Anda.

Anda memerlukan izin compute.regionBackendServices.setIamPolicy dan resourcemanager.projects.setIamPolicy untuk menyelesaikan langkah ini.

gcloud projects add-iam-policy-binding SERVICE_PROJECT_B_ID \
    --member="user:LOAD_BALANCER_ADMIN" \
    --role="roles/compute.loadBalancerServiceUser"

Izin tingkat resource untuk setiap layanan backend

Di tingkat layanan backend, Admin Project Layanan dapat menggunakan salah satu dari perintah berikut untuk memberikan peran Pengguna Layanan Load Balancer Compute (roles/compute.loadBalancerServiceUser).

Anda memerlukan izin compute.regionBackendServices.setIamPolicy untuk menyelesaikan langkah ini.

gcloud projects add-iam-policy-binding SERVICE_PROJECT_B_ID \
    --member="user:LOAD_BALANCER_ADMIN" \
    --role="roles/compute.loadBalancerServiceUser" \
    --condition='expression=resource.name=="projects/SERVICE_PROJECT_B_ID/regions/us-west1/backend-services/BACKEND_SERVICE_NAME",title=Shared VPC condition'

atau

gcloud compute backend-services add-iam-policy-binding BACKEND_SERVICE_NAME \
    --member="user:LOAD_BALANCER_ADMIN" \
    --role="roles/compute.loadBalancerServiceUser" \
    --project=SERVICE_PROJECT_B_ID \
    --region=us-west1

Untuk menggunakan perintah ini, ganti LOAD_BALANCER_ADMIN dengan utama pengguna—misalnya, test-user@gmail.com.

Anda juga dapat mengonfigurasi izin IAM agar hanya berlaku untuk subset layanan backend regional dengan menggunakan kondisi dan menentukan atribut kondisi.

Langkah selanjutnya