Menyiapkan perutean berbasis parameter kueri dan header untuk Load Balancer Aplikasi klasik

Halaman ini berisi dua contoh untuk Load Balancer Aplikasi klasik:

Guna mengonfigurasi pengelolaan traffic untuk Load Balancer Aplikasi eksternal global dan Load Balancer Aplikasi eksternal regional, lihat halaman berikut:

Sebelum memulai

Menyiapkan pemilihan rute berbasis parameter kueri

Contoh ini menunjukkan penggunaan parameter kueri untuk melakukan pengujian A/B dengan melakukan pencocokan pada string kueri.

Menambahkan dua grup instance backend

Agar perutean bermanfaat, Anda harus memiliki beberapa backend.

Untuk menyiapkan dua backend, VM harus berada dalam dua grup instance. Panduan ini menjelaskan cara membuat grup instance terkelola dengan VM Linux yang menjalankan Apache, kemudian menyiapkan load balancing.

Grup instance terkelola menyediakan VM yang menjalankan server backend load balancer HTTP eksternal. Untuk tujuan demonstrasi, backend menyediakan nama host-nya sendiri.

Untuk memudahkan, backend berada di region yang sama. Jika menginginkan penyiapan multi-region, Anda harus memiliki penyiapan template instance untuk region kedua.

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 lb-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.
    4. Klik Advanced options.
    5. Klik Networking dan konfigurasikan kolom berikut:
      1. Untuk Tag jaringan, masukkan allow-health-check.
    6. Klik Management. Masukkan skrip berikut ke kolom Skrip startup.

      #! /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
      
    7. Klik Create.

  2. Membuat grup instance terkelola. Buka halaman Grup instance di konsol Google Cloud.

    Buka Instance groups

    1. Klik Create grup instance.
    2. Pilih New managed instance group (stateless). Untuk mengetahui informasi selengkapnya, lihat MIG stateless atau stateful.
    3. Untuk Name, masukkan first-example-ig.
    4. Di bagian Location, pilih Single zone.
    5. Untuk Wilayah, pilih wilayah yang Anda inginkan. Contoh ini menggunakan us-east1.
    6. Untuk Zone, pilih us-east1-b.
    7. Di bagian Instance template, pilih template instance lb-backend-template.
    8. Di bagian Jumlah maksimum instance, masukkan 2.
    9. Di bagian Autoscaling mode, pilih Off:do not autoscale.
    10. Klik Create.

Buat grup instance terkelola lain seperti ini. Beri nama kedua second-example-ig, dan dasarkan template lb-backend-template.

gcloud

  1. Membuat template instance.

    gcloud compute instance-templates create `lb-backend-template` \
       --region=us-east1 \
       --network=default \
       --subnet=default \
       --tags=allow-health-check \
       --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'
    
  2. Membuat grup instance terkelola pertama berdasarkan template tersebut.

    gcloud compute instance-groups managed create first-example-ig \
       --template=lb-backend-template --size=2 --zone=us-east1-b
    
  3. Membuat grup instance terkelola kedua berdasarkan template tersebut.

    gcloud compute instance-groups managed create second-example-ig \
       --template=lb-backend-template --size=2 --zone=us-east1-c
    

Mengonfigurasi aturan firewall

Dalam contoh ini, Anda membuat aturan firewall fw-allow-health-check. Ini adalah aturan masuk yang memungkinkan traffic dari sistem health check Google Cloud (130.211.0.0/22 dan 35.191.0.0/16). Contoh ini menggunakan tag target allow-health-check untuk mengidentifikasi VM.

Konsol

  1. Pada konsol Google Cloud, buka halaman Kebijakan Firewall.
    Buka kebijakan Firewall
  2. Klik Create firewall rule untuk membuat aturan firewall kedua:
  3. Masukkan Nama fw-allow-health-check.
  4. Di bagian Jaringan, pilih Default.
  5. Di bagian Target, pilih Tag target yang ditentukan.
  6. Isi kolom Tag target dengan allow-health-check.
  7. Tetapkan Filter sumber ke rentang IPv4.
  8. Setel Rentang IPv4 sumber ke 130.211.0.0/22 dan 35.191.0.0/16.
  9. Di bagian Protocols and ports, pilih Specified protocols and ports.
  10. Pilih kotak centang TCP dan masukkan 80 untuk nomor port.
  11. Klik Create.

gcloud

gcloud compute firewall-rules create fw-allow-health-check \
    --network=default \
    --action=allow \
    --direction=ingress \
    --source-ranges=130.211.0.0/22,35.191.0.0/16 \
    --target-tags=allow-health-check \
    --rules=tcp

Melakukan reservasi alamat IP eksternal

Setelah instance Anda aktif dan berjalan, siapkan alamat IP eksternal statis global yang digunakan pelanggan untuk menjangkau load balancer Anda.

Konsol

  1. Buka halaman External IP addresses di Google Cloud Console.
    Buka halaman External IP addresses
  2. Klik Reserve static address untuk memesan alamat IPv4.
  3. Tetapkan Nama lb-ipv4-1.
  4. Tetapkan tingkat Jaringan ke Standar.
  5. Tetapkan IP version ke IPv4.
  6. Tetapkan Type ke Global.
  7. Klik Reserve.
  8. Pastikan Jenis disetel ke Global.
  9. Klik Reserve.

gcloud

gcloud compute addresses create lb-ipv4-1 \
    --ip-version=IPV4 \
    --network-tier=PREMIUM \
    --global

Perhatikan alamat IPv4 yang dicadangkan:

gcloud compute addresses describe lb-ipv4-1 \
    --format="get(address)" \
    --global

Menyiapkan backend load balancer

Konsol

Konsol Google Cloud saat ini tidak didukung untuk menyiapkan perutean berbasis header dan berbasis parameter. Gunakan gcloud atau API sebagai gantinya.

gcloud

  1. Membuat health check.
        gcloud compute health-checks create http http-basic-check \
            --port 80
        
  2. Buat layanan backend pertama.
    • Untuk Load Balancer Aplikasi eksternal global, gunakan perintah gcloud CLI dengan load-balancing-scheme=EXTERNAL_MANAGED. Setelan ini menawarkan kapabilitas pengelolaan traffic tingkat lanjut.
    • Untuk Load Balancer Aplikasi klasik, gunakan load-balancing-scheme=EXTERNAL.
        gcloud compute backend-services create service-a \
            --load-balancing-scheme=LOAD_BALANCING_SCHEME \
            --global-health-checks \
            --protocol HTTP \
            --health-checks http-basic-check \
            --global
        
  3. Buat layanan backend kedua.
        gcloud compute backend-services create service-b \
            --load-balancing-scheme=LOAD_BALANCING_SCHEME \
            --global-health-checks \
            --protocol HTTP \
            --health-checks http-basic-check \
            --global
        
  4. Tambahkan grup instance pertama Anda sebagai backend ke layanan backend pertama.
        gcloud compute backend-services add-backend service-a \
            --balancing-mode=UTILIZATION \
            --max-utilization=0.8 \
            --capacity-scaler=1 \
            --instance-group=first-example-ig \
            --instance-group-zone=us-east1-b \
            --global
        
  5. Tambahkan grup instance kedua Anda sebagai backend ke layanan backend kedua.
        gcloud compute backend-services add-backend service-b \
            --balancing-mode=UTILIZATION \
            --max-utilization=0.8 \
            --capacity-scaler=1 \
            --instance-group=second-example-ig \
            --instance-group-zone=us-east1-c \
            --global
        

Membuat peta URL

Konsol

Konsol Google Cloud saat ini tidak didukung untuk menyiapkan perutean berbasis header dan berbasis parameter. Gunakan gcloud atau API sebagai gantinya.

gcloud

  1. Buat file YAML /tmp/web-map-http.yaml. Ganti PROJECT_ID dengan project ID Anda.

    defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a
    hostRules:
    - hosts:
      - '*'
      pathMatcher: path-matcher-1
    name: web-map-http
    pathMatchers:
    - defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a
      name: path-matcher-1
      routeRules:
        - matchRules:
            - prefixMatch: /
              queryParameterMatches:
                - name: ABTest
                  exactMatch: A
          priority: 0
          service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a
        - matchRules:
            - prefixMatch: /
              queryParameterMatches:
                - name: ABTest
                  exactMatch: B
          priority: 1
          service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-b
    selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/web-map-http
    tests:
    - description: Test routing for query ABTest with A
      host: example.com
      path: /?ABTest=A
      service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a
      expectedOutputUrl: http://example.com/?ABTest=A
    - description: Test routing for query ABTest with B
      host: example.com
      path: /?ABTest=B
      service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-b
      expectedOutputUrl: http://example.com/?ABTest=B
    
  2. Validasi peta URL.

    gcloud compute url-maps validate --source /tmp/web-map-http.yaml
    

    Jika pengujian lulus dan perintah menampilkan pesan berhasil, simpan perubahan pada peta URL.

  3. Perbarui peta URL.

    gcloud compute url-maps import web-map-http \
       --source /tmp/web-map-http.yaml \
       --global
    

Membuat aturan penerusan dan proxy target

Konsol

Konsol Google Cloud saat ini tidak didukung untuk menyiapkan perutean berbasis header dan berbasis parameter. Gunakan gcloud atau API sebagai gantinya.

gcloud

  1. Buat proxy HTTP target untuk mengarahkan permintaan ke peta URL.
        gcloud compute target-http-proxies create http-lb-proxy \
            --url-map web-map-http
        
  2. Buat aturan penerusan global untuk mengarahkan permintaan masuk ke proxy.
    • Untuk Load Balancer Aplikasi eksternal global, gunakan perintah gcloud CLI dengan load-balancing-scheme=EXTERNAL_MANAGED. Setelan ini menawarkan kapabilitas pengelolaan traffic tingkat lanjut.
    • Untuk Load Balancer Aplikasi klasik, gunakan load-balancing-scheme=EXTERNAL.
        gcloud compute forwarding-rules create http-content-rule \
            --load-balancing-scheme=LOAD_BALANCING_SCHEME \
            --network-tier=PREMIUM \
            --address=lb-ipv4-1 \
            --global \
            --target-http-proxy=http-lb-proxy \
            --ports=80
        

Pengujian

Perhatikan alamat IPv4 yang dicadangkan:

gcloud compute addresses describe lb-ipv4-1 \
    --format="get(address)" \
    --global

Uji penyiapan ini dengan menjalankan:

curl http://IP_ADDRESS?ABTest=A
curl http://IP_ADDRESS?ABTest=B

Di browser, buka http://IP_ADDRESS?ABTest=A dan http://IP_ADDRESS?ABTest=B.

Menyiapkan pemilihan rute berbasis header HTTP

Contoh ini menunjukkan penambahan dan penghapusan header HTTP untuk melakukan perutean cerdas.

Sebelum memulai

Anda dapat menggunakan Load Balancer Aplikasi eksternal yang sudah ada atau membuat yang baru.

Anda dapat menggunakan fitur ini dengan jenis backend yang didukung apa pun. Contoh ini mengasumsikan bahwa Anda menggunakan VM dalam grup instance.

Untuk menyiapkan load balancer sederhana, lihat contoh berbasis parameter kueri di atas.

Memperbarui peta URL

Konsol

Konsol Google Cloud saat ini tidak didukung untuk menyiapkan perutean berbasis header dan berbasis parameter. Gunakan gcloud atau API sebagai gantinya.

gcloud

  1. Contoh ini menunjukkan penggunaan header permintaan HTTP untuk melakukan pengujian A/B dengan mencocokkan nilai di header HTTP permintaan.

    Buat file YAML /tmp/web-map-http.yaml. Ganti PROJECT_ID dengan project ID Anda.

    defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a
    kind: compute#urlMap
    name: web-map-http
    hostRules:
    - hosts:
      - '*'
      pathMatcher: path-matcher-1
    pathMatchers:
    - defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a
      name: path-matcher-1
      routeRules:
        - matchRules:
            - prefixMatch: /
              headerMatches:
                - headerName: ABTest
                  exactMatch: A
          priority: 0
          service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a
        - matchRules:
            - prefixMatch: /
              headerMatches:
                - headerName: ABTest
                  exactMatch: B
          priority: 1
          service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-b
    tests:
    - description: Test routing for query ABTest with A
      host: example.com
      path: /
      headers:
      - name: ABTest
        value: A
      service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a
    - description: Test routing for query ABTest with B
      host: example.com
      path: /
      headers:
      - name: ABTest
        value: B
      service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-b
    
  2. Validasi peta URL.

    gcloud compute url-maps validate --source /tmp/web-map-http.yaml
    

    Jika pengujian lulus dan perintah menampilkan pesan berhasil, simpan perubahan pada peta URL.

  3. Perbarui peta URL.

    gcloud compute url-maps import web-map-http \
       --source /tmp/web-map-http.yaml \
       --global
    

Pengujian

Dengan menggunakan alamat IPv4 dari load balancer yang terkait, uji penyiapan ini dengan menjalankan:

curl http://IP_ADDRESS -H "ABTest: A"
curl http://IP_ADDRESS -H "ABTest: B"

Langkah selanjutnya