Service Extensions memungkinkan Load Balancer Aplikasi yang didukung menggunakan plugin atau mengirimkan callout ke layanan backend untuk menyisipkan pemrosesan kustom di jalur pemrosesan. Ekstensi rute berjalan di jalur pemrosesan permintaan saat load balancer menerima header permintaan dan sebelum mengevaluasi peta URL. Halaman ini menjelaskan cara mengonfigurasi ekstensi rute.
Untuk mengetahui ringkasan tentang ekstensi Load Balancer Aplikasi, lihat Ringkasan ekstensi Cloud Load Balancing.
Ekstensi rute untuk Load Balancer Aplikasi mengarah ke resource berikut:
- Aturan penerusan yang akan dilampirkan
- Plugin atau layanan backend callout yang backend-nya menjalankan gRPC API
ext_proc
Ekstensi rute mengelompokkan layanan ekstensi terkait ke dalam rantai. Anda dapat mengonfigurasi plugin dan info dalam rantai ekstensi yang sama. Rantai ekstensi memilih traffic yang akan ditindaklanjuti dengan menggunakan kondisi pencocokan Common Expression Language (CEL). Load balancer mengevaluasi permintaan terhadap kondisi kecocokan untuk rantai secara berurutan. Jika permintaan cocok dengan kondisi yang ditentukan oleh rantai, semua ekstensi dalam rantai akan bertindak berdasarkan permintaan tersebut. Hanya ada satu rantai yang cocok dengan permintaan tertentu.
Ekstensi mereferensikan aturan penerusan load balancer yang akan dilampirkan. Setelah Anda mengonfigurasi resource, load balancer akan mulai mengirim permintaan yang cocok ke layanan ekstensi.
Untuk mengetahui informasi tentang batas yang terkait dengan ekstensi Load Balancer Aplikasi, lihat halaman Kuota dan batas.
Mengonfigurasi menggunakan plugin
Bagian ini menggunakan contoh untuk menunjukkan cara mengonfigurasi ekstensi rute dengan
menggunakan plugin yang menulis ulang header permintaan :host menjadi
service-extensions.com saat jalur cocok dengan /extensions. Host sebelumnya
dan host yang baru dikonfigurasi dipetakan ke layanan backend di berbagai
region, yang menunjukkan perilaku perutean.
Semua resource ekstensi yang mereferensikan plugin tertentu harus memiliki jenis yang sama. Ekstensi juga harus memiliki skema load balancing yang sama. Anda tidak dapat mengonfigurasi ekstensi Cloud Load Balancing dengan plugin yang sudah digunakan dalam ekstensi Media CDN.
Sebelum memulai
Buat plugin yang berisi kode kustom Anda.
Buat dan konfigurasi Load Balancer Aplikasi yang mendukung plugin ekstensi rute.
Ikuti petunjuk di halaman Menyiapkan Load Balancer Aplikasi internal lintas region dengan backend grup instance VM untuk semua langkah, kecuali langkah berikut:
- Beri nama layanan backend sebagai
service-one. - Arahkan
service-oneke instance virtual machine (VM) di regionA. - Arahkan
gl7-gilb-url-mapkeservice-onesecara default.
- Beri nama layanan backend sebagai
Siapkan layanan backend tambahan,
service-two, dan arahkan ke VM di regionB.Ke peta URL, tambahkan pencocok jalur yang mengarah ke
service-two. Gunakan perintahgcloud compute url-maps add-path-matcherdengan nilai sampel berikut:gcloud compute url-maps add-path-matcher gl7-gilb-url-map \ --path-matcher-name=rewrite-host \ --default-service=service-two \ --new-hosts=service-extensions.com \ --location=globalSiapkan cara untuk mengirim permintaan pengujian ke layanan Anda (misalnya, dengan menjalankan curl). Jika Anda menggunakan load balancer internal, buat VM klien untuk pengujian.
Mengonfigurasi ekstensi rute menggunakan plugin
Periksa perilaku sebelum ekstensi dikonfigurasi.
Verifikasi bahwa permintaan tanpa jalur eksplisit akan menuju region
A:curl FORWARDING_RULE_IP
Ganti
FORWARDING_RULE_IPdengan alamat IP aturan penerusan. Untuk menemukan alamat IP, gunakan perintahgcloud compute forwarding-rules describe.Outputnya mirip dengan berikut ini dan menunjukkan bahwa halaman ditayangkan dari VM di
region A:Page served from region-A-vmPastikan tidak ada kecocokan untuk
/extensionsdi peta URL:curl FORWARDING_RULE_IP/extensions
Ganti
FORWARDING_RULE_IPdengan alamat IP aturan penerusan. Untuk menemukan alamat IP, gunakan perintahgcloud compute forwarding-rules describe.Output menunjukkan bahwa tidak ada kecocokan untuk
/extensionsdalam peta URL. Outputnya mirip dengan hal berikut ini:<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>404 Not Found</title> </head><body> ...
Konfigurasi ekstensi rute.
Konsol
Di konsol Google Cloud , buka halaman Service Extensions.
Klik Buat ekstensi.
Wizard akan terbuka untuk memandu Anda melalui beberapa langkah awal.
Untuk produk, pilih Load Balancing. Kemudian, klik Lanjutkan.
Daftar Load Balancer Aplikasi yang didukung akan muncul.
Untuk jenis load balancer, pilih Load Balancer Aplikasi internal lintas-region. Kemudian, klik Lanjutkan.
Untuk jenis ekstensi, pilih Ekstensi rute, lalu klik Lanjutkan.
Untuk membuka formulir Buat ekstensi, klik Lanjutkan.
Di formulir Buat ekstensi, perhatikan bahwa pilihan sebelumnya, yang muncul di bagian atas halaman, tidak dapat diedit.
Di bagian Dasar-Dasar, lakukan hal berikut:
Tentukan nama unik untuk ekstensi.
Nama harus dimulai dengan huruf kecil, diikuti dengan maksimal 62 huruf kecil, angka, atau tanda hubung, dan tidak boleh diakhiri dengan tanda hubung.
Opsional: Masukkan deskripsi singkat tentang ekstensi menggunakan maksimum 1.024 karakter.
Opsional: Di bagian Labels, klik Add label. Kemudian, di baris yang muncul, lakukan hal berikut:
- Untuk Key, masukkan nama kunci.
- Untuk Nilai, masukkan nilai untuk kunci.
Untuk menambahkan lebih banyak pasangan nilai kunci, klik Tambahkan label. Anda dapat menambahkan maksimum 64 pasangan nilai kunci.
Untuk mengetahui informasi selengkapnya tentang label, lihat Membuat dan memperbarui label untuk project.
Untuk Aturan penerusan, pilih satu atau beberapa aturan penerusan untuk dikaitkan dengan ekstensi—misalnya,
cr-ilb-forwarding-rule.Aturan penerusan yang sudah dikaitkan dengan ekstensi lain tidak dapat dipilih dan tampak dinonaktifkan.
Untuk Rantai ekstensi, tambahkan satu atau beberapa rantai ekstensi untuk dieksekusi untuk permintaan yang cocok.
Untuk menambahkan rangkaian ekstensi, lakukan langkah-langkah berikut, lalu klik Selesai:
Untuk Rantai ekstensi baru, tentukan nama unik.
Nama harus sesuai dengan RFC-1034, hanya menggunakan huruf kecil, angka, dan tanda hubung, serta memiliki panjang maksimum 63 karakter. Selain itu, karakter pertama harus berupa huruf dan karakter terakhir harus berupa huruf atau angka.
Untuk mencocokkan permintaan yang rantai ekstensinya dieksekusi, untuk Kondisi kecocokan, tentukan ekspresi Common Expression Language (CEL) —misalnya,
request.path.startsWith("/extensions").Untuk mengetahui informasi selengkapnya tentang ekspresi CEL, klik Dapatkan bantuan sintaksis atau lihat referensi bahasa pencocokan CEL.
Tambahkan ekstensi yang akan dieksekusi untuk permintaan yang cocok. Untuk ekstensi rute, Anda hanya dapat menentukan satu ekstensi.
Di bagian Ekstensi, lakukan tindakan berikut, lalu klik Selesai:
Untuk Programmability type, pilih Plugins.
Untuk Nama ekstensi, tentukan nama unik.
Nama harus sesuai dengan RFC-1034, hanya menggunakan huruf kecil, angka, dan tanda hubung, serta memiliki panjang maksimum 63 karakter. Selain itu, karakter pertama harus berupa huruf dan karakter terakhir berupa huruf atau angka.
Untuk Plugin, pilih plugin yang dibuat menggunakan Ekstensi Layanan untuk produk dan jenis ekstensi yang sama.
Untuk Teruskan header, klik Tambahkan header, lalu tambahkan header HTTP untuk diteruskan ke ekstensi (dari klien atau backend). Jika header tidak ditentukan, semua header akan dikirim.
Opsional: Jika waktu tunggu ekstensi habis atau gagal dan Anda ingin pemrosesan permintaan atau respons dilanjutkan, untuk Fail open, pilih Diaktifkan.
Secara default, opsi Fail open tidak dipilih. Dalam kasus ini, jika terjadi error, pemrosesan permintaan atau respons akan berhenti. Jika header respons belum dikirimkan ke klien hilir, kode status HTTP
500umum akan dikembalikan ke klien. Jika header respons telah dikirimkan, aliran HTTP ke klien akan direset.Opsi default untuk membiarkan Fail open tidak dipilih lebih disukai saat memprioritaskan keamanan atau integritas. Mengaktifkan Fail open, terutama untuk operasi non-kritis, akan membantu saat memprioritaskan ketersediaan.
Klik Buat ekstensi.
gcloud
Tentukan plugin dalam file YAML dan kaitkan dengan aturan penerusan global—misalnya,
cr-ilb-forwarding-rule.cat >route-plugin.yaml <<EOF name: route-ext forwardingRules: - https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/forwardingRules/cr-ilb-forwarding-rule loadBalancingScheme: INTERNAL_MANAGED extensionChains: - name: "chain1" matchCondition: celExpression: 'request.path.startsWith("/extensions")' extensions: - name: 'ext1' service: projects/PROJECT_ID/locations/LOCATION/wasmPlugins/WASM_PLUGIN failOpen: false supportedEvents: - REQUEST_HEADERS EOFGanti kode berikut:
PROJECT_ID: project ID.REGION: region aturan penerusan. Nilai harus cocok dengan nilai yang ditentukan untuk lokasi plugin.LOCATION: lokasi plugin sebagaiglobalatau region.WASM_PLUGIN: ID atau nama plugin yang sepenuhnya memenuhi syarat.
Impor ekstensi rute. Gunakan perintah
gcloud service-extensions lb-route-extensions importdengan nilai contoh berikut.gcloud service-extensions lb-route-extensions import route-ext \ --source=route-plugin.yaml \ --location=global
Setelah ekstensi rute dibuat, perlu waktu beberapa saat agar plugin baru didistribusikan di semua lokasi. Waktu dapat bervariasi di berbagai lokasi karena plugin tidak dikirimkan ke semua lokasi secara bersamaan.
Untuk memverifikasi bahwa ekstensi rute berfungsi seperti yang diharapkan, gunakan perintah
curlyang sama:curl FORWARDING_RULE_IP/extensions
Outputnya mirip dengan berikut ini dan menunjukkan bahwa halaman ditayangkan dari VM di
region B:Page served from region-B-vmUntuk memverifikasi bahwa plugin hanya berjalan untuk permintaan dengan awalan jalur
/extension, ulangi perintahcurltanpa jalur.curl FORWARDING_RULE_IP
Outputnya mirip dengan hal berikut ini:
Page served from region-A-vm
Mengonfigurasi menggunakan info
Bagian ini menunjukkan cara mengonfigurasi ekstensi rute menggunakan balon teks.
Sebelum memulai
Buat resource yang diperlukan seperti yang dijelaskan dalam Mengonfigurasi layanan backend callout.
Mengonfigurasi ekstensi rute menggunakan info
Contoh berikut menunjukkan cara mengonfigurasi ekstensi rute yang akan dipanggil saat
jalur cocok dengan /extensions. Server anotasi rute di callout-vm
mengubah header Host menjadi service-extensions.com, menetapkan jalur
ke /, lalu mengirimkan instruksi ke load balancer untuk menghitung ulang
rute. Kemudian, traffic mengalir ke l7-ilb-backend-service2, bukan
l7-ilb-backend-service.
Periksa apakah ada kecocokan untuk
/extensionsdi peta URL.Jalankan perintah
curlberikut terhadap aturan penerusan di VM klien:curl FORWARDING_RULE_IP/extensions
Ganti
FORWARDING_RULE_IPdengan alamat IP aturan penerusan. Untuk menemukan alamat IP, gunakan perintahgcloud compute forwarding-rules describe.Output menunjukkan bahwa tidak ada kecocokan untuk
/extensionsdalam peta URL. Outputnya mirip dengan hal berikut ini:<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>404 Not Found</title> </head><body> ...
Konfigurasi ekstensi rute.
Konsol
Di konsol Google Cloud , buka halaman Service Extensions.
Klik Buat ekstensi.
Wizard akan terbuka untuk memandu Anda melalui beberapa langkah awal.
Untuk produk, pilih Load Balancing. Kemudian, klik Lanjutkan.
Daftar Load Balancer Aplikasi yang didukung akan muncul.
Pilih jenis load balancer. Untuk load balancer regional, tentukan juga region. Klik Lanjutkan.
Untuk jenis ekstensi, pilih Ekstensi rute, lalu klik Lanjutkan.
Untuk membuka formulir Buat ekstensi, klik Lanjutkan.
Di formulir Buat ekstensi, perhatikan bahwa pilihan sebelumnya, yang muncul di bagian atas halaman, tidak dapat diedit.
Di bagian Dasar-Dasar, lakukan hal berikut:
Tentukan nama unik untuk ekstensi.
Nama harus dimulai dengan huruf kecil, diikuti dengan maksimal 62 huruf kecil, angka, atau tanda hubung, dan tidak boleh diakhiri dengan tanda hubung.
Opsional: Masukkan deskripsi singkat tentang ekstensi menggunakan maksimum 1.024 karakter.
Opsional: Di bagian Labels, klik Add label. Kemudian, di baris yang muncul, lakukan hal berikut:
- Untuk Key, masukkan nama kunci.
- Untuk Nilai, masukkan nilai untuk kunci.
Untuk menambahkan lebih banyak pasangan nilai kunci, klik Tambahkan label. Anda dapat menambahkan maksimum 64 pasangan nilai kunci.
Untuk mengetahui informasi selengkapnya tentang label, lihat Membuat dan memperbarui label untuk project.
Untuk Aturan penerusan, pilih satu atau beberapa aturan penerusan untuk dikaitkan dengan ekstensi—misalnya,
l7-ilb-forwarding-rule.Aturan penerusan yang sudah dikaitkan dengan ekstensi lain tidak dapat dipilih dan tampak dinonaktifkan.
Untuk Rantai ekstensi, tambahkan satu atau beberapa rantai ekstensi untuk dieksekusi untuk permintaan yang cocok.
Untuk menambahkan rangkaian ekstensi, lakukan langkah-langkah berikut, lalu klik Selesai.
Untuk Rantai ekstensi baru, tentukan nama unik.
Nama harus sesuai dengan RFC-1034, hanya menggunakan huruf kecil, angka, dan tanda hubung, serta memiliki panjang maksimum 63 karakter. Selain itu, karakter pertama harus berupa huruf dan karakter terakhir harus berupa huruf atau angka.
Untuk mencocokkan permintaan yang rantai ekstensinya dieksekusi, untuk Kondisi kecocokan, tentukan ekspresi Common Expression Language (CEL) —misalnya,
request.path.startsWith("/extensions").Untuk mengetahui informasi selengkapnya tentang ekspresi CEL, klik Dapatkan bantuan sintaksis atau lihat referensi bahasa pencocokan CEL.
Tambahkan ekstensi yang akan dieksekusi untuk permintaan yang cocok. Untuk ekstensi rute, Anda hanya dapat menentukan satu ekstensi.
Di bagian Ekstensi, lakukan tindakan berikut, lalu klik Selesai:
Untuk Jenis kemampuan pemrograman, pilih Info tambahan.
Untuk Nama ekstensi, tentukan nama unik.
Nama harus sesuai dengan RFC-1034, hanya menggunakan huruf kecil, angka, dan tanda hubung, serta memiliki panjang maksimum 63 karakter. Selain itu, karakter pertama harus berupa huruf dan karakter terakhir berupa huruf atau angka.
Untuk Authority, masukkan header
authoritydari permintaan gRPC yang dikirim dari load balancer ke layanan ekstensi.Untuk Backend service, pilih layanan backend yang dibuat dengan mengikuti petunjuk di Mengonfigurasi layanan backend panggilan.
Untuk Waktu tunggu, tentukan nilai antara 10 dan 1.000 milidetik, setelah itu pesan di stream akan mencapai waktu tunggu saat load balancer masih menunggu respons dari layanan
ext_proc.Untuk Teruskan header, klik Tambahkan header, lalu tambahkan header HTTP untuk diteruskan ke ekstensi (dari klien atau backend). Jika header tidak ditentukan, semua header akan dikirim.
Opsional: Jika waktu tunggu ekstensi habis atau gagal dan Anda ingin pemrosesan permintaan atau respons dilanjutkan, untuk Fail open, pilih Diaktifkan. Ekstensi berikutnya dalam rantai juga dieksekusi.
Secara default, opsi Fail open tidak dipilih. Dalam kasus ini, jika terjadi error, pemrosesan permintaan atau respons akan berhenti. Jika header respons belum dikirimkan ke klien hilir, kode status HTTP
500umum akan dikembalikan ke klien. Jika header respons telah dikirimkan, aliran HTTP ke klien akan direset.Opsi default untuk membiarkan Fail open tidak dipilih lebih disukai saat memprioritaskan keamanan atau integritas. Mengaktifkan Fail open, terutama untuk operasi non-kritis, akan membantu saat memprioritaskan ketersediaan.
Untuk Metadata, klik Tambahkan metadata dan tentukan nilai contoh seperti yang disarankan. Untuk Kunci, tentukan
key, dan untuk Nilai, tentukanvalue.Klik Tambahkan metadata untuk menambahkan pasangan nilai kunci lainnya. Untuk Kunci, tentukan
fr, dan untuk Nilai, tentukanforwarding_rule_id.Kolom Metadata memungkinkan Anda meneruskan informasi tambahan dari load balancer ke server ekstensi. Metadata dikirim dalam pesan
ProcessingRequestdan dienkode sebagaiprotobuf.Struct. Teks apa pun dalam metadata yang cocok dengan ID aturan penerusan yang ditentukan akan diganti dengan URL resource yang sepenuhnya memenuhi syarat dari aturan penerusan yang terkait dengan permintaan klien.Total ukuran metadata harus kurang dari 1 KiB. Jumlah total kunci dalam metadata harus kurang dari 16. Panjang setiap kunci harus kurang dari 64 karakter. Panjang setiap nilai harus kurang dari 1.024 karakter. Semua nilai harus berupa string.
Klik Buat ekstensi.
gcloud
Tentukan info tambahan dalam file YAML dan kaitkan dengan aturan penerusan. Gunakan nilai sampel yang diberikan.
cat >route.yaml <<EOF name: route-ext forwardingRules: - https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules/l7-ilb-forwarding-rule loadBalancingScheme: INTERNAL_MANAGED extensionChains: - name: "chain1" matchCondition: celExpression: 'request.path.startsWith("/extensions")' extensions: - name: 'ext11' authority: ext11.com service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/l7-ilb-callout-service failOpen: false timeout: 0.1s metadata: "key": "value" "fr": "forwarding_rule_id" EOFGanti
PROJECT_IDdengan project ID.Kolom
metadatadalam konfigurasi ekstensi memungkinkan Anda meneruskan informasi tambahan dari load balancer ke server ekstensi. Metadata dikirim dalam pesanProcessingRequestdan dienkode sebagaiprotobuf.Struct. Teks apa pun dalam metadata yang cocok dengan ID aturan penerusan yang ditentukan akan diganti dengan URL resource yang sepenuhnya memenuhi syarat dari aturan penerusan yang terkait dengan permintaan klien.Total ukuran
metadataharus kurang dari 1 KiB. Jumlah total kunci dalam metadata harus kurang dari 16. Panjang setiap kunci harus kurang dari 64 karakter. Panjang setiap nilai harus kurang dari 1.024 karakter. Semua nilai harus berupa string.Impor ekstensi rute. Gunakan perintah
gcloud service-extensions lb-route-extensions importdengan nilai contoh berikut.gcloud service-extensions lb-route-extensions import route-ext \ --source=route.yaml \ --location=us-west1
Pastikan ekstensi rute berfungsi seperti yang diharapkan. Gunakan perintah
curlyang sama:curl FORWARDING_RULE_IP/extensions
Output menunjukkan bahwa traffic cocok dengan host virtual
service-extensions.comdan mencapai layananl7-ilb-backend-service2meskipun permintaan aslinya tidak. Outputnya mirip dengan hal berikut ini:Page served from second backend serviceUntuk memvalidasi bahwa anotasi hanya menargetkan permintaan dengan awalan
/extension, ulangi perintahcurltanpa awalanpath.curl FORWARDING_RULE_IP
Outputnya mirip dengan hal berikut ini:
Page served from: l7-ilb-backend-example-1c7t
Batasan untuk ekstensi rute
- Ekstensi rute tidak mendukung pemrosesan isi HTTP.
- Respons langsung dari ekstensi ke klien tidak didukung untuk ekstensi rute. Jika server ekstensi rute Anda merespons permintaan pemrosesan dengan respons pemrosesan yang berisi respons langsung, load balancer akan mengabaikan respons pemrosesan.
Untuk batasan yang berlaku untuk semua ekstensi, lihat Batasan untuk ekstensi.
Langkah berikutnya
- Lihat contoh plugin Rust, Go, dan C++ serta alat pengujian di repositori GitHub Service Extensions untuk plugin.
- Lihat contoh server
ext_procPython dan Go di repositori GitHub Service Extensions untuk balon teks. - Mengonfigurasi ekstensi traffic
- Mengelola ekstensi
- Mengelola plugin