Google Cloud Load Balancer Aplikasi dan Cloud Service Mesh menggunakan Google Cloud resource konfigurasi yang disebut peta URL untuk merutekan permintaan HTTP(S) ke layanan backend atau bucket backend.
Misalnya, dengan Load Balancer Aplikasi eksternal, Anda dapat menggunakan satu peta URL untuk merutekan permintaan ke berbagai tujuan berdasarkan aturan yang dikonfigurasi di peta URL:
- Permintaan untuk
https://example.com/videomengarah ke satu layanan backend. - Permintaan untuk
https://example.com/audiomengarah ke layanan backend yang berbeda.
- Permintaan untuk
https://example.com/imagesmengarah ke bucket backend Cloud Storage.
- Permintaan untuk kombinasi host dan jalur lainnya akan mengarah ke layanan backend default.
Peta URL digunakan dengan produk Google Cloud berikut:
- Load Balancer Aplikasi Eksternal (mode global, regional, dan klasik)
- Load Balancer Aplikasi Internal (mode lintas region dan regional)
- Cloud Service Mesh, saat Cloud Service Mesh di-deploy dengan API load balancing
Ada dua jenis resource peta URL yang tersedia: global dan regional.
urlMapsglobal digunakan oleh Load Balancer Aplikasi eksternal global, Load Balancer Aplikasi klasik, Load Balancer Aplikasi internal lintas region, dan Cloud Service Mesh.regionUrlMapsdigunakan oleh Load Balancer Aplikasi eksternal regional, Load Balancer Aplikasi internal regional, dan Cloud Service Mesh.
Jenis resource yang Anda gunakan bergantung pada skema load balancing produk.
| Produk | Skema load balancing | Jenis resource peta URL | Tujuan yang didukung |
|---|---|---|---|
| Load Balancer Aplikasi eksternal global | EXTERNAL_MANAGED |
Global | Layanan backend, bucket backend |
| Load Balancer Aplikasi klasik | EXTERNAL |
Global | Layanan backend, bucket backend |
| Load Balancer Aplikasi eksternal regional | EXTERNAL_MANAGED |
Regional | Layanan backend |
| Load Balancer Aplikasi internal lintas region | INTERNAL_MANAGED |
Global | Layanan backend |
| Load Balancer Aplikasi internal regional | INTERNAL_MANAGED |
Regional | Layanan backend |
| Cloud Service Mesh | INTERNAL_SELF_MANAGED |
Global | Layanan backend |
| Cloud Service Mesh | INTERNAL_SELF_MANAGED |
Regional | Layanan backend |
Tidak semua fitur peta URL tersedia untuk semua produk. Peta URL yang digunakan dengan Load Balancer Aplikasi eksternal global, Load Balancer Aplikasi eksternal regional, Load Balancer Aplikasi internal dan Cloud Service Mesh juga mendukung beberapa fitur pengelolaan traffic lanjutan. Untuk mengetahui informasi selengkapnya tentang perbedaan ini, lihat Perbandingan fitur load balancer: Perutean dan pengelolaan traffic. Selain itu, peta URL regional dapat menjadi resource yang ditetapkan sebagai layanan di aplikasi App Hub.
Cara kerja peta URL
Saat permintaan tiba di load balancer, load balancer akan merutekan permintaan ke layanan backend atau bucket backend tertentu berdasarkan aturan yang ditentukan dalam peta URL.
Layanan backend merepresentasikan kumpulan backend, yang merupakan instance aplikasi atau microservice. Bucket backend adalah bucket Cloud Storage, yang biasanya digunakan untuk menghosting konten statis, seperti gambar.
Untuk Load Balancer Aplikasi eksternal regional, Load Balancer Aplikasi internal, dan Cloud Service Mesh, kemungkinan tujuannya adalah sebagai berikut:
- Layanan backend default
- Layanan backend non-default
Selain itu, Load Balancer Aplikasi eksternal global mendukung hal berikut:
- Bucket backend default
- Bucket backend non-default
Misalnya, asumsikan bahwa Anda memiliki penyiapan berikut:
- Satu alamat IP:
- Semua permintaan ke organisasi Anda akan menuju ke alamat IP yang sama dan load balancer yang sama.
- Traffic diarahkan ke berbagai layanan backend berdasarkan URL permintaan.
- Dua domain:
example.netmenghosting video pelatihan.example.orgmenghosting situs organisasi Anda.
- Empat set server:
- Satu menghosting situs organisasi Anda (layanan backend:
org-site). - Salah satunya menghosting situs video pelatihan secara keseluruhan (backend service:
video-site). - Menghosting video pelatihan definisi tinggi (HD) (layanan backend:
video-hd). - Satu menghosting video pelatihan definisi standar (SD) (layanan backend:
video-sd).
- Satu menghosting situs organisasi Anda (layanan backend:
Anda ingin hal berikut terjadi:
- Permintaan ke
example.org(atau domain selainexample.net) akan mengarah ke layanan backendorg-site. - Permintaan ke
example.netyang tidak cocok dengan jalur yang lebih spesifik akan diarahkan ke layanan backendvideo-site. - Permintaan ke
example.net/video/hd/*akan diarahkan ke layanan backendvideo-hd. - Permintaan ke
example.net/video/sd/*akan diarahkan ke layanan backendvideo-sd.
--path-rule untuk /video/* cocok dengan URI seperti /video/test1 dan /video/test2. Namun, aturan jalur ini tidak cocok dengan jalur
/video.
Jika load balancer menerima permintaan dengan /../ di URL, load balancer akan mengubah URL dengan menghapus segmen jalur sebelum .., dan merespons dengan URL yang diubah. Misalnya, saat permintaan dikirim untuk
http://example.net/video/../abc, load balancer merespons dengan pengalihan
302 ke http://example.net/abc. Sebagian besar klien kemudian bereaksi dengan mengirimkan
permintaan ke URL yang ditampilkan oleh load balancer (dalam hal ini,
http://example.net/abc). Pengalihan 302 ini tidak dicatat dalam
Cloud Logging.
Peta URL memungkinkan Anda menyiapkan jenis perutean berbasis host dan jalur ini.
Penamaan load balancer
Untuk Load Balancer Aplikasi, nama load balancer selalu sama dengan nama peta URL. Perilaku untuk setiap antarmuka Google Cloud adalah sebagai berikut:
- Google Cloud console. Jika Anda membuat Load Balancer Aplikasi menggunakan Google Cloud konsol, peta URL akan otomatis diberi nama yang sama dengan nama yang Anda masukkan untuk nama load balancer.
- Google Cloud CLI atau API. Jika Anda membuat Load Balancer Aplikasi dengan menggunakan gcloud CLI atau API, Anda akan memasukkan nama pilihan Anda saat membuat peta URL. Nama peta URL ini kemudian ditampilkan di konsolGoogle Cloud sebagai nama load balancer.
Untuk mempelajari cara kerja penamaan untuk Load Balancer Jaringan Proxy dan Load Balancer Jaringan Passthrough, lihat Ringkasan layanan backend: Penamaan load balancer.
Komponen peta URL
Peta URL adalah kumpulan Google Cloud resource konfigurasi yang mengarahkan permintaan untuk URL ke layanan backend atau bucket backend. Peta URL melakukannya dengan menggunakan bagian nama host dan jalur untuk setiap URL yang diprosesnya:
- Nama host adalah bagian nama domain dari URL; misalnya, bagian nama host dari URL
http://example.net/video/hdadalahexample.net. - Jalur adalah bagian dari URL setelah nama host dan nomor port opsional; misalnya, bagian jalur URL
http://example.net/video/hdadalah/video/hd.
Diagram ini menunjukkan struktur objek konfigurasi load balancing dalam hubungannya satu sama lain.
Anda mengontrol layanan backend atau bucket backend mana yang menerima permintaan masuk menggunakan parameter konfigurasi peta URL berikut:
Layanan backend default atau bucket backend default. Saat membuat peta URL, Anda harus menentukan layanan backend default atau bucket backend default, tetapi tidak keduanya. Default ini merepresentasikan layanan backend atau bucket backend yang Google Cloud mengarahkan permintaan untuk URL dengan nama host apa pun, kecuali ada aturan host yang berlaku.
Aturan host (
hostRules). Aturan host mengarahkan permintaan yang dikirim ke satu atau beberapa nama host terkait ke satu pencocok jalur (pathMatchers). Bagian nama host dari URL dicocokkan dengan tepat atau dicocokkan menggunakan ekspresi reguler dengan set nama host yang dikonfigurasi dalam aturan host. Dalam aturan host dan jalur peta URL, jika Anda menghilangkan host, aturan akan cocok dengan host yang diminta. Untuk mengarahkan permintaan untukhttp://example.net/video/hdke pencocok jalur, Anda memerlukan satu aturan host yang setidaknya menyertakan nama hostexample.net. Aturan host yang sama juga dapat menangani permintaan untuk nama host lain, tetapi akan mengarahkannya ke pencocok jalur yang sama.Jika Anda perlu mengarahkan permintaan ke pencocok jalur yang berbeda, Anda harus menggunakan aturan host yang berbeda. Dua aturan host dalam peta URL tidak boleh menyertakan nama host yang sama.
Semua nama host dapat dicocokkan dengan menentukan karakter pengganti
*dalam aturan host. Misalnya, untuk URLhttp://example.org,http://example.net/video/hd, danhttp://example.com/audio, ketiga nama hostexample.org,example.net, danexample.comdapat dicocokkan dengan menentukan*dalam aturan host. Anda juga dapat mencocokkan nama host parsial dengan menentukan karakter pengganti*. Misalnya, aturan host*.example.netdicocokkan dengan nama hostnews.example.netdanfinance.example.net.Nomor port. Load Balancer Aplikasi yang berbeda menangani nomor port dengan cara yang berbeda. Untuk Load Balancer Aplikasi internal, Anda dapat menggunakan parameter aturan Host untuk menentukan nomor port. Misalnya, untuk mengarahkan permintaan
example.netuntuk port 8080, tetapkan aturan host keexample.net:8080. Dalam kasus Load Balancer Aplikasi klasik, hanya nama host di URL yang dipertimbangkan saat mencocokkan aturan host. Misalnya, permintaanexample.netuntuk port 8080 dan port 80 cocok dengan aturan hostexample.net.Pencocok jalur (
pathMatchers). Pencocok jalur adalah parameter konfigurasi yang dirujuk oleh aturan host. Bagian ini menentukan hubungan antara bagian jalur URL dan layanan backend atau bucket backend yang harus menayangkan permintaan. Pencocokan jalur terdiri dari dua elemen:Layanan backend default pencocok jalur atau bucket backend default pencocok jalur. Untuk setiap pencocok jalur, Anda harus menentukan setidaknya layanan backend default atau bucket backend default, tetapi tidak keduanya. Default ini merepresentasikan layanan backend atau bucket backend yang Google Cloud mengarahkan permintaan untuk URL yang nama hostnya cocok dengan aturan host yang terkait dengan pencocok jalur, dan yang jalur URL-nya tidak cocok dengan aturan jalur apa pun di pencocok jalur.
Aturan jalur. Untuk setiap pencocok jalur, Anda dapat menentukan satu atau beberapa aturan jalur, yang merupakan pasangan nilai kunci yang memetakan jalur URL ke satu layanan backend atau bucket backend.
Operator pencocokan pola yang fleksibel memungkinkan Anda mencocokkan beberapa bagian jalur URL, termasuk URL parsial dan sufiks (ekstensi file), dengan menggunakan sintaksis karakter pengganti. Operator ini dapat berguna saat Anda perlu merutekan traffic dan mengeksekusi penulisan ulang berdasarkan jalur URL yang kompleks. Anda juga dapat mengaitkan satu atau beberapa komponen jalur dengan variabel bernama, lalu merujuk ke variabel tersebut saat menulis ulang URL. Dengan variabel bernama, Anda dapat mengatur ulang dan menghapus komponen URL sebelum permintaan dikirim ke origin Anda. Untuk mengetahui detailnya, lihat Karakter pengganti, ekspresi reguler, dan URL dinamis dalam aturan jalur.
Jika Anda memerlukan kemampuan perutean yang lebih canggih, misalnya, jika Anda ingin mengarahkan traffic untuk URL unik ke beberapa layanan, Anda dapat menggunakan aturan rute, bukan aturan jalur.
Aturan rute. Aturan rute dapat digunakan sebagai alternatif untuk aturan jalur jika Anda memerlukan kemampuan perutean traffic tingkat lanjut seperti perutean traffic berdasarkan jalur URL, header HTTP, dan parameter kueri.
Anda dapat mengonfigurasi aturan rute dengan operator pencocokan pola yang fleksibel dan variabel bernama. Operator ini dapat berguna saat Anda perlu merutekan traffic dan mengeksekusi penulisan ulang berdasarkan jalur URL yang kompleks. Untuk mengetahui detailnya, lihat Operator pencocokan pola dan karakter pengganti dalam template jalur untuk aturan rute.
Anda juga dapat mengonfigurasi aturan rute agar dicocokkan dengan ekspresi reguler yang cocok dengan jalur, parameter kueri, atau header dalam permintaan yang masuk. Untuk mengetahui detailnya, lihat Ekspresi reguler dalam aturan rute.
Hubungan aturan host dan nama host
Nama host hanya dapat mereferensikan satu aturan host.
Satu aturan host dapat memproses beberapa nama host.
Hubungan aturan host dan pencocok jalur
Beberapa aturan host dapat mereferensikan satu pencocok jalur.
Aturan host hanya dapat mereferensikan satu pencocok jalur.
Hubungan URL dan backend
Setiap URL unik diarahkan ke hanya satu layanan backend atau bucket backend. Akibatnya:
Google Cloud menggunakan bagian nama host dari URL untuk memilih satu aturan host dan pencocok jalur yang direferensikannya.
Saat menggunakan aturan jalur dalam pencocok jalur, Anda tidak dapat membuat lebih dari satu aturan jalur untuk jalur yang sama. Misalnya, permintaan untuk
/videos/hdtidak dapat diarahkan ke lebih dari satu layanan backend atau bucket backend. Layanan backend dapat memiliki grup instance backend atau grup endpoint jaringan (NEG) backend di zona dan region yang berbeda, dan Anda dapat membuat bucket backend yang menggunakan class Multi-Regional Storage.Untuk mengarahkan traffic URL unik ke beberapa layanan, Anda dapat menggunakan aturan rute, bukan aturan jalur. Jika Anda mengonfigurasi pencocok jalur dengan aturan rute untuk pencocokan header atau parameter, URL unik dapat diarahkan ke lebih dari satu layanan backend atau bucket, berdasarkan konten header atau parameter kueri di URL.
Demikian pula untuk Load Balancer Aplikasi eksternal regional dan Cloud Service Mesh, layanan backend berbobot pada tindakan rute dapat mengarahkan URL yang sama ke beberapa layanan backend atau bucket, bergantung pada bobot yang ditetapkan pada layanan backend berbobot.
Peta dan protokol URL
Anda dapat menggunakan peta URL, aturan host, dan pencocok jalur yang sama untuk memproses permintaan HTTP dan HTTPS yang dikirimkan oleh klien, selama proxy HTTP target dan proxy HTTPS target mereferensikan peta URL.
Peta URL paling sederhana
Peta URL paling sederhana hanya memiliki layanan backend default atau bucket backend default. Tidak berisi aturan host dan pencocok jalur. Layanan backend default atau bucket backend default (mana pun yang Anda tentukan) menangani semua URL yang diminta.
Jika Anda menentukan layanan backend default, Google Cloud mengarahkan permintaan ke grup instance backend atau NEG backend sesuai dengan konfigurasi layanan backend.
Urutan operasi
Untuk nama host dan jalur tertentu dalam URL yang diminta, Google Cloud menggunakan prosedur berikut untuk mengarahkan permintaan ke layanan backend atau bucket backend yang benar, seperti yang dikonfigurasi di peta URL Anda:
Jika peta URL tidak berisi aturan host untuk nama host URL, Google Cloud mengarahkan permintaan ke layanan backend default peta URL atau bucket backend default, bergantung pada mana yang Anda tentukan.
Jika peta URL berisi aturan host yang menyertakan nama host URL, pencocok jalur yang dirujuk oleh aturan host tersebut akan diperiksa:
Jika pencocok jalur berisi aturan jalur yang cocok persis dengan jalur URL, Google Cloud mengarahkan permintaan ke layanan backend atau bucket backend untuk aturan jalur tersebut.
Jika pencocok jalur tidak berisi aturan jalur yang sama persis dengan jalur URL, tetapi berisi aturan jalur yang diakhiri dengan
/*yang prefiksnya cocok dengan bagian terpanjang dari jalur URL, maka Google Cloud mengarahkan permintaan ke layanan backend atau bucket backend untuk aturan jalur tersebut. Misalnya, untuk peta URL yang berisi dua aturan pencocokan jalur/video/hd/movie1dan/video/hd/*, jika URL berisi jalur yang sama persis/video/hd/movie1, URL tersebut akan dicocokkan dengan aturan jalur tersebut.Jika tidak ada kondisi sebelumnya yang benar, Google Cloud mengarahkan permintaan ke layanan backend default pencocok jalur atau bucket backend default, bergantung pada mana yang Anda tentukan.
Batasan konfigurasi peta URL
Bagian berikut menjelaskan batasan konfigurasi tertentu untuk komponen peta URL.
Pencocok ekspresi reguler dalam aturan host dan rute
Aturan host memungkinkan Anda mencocokkan bagian nama host dari URL dengan kumpulan nama host yang dikonfigurasi aturan host. Anda dapat memilih untuk menggunakan nama host tertentu atau karakter pengganti * di kolom hostRules[].hosts[] yang akan dicocokkan dengan nama host dalam permintaan masuk.
Aturan rute memungkinkan Anda menentukan aturan pencocokan yang dapat mencocokkan ekspresi reguler baik di jalur, string kueri, atau header dalam permintaan masuk. Aturan rute mendukung penggunaan ekspresi reguler untuk kolom peta URL berikut:
pathMatchers[].routeRules[].matchRules[].regexMatch: Ekspresi reguler yang digunakan untuk mencocokkan jalur permintaan masuk.pathMatchers[].routeRules[].matchRules[].headerMatches[].regexMatch: Ekspresi reguler yang berisi predikat yang cocok dengan header permintaan masuk.pathMatchers[].routeRules[].matchRules[].queryParameterMatches[].regexMatch: Ekspresi reguler yang berisi predikat yang cocok dengan parameter kueri permintaan yang masuk.
Permintaan dianggap cocok dengan routeRule jika salah satu matchRule terpenuhi. Namun, predikat dalam matchRule tertentu memiliki semantik AND.
Artinya, semua predikat dalam matchRule harus cocok agar permintaan cocok dengan aturan.
Catatan penggunaan tambahan:
Ekspresi reguler hanya didukung untuk produk berikut:
- Load Balancer Aplikasi internal regional
- Load Balancer Aplikasi internal lintas region
- Load Balancer Aplikasi eksternal regional
Load Balancer Aplikasi global dan klasik tidak mendukung ekspresi reguler.
Anda harus menggunakan sintaksis RE2 untuk membuat ekspresi reguler. Untuk daftar lengkap batasan dan operator yang diizinkan di peta URL, lihat spesifikasi RE2 untuk peta URL.
Pencocokan ekspresi reguler mahal dalam hal konsumsi memori dan latensi pemrosesan permintaan. Jika memilih untuk menggunakan pencocokan ekspresi reguler, Anda harus mempertimbangkan penurunan performa saat merencanakan deployment. Misalnya, jika Anda memiliki peta URL dengan satu ekspresi reguler, Anda dapat memperkirakan latensi load balancer meningkat sebesar 100 mikrodetik per permintaan. Jika peta URL Anda memiliki 5 ekspresi reguler yang akan dicocokkan, Anda dapat memperkirakan latensi meningkat sebesar 200 mikrodetik per permintaan.
Contoh #1: Menggunakan ekspresi reguler untuk mencocokkan jalur
Jalur dianggap cocok jika cocok dengan ekspresi reguler yang ditentukan oleh
regexMatch setelah menghapus parameter kueri dan anchor yang diberikan bersama
URL asli. Misalnya, dalam peta URL contoh berikut, aturan pemilihan rute
ekspresi reguler, /videos/hd.*, akan berlaku untuk URL dengan jalur
/videos/hd-abcd?key=245.
defaultService: projects/example-project/global/backendServices/org-site
name: rule-match-url-map
hostRules:
- hosts:
- '*' # Match any host
pathMatcher: video-matcher
- hosts:
- example.net
pathMatcher: video-matcher
pathMatchers:
- name: video-matcher
# Optional: default service for this path matcher if no routeRules match
defaultService: projects/example-project/global/backendServices/video-site
routeRules:
- priority: 100000
matchRules:
- regexMatch: /videos/hd.*
routeAction:
weightedBackendServices:
- backendService: projects/example-project/global/backendServices/video-hd
weight: 100
Berikut penjelasan untuk setiap kolom peta URL contoh:
defaultService: Menentukan layanan backend default yang akan digunakan jika tidak ada aturan lain dalam peta URL yang cocok dengan permintaan masuk.name: Menetapkan nama rule-match-url-map ke konfigurasi peta URL ini.hostRules: Menentukan daftar aturan untuk mencocokkan header host permintaan masuk. Aturan pertama cocok dengan host mana pun (*) dan mengarahkan traffic kepathMatcherbernama video-matcher. Aturan kedua secara khusus mencocokkan hostexample.netdan juga mengarahkan traffic ke pencocok jalur bernama video-matcher.pathMatchers: Menentukan daftar pencocok jalur bernama.name: Menentukan pencocok jalur bernama video-matcher.defaultService: Menetapkan layanan default untuk pencocok jalur ini. Layanan ini digunakan jika permintaan cocok dengan aturan host yang mengarah ke video-matcher, tetapi tidak cocok denganrouteRulesapa pun di dalamnya.routeRules: Berisi daftar aturan untuk mencocokkan jalur URL.priority: Menetapkan prioritas aturan ini ke 100000. Aturan dievaluasi dalam urutan dari nomor prioritas terendah hingga tertinggi.matchRules: Berisi kondisi agar aturan rute ini cocok.regexMatch: Kondisi ini memeriksa apakah jalur URL cocok dengan ekspresi reguler/videos/hd.*(misalnya, "/videos/hd" dan "/videos/hd-caching").routeAction: Menentukan tindakan yang akan diambil jika semua kondisi dalammatchRulesterpenuhi.weightedBackendServices: Mendistribusikan traffic di antara daftar layanan backend berdasarkan bobot.backendService: Menentukan layanan backend untuk merutekan traffic.weight: Menetapkan bobot 100 ke layanan backend ini. Karena merupakan satu-satunya layanan dalam daftar, layanan ini akan menerima 100% traffic yang cocok dengan routeRule ini.
Peta URL berikut menunjukkan contoh serupa tanpa menggunakan routeAction.
defaultService: projects/example-project/global/backendServices/video-site
name: path-matcher-videos
routeRules:
matchRules:
- regexMatch: /videos/hd.*
priority: 100000
service: projects/example-project/global/backendServices/video-hd
Contoh #2: Menggunakan ekspresi reguler untuk mencocokkan header
Header dianggap cocok jika nilai header cocok dengan ekspresi reguler yang ditentukan oleh regexMatch. Misalnya, dalam peta URL contoh berikut, ekspresi reguler nama header, .*Android.*-hd, akan berlaku untuk permintaan dengan header User-Agent:123Androidabc-hd.
defaultService: projects/example-project/regions/us-central1/backendServices/default-backend-service
name: header-match-url-map
hostRules:
- hosts:
- '*' # Match any host
pathMatcher: header-matcher
pathMatchers:
- name: header-matcher
# Optional: default service for this path matcher if no routeRules match
defaultService: projects/example-project/regions/us-central1/backendServices/default-backend-service
routeRules:
- priority: 1
matchRules:
- headerMatches:
- headerName: User-Agent
regexMatch: .*Android.*-hd
# This prefix match applies to the path part of the URL
- prefixMatch: /video/
# service: can be used instead of routeAction if no other actions are needed
service: projects/example-project/regions/us-central1/backendServices/video-backend-service
# Alternatively, use routeAction to specify the service:
# routeAction:
# weightedBackendServices:
# - backendService: projects/example-project/regions/us-central1/backendServices/video-backend-service
# weight: 100
Berikut penjelasan untuk setiap kolom peta URL contoh:
defaultService: Menentukan layanan backend default yang akan digunakan jika tidak ada aturan lain dalam peta URL yang cocok dengan permintaan masuk.name: Menetapkan nama header-match-url-map ke konfigurasi peta URL ini.hostRules: Menentukan daftar aturan untuk mencocokkan header host permintaan masuk. Aturan ini cocok dengan host apa pun ('*') dan mengarahkan traffic ke pencocokan header bernamapathMatcher.pathMatchers: Menentukan daftar pencocok jalur bernama.name: Menentukan pencocok jalur bernama header-matcher.defaultService: Menetapkan layanan default untuk pencocok jalur ini. Layanan ini digunakan jika permintaan cocok dengan aturan host, tetapi tidak cocok denganrouteRulesmana pun dalam pencocok jalur ini.routeRules: Berisi daftar aturan untuk mencocokkan permintaan masuk berdasarkan header dan jalur.priority: Menetapkan prioritas aturan ini ke 1. Aturan dievaluasi dalam urutan dari nomor prioritas terendah hingga tertinggi.matchRules: Berisi daftar kondisi yang semuanya harus benar agar aturan cocok.headerMatches: Menentukan kondisi berdasarkan header permintaan.headerName: Mencari header User-Agent.regexMatch: Memeriksa apakah nilai header User-Agent cocok dengan ekspresi reguler.*Android.*-hd. Ini akan cocok dengan Agen Pengguna yang menunjukkan perangkat Android, dengan string yang berisi "-hd".prefixMatch: Jika disetel ke/video/, kondisi ini akan memeriksa apakah jalur URL dimulai dengan "/video/".service: Jika semua kondisimatchRulesterpenuhi, traffic akan diarahkan ke layanan backend ini.- Bagian
routeActionyang diberi komentar menunjukkan cara alternatif untuk menentukan layanan backend, yang diperlukan jika Anda perlu mengonfigurasi tindakan rute lain seperti penulisan ulang URL, transformasi header, atau layanan backend berbobot.
Contoh #3: Menggunakan ekspresi reguler untuk mencocokkan parameter kueri
Parameter kueri dianggap cocok jika nilai jalur dengan parameter kueri cocok dengan ekspresi reguler yang ditentukan oleh regexMatch. Misalnya, dalam peta URL contoh berikut, ekspresi reguler parameter kueri, /im.*/.*.html, akan berlaku untuk URL dengan parameter kueri seperti /images/random_page.html?param1=param_value_123abc-hd.
defaultService: projects/example-project/regions/us-central1/backendServices/sample-bs
name: query-match-url-map
hostRules:
- hosts:
- '*' # Match any host
pathMatcher: query-matcher
pathMatchers:
- name: query-matcher
# Optional: default service for this path matcher if no routeRules match
defaultService: projects/example-project/regions/us-central1/backendServices/sample-bs
routeRules:
- priority: 1
matchRules:
- queryParameterMatches:
- name: param1 #parameter name in query
regexMatch: param_value_.*-hd
# This regexMatch applies to the path part of the URL
- regexMatch: /im.*/.*.html
# Directs traffic to this service if all conditions in matchRules are met
service: projects/example-project/regions/us-central1/backendServices/sample-images-bs
Berikut penjelasan untuk setiap kolom peta URL contoh:
hostRules: Menambahkan aturan untuk mencocokkan semua host (*) dan mengarahkan traffic kepathMatcherbernama query-matcher.pathMatchers: Menentukan pencocok jalur bernama query-matcher.routeRules: Menempatkan blokrouteRulesyang diberikan dalam query-matcher.priority: Menetapkan prioritas aturan ini ke 1. Aturan dievaluasi dalam urutan dari nomor prioritas terendah hingga tertinggi.matchRules: Berisi kondisi untukrouteRules.queryParameterMatches: Memeriksa apakah parameter kueri bernama "param1" cocok dengan ekspresi regulerparam_value_.*-hd.regexMatch: Ekspresi reguler/im.*/.*.htmlberlaku untuk jalur URL (misalnya, /images/random_page.html), sebelum string kueri.service: Menentukan layanan backend yang akan digunakan jika semua kondisi dalammatchRulesbenar.
Karakter pengganti, ekspresi reguler, dan URL dinamis dalam aturan jalur dan pencocokan awalan
Aturan jalur (
pathMatchers[].pathRules[]) hanya dapat menyertakan karakter pengganti (*) setelah karakter garis miring (/). Misalnya,/videos/*dan/videos/hd/*valid untuk aturan jalur, tetapi/videos*dan/videos/hd*tidak valid.Aturan jalur tidak menggunakan ekspresi reguler atau pencocokan substring. PathTemplateMatch dapat menggunakan operator pencocokan jalur yang disederhanakan. Misalnya, aturan jalur untuk
/videos/hdatau/videos/hd/*tidak berlaku untuk URL dengan jalur/video/hd-abcd. Namun, aturan jalur untuk/video/*berlaku untuk jalur tersebut.Pencocokan awalan (
pathMatchers[].routeRules[].matchRules[].prefixMatch) tidak memperlakukan*sebagai karakter pengganti, tetapi sebagai karakter literal.Pencocok jalur (dan peta URL secara umum) tidak menawarkan fitur yang berfungsi seperti direktif
<LocationMatch>Apache. Jika Anda memiliki aplikasi yang membuat jalur URL dinamis yang memiliki awalan umum, seperti/videos/hd-abcddan/videos/hd-pqrs, dan Anda perlu mengirim permintaan yang dibuat ke jalur tersebut ke layanan backend yang berbeda, Anda mungkin tidak dapat melakukannya dengan peta URL. Untuk kasus yang hanya berisi beberapa kemungkinan URL dinamis, Anda mungkin dapat membuat pencocok jalur dengan serangkaian aturan jalur yang terbatas. Untuk kasus yang lebih kompleks, Anda perlu melakukan pencocokan ekspresi reguler berbasis jalur di backend.
Operator pencocokan pola dan karakter pengganti dalam template jalur untuk aturan rute
Operator pencocokan pola fleksibel memungkinkan Anda mencocokkan beberapa bagian jalur URL, termasuk URL parsial dan sufiks (ekstensi file), dengan menggunakan sintaksis karakter pengganti. Operator ini dapat berguna saat Anda perlu merutekan traffic dan mengeksekusi penulisan ulang berdasarkan jalur URL yang kompleks. Anda juga dapat mengaitkan satu atau beberapa komponen jalur dengan variabel bernama, lalu merujuk ke variabel tersebut saat menulis ulang URL. Dengan variabel bernama, Anda dapat mengurutkan ulang dan menghapus komponen URL sebelum permintaan dikirim ke origin Anda.
Pencocokan pola dengan karakter pengganti hanya didukung untuk produk berikut:
- Load Balancer Aplikasi eksternal global
- Load Balancer Aplikasi eksternal regional
- Load Balancer Aplikasi internal regional
- Load Balancer Aplikasi internal lintas region
- Cloud Service Mesh
Contoh berikut merutekan traffic untuk aplikasi e-Commerce yang memiliki layanan terpisah untuk informasi keranjang dan informasi pengguna.
Anda dapat mengonfigurasi routeRules dengan operator pencocokan pola yang fleksibel dan variabel bernama untuk mengirim ID unik pengguna ke halaman detail akun pengguna dan informasi keranjang pengguna ke layanan pemrosesan keranjang setelah menulis ulang URL.
pathMatchers:
- name: cart-matcher
routeRules:
- description: CartService
matchRules:
- pathTemplateMatch: '/xyzwebservices/v2/xyz/users/{username=*}/carts/{cartid=**}'
service: cart-backend
priority: 1
routeAction:
urlRewrite:
pathTemplateRewrite: '/{username}-{cartid}/'
- name: user-matcher
routeRules:
- description: UserService
matchRules:
- pathTemplateMatch: '/xyzwebservices/v2/xyz/users/*/accountinfo/*'
service: user-backend
priority: 1
Berikut yang terjadi saat klien meminta
/xyzwebservices/v2/xyz/users/abc@xyz.com/carts/FL0001090004/entries/SJFI38u3401nms?fields=FULL&client_type=WEB,
yang memiliki informasi pengguna dan informasi keranjang:
- Jalur permintaan cocok dengan
pathTemplateMatchdalamcart-matcherpathMatcher. Variabel{username=*}cocok denganabc@xyz.comdan variabel{cartid=**}cocok denganFL0001090004/entries/SJFI38u3401nms. - Parameter kueri dipisahkan dari jalur, jalur ditulis ulang
berdasarkan
pathTemplateRewrite, dan parameter kueri ditambahkan ke jalur yang ditulis ulang. Kita hanya boleh menggunakan variabel yang sama yang kita gunakan untuk menentukanpathTemplateMatchdipathTemplateRewrite. - Permintaan yang ditulis ulang dikirim ke
cart-backenddengan jalur URL yang ditulis ulang:/abc@xyz.com-FL0001090004/entries/SJFI38u3401nms?fields=FULL&client_type=WEB.
Berikut yang terjadi saat klien meminta
/xyzwebservices/v2/xyz/users/abc%40xyz.com/accountinfo/abc-1234, bukan /xyzwebservices/v2/xyz/users/abc%40xyz.com/accountinfo/abc-1234, yang hanya memiliki informasi pengguna dan akun:
- Jalur permintaan cocok dengan
pathTemplateMatchdalamuser-matcherpathMatcher.*pertama cocok denganabc%40xyz.comdan*kedua cocok denganabc-1234. - Permintaan dikirim ke
user-backend.
Tabel berikut menguraikan sintaksis untuk pola template jalur.
| Operator | Mencocokkan dengan |
|---|---|
* |
Satu segmen jalur, tidak termasuk karakter / pemisah
jalur di sekitarnya. |
** |
Mencocokkan nol karakter atau lebih, termasuk karakter pemisah jalur
/ di antara beberapa segmen jalur. Jika operator lain disertakan, operator ** harus menjadi operator terakhir. |
{name} atau {name=*} |
Variabel bernama yang cocok dengan satu segmen jalur. Mencocokkan satu segmen
jalur, tidak termasuk karakter pemisah jalur /
di sekitarnya. |
{name=news/*} |
Variabel bernama yang secara eksplisit cocok dengan dua segmen jalur:
news dan segmen karakter pengganti *. |
{name=*/news/*} |
Variabel bernama yang cocok dengan tiga segmen jalur. |
{name=**} |
Variabel bernama yang cocok dengan nol atau beberapa karakter. Jika ada, harus menjadi operator terakhir. |
Saat Anda menggunakan operator ini untuk pencocokan pola yang fleksibel, perhatikan pertimbangan berikut:
- Beberapa operator dapat digabungkan dalam satu pola.
- Parameter kueri dipisahkan dari jalur, jalur ditulis ulang
berdasarkan
pathTemplateRewrite, dan parameter kueri ditambahkan ke jalur yang ditulis ulang. - Permintaan tidak dinormalisasi dengan encoding persen. Misalnya, URL dengan karakter garis miring yang dienkode persentase (%2F) tidak didekode ke dalam bentuk yang tidak dienkode.
- Setiap nama variabel, seperti
{segment}atau{region}, hanya dapat muncul satu kali dalam pola yang sama. Beberapa variabel dengan nama yang sama tidak valid dan akan ditolak. - Nama variabel peka huruf besar/kecil dan harus berupa ID yang valid. Untuk memeriksa apakah nama variabel valid, pastikan nama tersebut cocok dengan regular expression
^[a-zA-Z][a-zA-Z0-9_]*$.{API},{api}, dan{api_v1}adalah ID yang valid. Mereka mengidentifikasi tiga variabel yang berbeda.{1},{_api}, dan{10alpha}bukan ID yang valid.
- Ada batas lima operator per pola template.
Untuk menjalankan penulisan ulang URL opsional sebelum permintaan dikirim ke asal, Anda dapat menggunakan variabel yang sama yang Anda tentukan untuk merekam jalur.
Misalnya, Anda dapat mereferensikan, menyusun ulang, atau menghilangkan variabel di kolom
pathTemplateRewrite saat menentukan urlRewrite.
Saat Anda menggunakan variabel dan operator untuk pencocokan pola yang fleksibel untuk penulisan ulang URL, perhatikan pertimbangan berikut:
- Saat menulis ulang URL, Anda dapat menghilangkan variabel jika tidak diperlukan sebagai bagian dari URL yang ditulis ulang.
- Sebelum penulisan ulang, Anda dapat mengidentifikasi URL yang dikirim oleh klien
di origin dengan memeriksa header respons. URL klien asli diisi
dengan header
x-client-request-urldan headerx-envoy-original-path.
Contoh alur kerja peta URL dengan Load Balancer Aplikasi eksternal
Contoh berikut menggambarkan urutan operasi untuk peta URL. Contoh ini hanya mengonfigurasi peta URL untuk Load Balancer Aplikasi klasik yang ada. Untuk kesederhanaan konsep, hanya layanan backend yang digunakan; namun, Anda dapat mengganti bucket backend. Untuk mempelajari cara membuat komponen load balancer lainnya, lihat Membuat Load Balancer Aplikasi klasik.
Untuk mengetahui informasi selengkapnya tentang cara membuat dan mengonfigurasi peta URL dengan pencocok jalur dan aturan host, lihat dokumentasi gcloud compute url-maps create.
Buat peta URL untuk load balancer dan tentukan layanan backend default. Contoh ini membuat peta URL bernama
video-org-url-mapyang mereferensikan layanan backend yang sudah ada bernamaorg-site.gcloud compute url-maps create video-org-url-map \ --default-service=org-siteBuat pencocok jalur bernama
video-matcherdengan karakteristik berikut:- Layanan backend default adalah
video-site, layanan backend yang ada. - Tambahkan aturan jalur yang mengarahkan permintaan untuk jalur URL
/video/hdyang tepat atau awalan jalur URL/video/hd/*ke layanan backend yang ada bernamavideo-hd. - Tambahkan aturan jalur yang mengarahkan permintaan untuk jalur URL
/video/sdyang tepat atau awalan jalur URL/video/sd/*ke layanan backend yang ada bernamavideo-sd.
gcloud compute url-maps add-path-matcher video-org-url-map \ --path-matcher-name=video-matcher \ --default-service=video-site \ --path-rules=/video/hd=video-hd,/video/hd/*=video-hd,/video/sd=video-sd,/video/sd/*=video-sd- Layanan backend default adalah
Buat aturan host untuk nama host
example.netyang mereferensikan pencocok jalurvideo-matcher.gcloud compute url-maps add-host-rule video-org-url-map \ --hosts=example.net \ --path-matcher-name=video-matcher
Peta URL video-org-url-map akan terlihat seperti ini:
gcloud compute url-maps describe video-org-url-map
creationTimestamp: '2021-03-05T13:34:15.833-08:00'
defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/org-site
fingerprint: mfyJIT7Zurs=
hostRules:
- hosts:
- '*'
pathMatcher: video-matcher
- hosts:
- example.net
pathMatcher: video-matcher
id: '8886405179645041976'
kind: compute#urlMap
name: video-org-url-map
pathMatchers:
- defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/video-site
name: video-matcher
pathRules:
- paths:
- /video/hd
- /video/hd/*
service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/video-hd
- paths:
- /video/sd
- /video/sd/*
service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/video-sd
selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/video-org-url-map
Peta URL video-org-url-map mengarahkan URL yang diminta ke backend dengan cara berikut.
Tabel berikut menjelaskan pemrosesan permintaan yang ditunjukkan dalam diagram sebelumnya.
| Hostname | Jalur URL | Layanan backend yang dipilih | Alasan pemilihan |
|---|---|---|---|
Nama host:example.org dan semua nama host lainnya yang
berbeda denganexample.net |
semua jalur | org-site |
Nama host tidak ada dalam aturan host peta URL, sehingga permintaan diarahkan ke layanan backend default peta URL. |
Nama host:example.net |
/video/video/examples |
video-site |
Permintaan akan masuk ke layanan backend default karena tidak ada
aturan jalur untuk /video/ atau /video/*. Aturan
host untuk example.net mereferensikan pencocok jalur,
tetapi pencocok jalur tersebut tidak memiliki aturan jalur yang akan berlaku untuk
jalur ini.
|
Nama host:example.net |
/video/hd/video/hd/movie1/video/hd/movies/movie2URL lain yang diawali dengan /video/hd/* |
video-hd |
Aturan host untuk example.net mereferensikan pencocok jalur
yang aturan jalurnya mengarahkan permintaan untuk jalur URL yang cocok persis dengan
/video/hd atau yang dimulai dengan /video/hd/* ke
layanan backend video-hd. |
Nama host:example.net |
/video/sd/video/sd/show1/video/sd/shows/show2URL lain yang diawali dengan /video/sd/* |
video-sd |
Aturan host untuk example.net mereferensikan pencocok jalur
yang aturan jalurnya mengarahkan permintaan untuk jalur URL yang cocok persis dengan
/video/sd atau yang dimulai dengan /video/sd/* ke
layanan backend video-sd. |
Pengalihan URL
Pengalihan URL mengalihkan pengunjung domain Anda dari satu URL ke URL lain.
Pengalihan URL default tidak dikondisikan untuk mencocokkan pola tertentu dalam permintaan masuk. Misalnya, Anda dapat menggunakan pengalihan URL default untuk mengalihkan nama host apa pun ke nama host pilihan Anda.
Ada beberapa cara untuk membuat pengalihan URL, seperti yang diuraikan dalam tabel berikut.
| Metode | Konfigurasi |
|---|---|
| Pengalihan URL default peta URL | defaultUrlRedirect tingkat teratas |
| Pengalihan URL default pencocok jalur | pathMatchers[].defaultUrlRedirect[] |
| Pengalihan URL aturan jalur pencocok jalur | pathMatchers[].pathRules[].urlRedirect |
| Pengalihan URL aturan perutean pencocok jalur | pathMatchers[].routeRules[].urlRedirect |
Di dalam defaultUrlRedirect atau urlRedirect, pathRedirect selalu berfungsi
sebagai berikut:
- Seluruh jalur permintaan diganti dengan jalur yang Anda tentukan.
Di dalam defaultUrlRedirect atau urlRedirect, cara kerja prefixRedirect bergantung pada cara Anda menggunakannya:
- Jika Anda menggunakan
defaultUrlRedirect,prefixRedirectsecara efektif merupakan penambahan awalan karena jalur yang cocok selalu/. - Jika Anda menggunakan
urlRedirectdalam aturan rute atau aturan jalur pencocok jalur,prefixRedirectadalah penggantian awalan berdasarkan cara jalur yang diminta dicocokkan seperti yang ditentukan dalam aturan jalur atau aturan rute.
Contoh pengalihan
Tabel berikut memberikan beberapa contoh konfigurasi pengalihan. Kolom kanan menampilkan konfigurasi API untuk pengalihan URL default.
| Anda ingin | Dilakukan menggunakan pengalihan URL default |
|---|---|
| Pengalihan HTTP-ke-HTTPS Pengalihan http://host.name/path ke https://host.name/path |
kind: compute#urlMap
name: web-map-http
defaultUrlRedirect:
httpsRedirect: True
|
| Pengalihan HTTP-ke-HTTPS + Host Pengalihan http://any-host-name/path ke https://www.example.com/path |
kind: compute#urlMap
name: web-map-http
defaultUrlRedirect:
httpsRedirect: True
hostRedirect: "www.example.com"
|
| HTTP-ke-HTTPS + Pengalihan host + Pengalihan jalur lengkap Pengalihan http://any-host-name/path ke https://www.example.com/newPath |
kind: compute#urlMap
name: web-map-http
defaultUrlRedirect:
httpsRedirect: True
hostRedirect: "www.example.com"
pathRedirect: "/newPath"
|
| Pengalihan HTTP-ke-HTTPS + Pengalihan host + Pengalihan awalan Pengalihan http://any-host-name/originalPath ke https://www.example.com/newPrefix/originalPath |
kind: compute#urlMap
name: web-map-http
defaultUrlRedirect:
httpsRedirect: True
hostRedirect: "www.example.com"
prefixRedirect: "/newPrefix"
|
Cuplikan parsial berikut menganotasi setiap resource API:
defaultUrlRedirect: redirectResponseCode: MOVED_PERMANENTLY_DEFAULT httpsRedirect: True # True if you want https://, false if you want http:// hostRedirect: "new-host-name.com" # Omit to keep the requested host pathRedirect: "/new-path" # Omit to keep the requested path; mutually exclusive to prefixRedirect prefixRedirect: "/newPrefix" # Omit to keep the requested path; mutually exclusive to pathRedirect stripQuery: False # True to omit everything in the URL after ? ...
Langkah berikutnya
Untuk menambahkan, memvalidasi, menguji, mencantumkan, atau menghapus peta URL, lihat Menggunakan peta URL.
Untuk mengetahui informasi tentang peta aturan perutean dengan Cloud Service Mesh, lihat Ringkasan peta aturan perutean Cloud Service Mesh.