Service Extensions memungkinkan Load Balancer Aplikasi yang didukung untuk menggunakan plugin atau mengirim callout ke layanan backend guna menyisipkan pemrosesan kustom di jalur pemrosesan. Ekstensi traffic berjalan terakhir di jalur pemrosesan permintaan dan pertama di pemrosesan respons untuk mengubah header dan payload tanpa memengaruhi pilihan layanan backend service. Halaman ini menjelaskan cara mengonfigurasi ekstensi traffic.
Untuk mengetahui ringkasan tentang ekstensi Load Balancer Aplikasi, lihat Ringkasan ekstensi Cloud Load Balancing.
Ekstensi traffic untuk Load Balancer Aplikasi mengarah ke resource berikut:
- Aturan penerusan yang akan dilampirkan
- Plugin atau layanan backend callout yang backend-nya menjalankan
ext_procgRPC API
Ekstensi traffic mengelompokkan layanan ekstensi terkait ke dalam satu atau beberapa rantai. Anda dapat mengonfigurasi plugin dan callout dalam rantai ekstensi yang sama. Setiap rantai ekstensi memilih traffic yang akan ditindaklanjuti menggunakan Common Expression Language (CEL) kondisi kecocokan. Load balancer mengevaluasi permintaan terhadap kondisi kecocokan setiap rantai secara berurutan. Saat permintaan cocok dengan kondisi yang ditentukan oleh rantai, semua ekstensi dalam rantai akan menindaklanjuti permintaan tersebut. Hanya satu rantai yang cocok dengan permintaan tertentu.
Setiap ekstensi dalam rantai dapat memiliki kumpulan peristiwa yang didukungnya sendiri. Perubahan yang dilakukan oleh ekstensi pada konten permintaan dan respons dapat dilihat oleh ekstensi yang tersisa dalam rantai. Untuk ekstensi yang dikonfigurasi untuk mendukung peristiwa respons, urutan ekstensi akan dibalik di jalur respons.
Ekstensi traffic 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 terkait ekstensi, lihat halaman Kuota dan batas.
Mengonfigurasi menggunakan plugin
Bagian ini menunjukkan cara mengonfigurasi ekstensi traffic menggunakan plugin.
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 di ekstensi Media CDN.
Sebelum memulai
Buat plugin yang berisi kode kustom Anda.
Buat dan konfigurasi Load Balancer Aplikasi yang mendukung plugin ekstensi traffic.
Misalnya, siapkan Load Balancer Aplikasi eksternal global dengan backend grup instance VM.
Siapkan 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 traffic menggunakan plugin
Contoh berikut membantu Anda mengonfigurasi ekstensi traffic menggunakan plugin yang menambahkan header respons, hello: service-extensions, saat host cocok dengan example.com.
Periksa apakah ada kecocokan untuk
example.comdi peta URL.Jalankan perintah
curlberikut terhadap aturan penerusan di VM klien:curl -D - -H "host: example.com" FORWARDING_RULE_IP
Ganti
FORWARDING_RULE_IPdengan alamat IP aturan penerusan. Untuk menemukan alamat IP, gunakan perintahgcloud compute forwarding-rules describe.Outputnya mirip dengan hal berikut ini:
HTTP/1.1 200 OK ... content-length: 46 content-type: text/html via: 1.1 google
Konfigurasi ekstensi traffic.
Konsol
Di Google Cloud konsol, buka halaman Service Extensions.
Klik Create extension.
Wizard akan terbuka untuk memandu Anda melalui beberapa langkah awal.
Untuk produk, pilih Load Balancing. Kemudian, klik Continue.
Daftar Load Balancer Aplikasi yang didukung akan muncul.
Untuk jenis load balancer, pilih Load Balancer Aplikasi eksternal global atau Load Balancer Aplikasi internal lintas region. Kemudian, klik Continue.
Untuk jenis ekstensi, pilih Traffic extensions, lalu klik Continue.
Untuk membuka formulir Create extension, klik Continue.
Di formulir Create extension, perhatikan bahwa pilihan sebelumnya, yang muncul di bagian atas halaman, tidak dapat diedit.
Di bagian Basics, 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 maksimal 1.024 karakter.
Opsional: Di bagian Labels, klik Add label. Kemudian, di baris yang muncul, lakukan hal berikut:
- Untuk Key, masukkan nama kunci.
- Untuk Value, masukkan nilai untuk kunci.
Untuk menambahkan pasangan nilai kunci lainnya, klik Add label. Anda dapat menambahkan maksimal 64 pasangan nilai kunci.
Untuk mengetahui informasi selengkapnya tentang label, lihat Membuat dan memperbarui label untuk project.
Untuk Forwarding rules, pilih satu atau beberapa aturan penerusan yang akan dikaitkan dengan ekstensi—misalnya,
http-content-rule.Aturan penerusan yang sudah dikaitkan dengan ekstensi lain tidak dapat dipilih dan akan terlihat tidak tersedia.
Untuk Extension, guna menambahkan ekstensi yang akan dijalankan untuk permintaan yang cocok, lakukan hal berikut:
Untuk mencocokkan permintaan yang akan menjalankan rantai ekstensi, untuk Match condition, tentukan Common Expression Language (CEL) ekspresi—misalnya,
request.host == "example.com".Untuk mengetahui informasi selengkapnya tentang ekspresi CEL, klik Get syntax help atau lihat Referensi bahasa pencocokan CEL.
Untuk Programmability type, pilih Plugins.
Untuk Plugin, pilih plugin yang dibuat menggunakan Service Extensions untuk jenis produk dan ekstensi yang sama.
Untuk Events, pilih satu atau beberapa jenis peristiwa HTTP yang memanggil ekstensi.
Untuk Forward attributes, pilih atribut yang Anda inginkan untuk diteruskan oleh ekstensi. Untuk mengetahui informasi selengkapnya, lihat Atribut yang didukung.
Untuk Forward headers, klik Add header, lalu tambahkan header HTTP yang akan diteruskan ke ekstensi (dari klien atau backend). Jika header tidak ditentukan, semua header akan dikirim.
Opsional: Jika ekstensi mengalami error atau waktu tunggu habis dan Anda ingin pemrosesan permintaan atau respons dilanjutkan, untuk Fail open, pilih Enabled. Ekstensi berikutnya dalam rantai juga akan dijalankan.
Secara default, opsi Fail open tidak dipilih. Dalam hal ini, saat terjadi error, pemrosesan permintaan atau respons akan berhenti. Jika header respons belum dikirimkan ke klien hilir, kode status HTTP
500generik akan ditampilkan ke klien. Jika header respons telah dikirimkan, aliran HTTP ke klien akan direset.Opsi default untuk tidak memilih Fail open lebih disukai saat memprioritaskan keamanan atau integritas. Mengaktifkan Fail open, terutama untuk operasi non-kritis, akan membantu saat memprioritaskan ketersediaan.
Jika Anda ingin menentukan lebih dari satu ekstensi atau rantai ekstensi, bukan satu ekstensi, klik tombol Switch to advanced mode di akhir formulir, lalu tentukan ekstensi dan rantai yang diperlukan. Ekstensi berjalan dalam urutan yang tercantum.
Tentukan nama unik untuk setiap ekstensi dan rantai ekstensi. 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.
Klik Create extension.
gcloud
Tentukan plugin dalam file YAML dan kaitkan dengan aturan penerusan—misalnya,
http-content-rule.cat >traffic-plugin.yaml <<EOF name: traffic-ext forwardingRules: - https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/forwardingRules/http-content-rule loadBalancingScheme: EXTERNAL_MANAGED extensionChains: - name: "chain1" matchCondition: celExpression: 'request.host == "example.com"' extensions: - name: 'ext1' service: projects/PROJECT_ID/locations/LOCATION/wasmPlugins/WASM_PLUGIN failOpen: false supportedEvents: - RESPONSE_HEADERS forwardAttributes: - request.host - request.path EOFGanti kode berikut:
PROJECT_ID: ID project.REGION: region aturan penerusan. Nilai harus cocok dengan nilai yang ditentukan untuk lokasi plugin.LOCATION: lokasi plugin sebagaiglobalatau region.WASM_PLUGIN: ID atau nama lengkap plugin.
Untuk mengetahui informasi selengkapnya tentang kolom dalam file YAML, lihat ExtensionChain dalam dokumentasi API. Untuk mengetahui informasi tentang atribut yang didukung, lihat Atribut yang didukung.
Impor ekstensi traffic. Gunakan perintah
gcloud service-extensions lb-traffic-extensions importdengan nilai contoh berikut.gcloud service-extensions lb-traffic-extensions import traffic-ext \ --source=traffic-plugin.yaml \ --location=global
Setelah ekstensi traffic dibuat, plugin baru memerlukan waktu beberapa saat untuk didistribusikan ke semua lokasi. Waktu dapat bervariasi di setiap lokasi karena plugin tidak dikirimkan ke semua lokasi secara bersamaan.
Untuk memverifikasi bahwa ekstensi traffic berfungsi seperti yang diharapkan, gunakan perintah
curlyang sama:curl -D - -H "host: example.com" FORWARDING_RULE_IP
Output mencakup header respons
hello: service-extensions.HTTP/1.1 200 OK ... content-length: 46 content-type: text/ hello: service-extensions via: 1.1 googleUntuk memvalidasi bahwa ekstensi hanya menargetkan traffic
example.com, ulangi perintahcurltanpa headerhost.curl -D - FORWARDING_RULE_IP
Outputnya mirip dengan hal berikut ini:
HTTP/1.1 200 OK ... content-length: 46 content-type: text/html via: 1.1 google
Mengonfigurasi ekstensi traffic ke layanan yang dikelola pengguna menggunakan callout
Bagian ini menunjukkan cara mengonfigurasi ekstensi traffic ke layanan backend callout yang dikelola pengguna menggunakan callout.
Sebelum memulai
Buat resource yang diperlukan seperti yang dijelaskan dalam Mengonfigurasi layanan backend callout.
Mengonfigurasi ekstensi traffic menggunakan callout
Contoh berikut membantu Anda mengonfigurasi ekstensi traffic menggunakan callout yang akan dipanggil saat host cocok dengan example.com. Server ekstensi traffic di callout-vm menambahkan header respons, hello: service-extensions, ke permintaan yang cocok.
Periksa apakah ada kecocokan untuk
example.comdi peta URL.Jalankan perintah
curlberikut terhadap aturan penerusan di VM klien:curl -D - -H "host: example.com" FORWARDING_RULE_IP
Ganti
FORWARDING_RULE_IPdengan alamat IP aturan penerusan. Untuk menemukan alamat IP, gunakan perintahgcloud compute forwarding-rules describe.Outputnya mirip dengan hal berikut ini:
HTTP/1.1 200 OK ... content-length: 46 content-type: text/html via: 1.1 google Page served from: l7-ilb-backend-example-1c7t
Konfigurasi ekstensi traffic.
Konsol
Di Google Cloud konsol, buka halaman Service Extensions.
Klik Create extension.
Wizard akan terbuka untuk memandu Anda melalui beberapa langkah awal.
Untuk produk, pilih Load Balancing. Kemudian, klik Continue.
Daftar Load Balancer Aplikasi yang didukung akan muncul.
Pilih jenis load balancer. Untuk load balancer regional, tentukan juga region. Klik Continue.
Untuk jenis ekstensi, pilih Traffic extensions, lalu klik Continue.
Untuk membuka formulir Create extension, klik Continue.
Di formulir Create extension, perhatikan bahwa pilihan sebelumnya, yang muncul di bagian atas halaman, tidak dapat diedit.
Di bagian Basics, 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 maksimal 1.024 karakter.
Opsional: Di bagian Labels, klik Add label. Kemudian, di baris yang muncul, lakukan hal berikut:
- Untuk Key, masukkan nama kunci.
- Untuk Value, masukkan nilai untuk kunci.
Untuk menambahkan pasangan nilai kunci lainnya, klik Add label. Anda dapat menambahkan maksimal 64 pasangan nilai kunci.
Untuk mengetahui informasi selengkapnya tentang label, lihat Membuat dan memperbarui label untuk project.
Untuk Forwarding rules, pilih satu atau beberapa aturan penerusan yang akan dikaitkan dengan ekstensi—misalnya,
l7-ilb-forwarding-rule.Aturan penerusan yang sudah dikaitkan dengan ekstensi lain tidak dapat dipilih dan akan terlihat tidak tersedia.
Untuk Extension, guna menambahkan ekstensi yang akan dijalankan untuk permintaan yang cocok, lakukan hal berikut:
Untuk Programmability type, pilih Callouts.
Untuk mencocokkan permintaan yang akan menjalankan rantai ekstensi, untuk Match condition, tentukan Common Expression Language (CEL) ekspresi—misalnya,
request.host == "example.com".Untuk mengetahui informasi selengkapnya tentang ekspresi CEL, klik Get syntax help atau lihat Referensi bahasa pencocokan CEL.
Untuk Authority, masukkan header
authoritydari permintaan gRPC yang dikirim dari load balancer ke layanan ekstensi service.Untuk Backend service, pilih layanan backend yang dibuat dengan mengikuti petunjuk di Mengonfigurasi layanan backend callout.
Untuk Timeout, tentukan nilai antara 10 dan 1.000 milidetik setelah pesan di aliran mengalami waktu tunggu habis.
Untuk Events, pilih satu atau beberapa jenis peristiwa HTTP yang memanggil ekstensi.
Untuk Forward attributes, pilih atribut yang Anda inginkan untuk diteruskan oleh ekstensi. Untuk mengetahui informasi selengkapnya, lihat Atribut yang didukung.
Untuk Forward headers, klik Add header, lalu tambahkan header HTTP yang akan diteruskan ke ekstensi (dari klien atau backend). Jika header tidak ditentukan, semua header akan dikirim.
Opsional: Jika ekstensi mengalami error atau waktu tunggu habis dan Anda ingin pemrosesan permintaan atau respons dilanjutkan, untuk Fail open, pilih Enabled. Ekstensi berikutnya dalam rantai juga akan dijalankan.
Secara default, opsi Fail open tidak dipilih. Dalam hal ini, saat terjadi error, pemrosesan permintaan atau respons akan berhenti. Jika header respons belum dikirimkan ke klien hilir, kode status HTTP
500generik akan ditampilkan ke klien. Jika header respons telah dikirimkan, aliran HTTP ke klien akan direset.Opsi default untuk tidak memilih Fail open lebih disukai saat memprioritaskan keamanan atau integritas. Mengaktifkan Fail open, terutama untuk operasi non-kritis, akan membantu saat memprioritaskan ketersediaan.
Untuk Metadata, klik Add metadata dan tentukan nilai contoh seperti yang disarankan. Untuk Key, tentukan
key, dan untuk Value, tentukanvalue.Klik Add metadata untuk menambahkan pasangan nilai kunci lainnya. Untuk Key, tentukan
fr, dan untuk Value, tentukanforwarding_rule_id.Kolom Metadata memungkinkan Anda meneruskan informasi tambahan apa pun 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.Ukuran total metadata harus kurang dari 1 KiB. Jumlah total kunci dalam metadata harus kurang dari 20. Panjang setiap kunci harus kurang dari 64 karakter. Panjang setiap nilai harus kurang dari 1.024 karakter. Semua nilai harus berupa string.
Jika Anda ingin menentukan lebih dari satu ekstensi atau rantai ekstensi, bukan satu ekstensi, klik tombol Switch to advanced mode di akhir formulir, lalu tentukan ekstensi dan rantai yang diperlukan. Ekstensi berjalan dalam urutan yang tercantum.
Tentukan nama unik untuk setiap ekstensi dan rantai ekstensi. 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.
Klik Create extension.
gcloud
Tentukan callout dalam file YAML dan kaitkan dengan aturan penerusan. Gunakan nilai contoh yang disediakan.
cat >traffic.yaml <<EOF name: traffic-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.host == "example.com"' 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" supportedEvents: - RESPONSE_HEADERS forwardAttributes: - request.host - request.path EOFGanti
PROJECT_IDdengan ID project.Kolom
metadatadalam konfigurasi ekstensi memungkinkan Anda meneruskan informasi tambahan apa pun 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.Ukuran total
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.Untuk mengetahui informasi selengkapnya tentang kolom dalam file YAML, lihat ExtensionChain dalam dokumentasi API. Untuk mengetahui informasi tentang atribut yang didukung, lihat Atribut yang didukung.
Impor ekstensi traffic. Gunakan
gcloud service-extensions lb-traffic-extensions importperintah dengan nilai contoh berikut.gcloud service-extensions lb-traffic-extensions import traffic-ext \ --source=traffic.yaml \ --location=us-west1
Verifikasi bahwa ekstensi traffic berfungsi seperti yang diharapkan. Gunakan perintah
curlyang sama:curl -D - -H "host: example.com" FORWARDING_RULE_IP
Output mencakup header respons
hello: service-extensions.HTTP/1.1 200 OK ... content-length: 46 content-type: text/ hello: service-extensions via: 1.1 google Page served from: l7-ilb-backend-example-1c7tUntuk memvalidasi bahwa ekstensi hanya menargetkan traffic
example.com, ulangi perintahcurltanpa headerhost.curl -D - FORWARDING_RULE_IP
Outputnya mirip dengan hal berikut ini:
HTTP/1.1 200 OK ... content-length: 46 content-type: text/html via: 1.1 google Page served from: l7-ilb-backend-example-1c7t
Langkah berikutnya
- Lihat contoh plugin Rust, Go, dan C++ serta alat pengujian di repositori GitHub Service Extensions untuk plugin.
- Lihat contoh Python dan Go dari
ext_procserver di repositori GitHub Service Extensions untuk callout. - Mengonfigurasi ekstensi rute
- Mengelola ekstensi
- Mengelola plugin
- Mengonfigurasi ekstensi ke layanan Google