Halaman ini memberikan informasi ringkasan tentang integrasi plugin dengan Load Balancer Aplikasi Cloud Load Balancing dan Media CDN.
Fit in berada dalam Pratinjau untuk Media CDN.
Plugin dibuat menggunakan format WebAssembly (Wasm) dan menggunakan Proxy-Wasm API.
Wasm adalah format petunjuk biner terbuka dan terstandardisasi yang memungkinkan host memuat dan menjalankan modul Wasm dengan kode yang disediakan pelanggan. Wasm memiliki sejumlah manfaat untuk mengeksekusi kode pelanggan, termasuk sandbox untuk keamanan, dukungan untuk beberapa bahasa, portabilitas, dukungan yang luas dan terus berkembang dalam industri, serta peningkatan performa dibandingkan dengan opsi lain yang didasarkan pada virtual machine (VM), seperti JavaScript.
Proxy-Wasm adalah project open source yang dimulai oleh Google. API ini menentukan API yang memungkinkan Anda menyesuaikan perilaku proxy jaringan dengan menerapkan callback yang akan dijalankan selama pemrosesan permintaan dan respons HTTP.
Cara kerja plugin
Anda dapat menggunakan Service Extensions dengan Load Balancer Aplikasi dan Media CDN sebagai berikut:
Siapkan kode plugin sebagai berikut:
Buat plugin yang berisi kode plugin yang diupload.
Konfigurasikan plugin di ekstensi Cloud Load Balancing atau ekstensi Media CDN.
Referensi plugin
Service Extensions membantu Anda membuat resource utama berikut yang membantu Anda menambahkan kode kustom di jalur pemrosesan:
Plugin, yang berisi kode kustom yang ingin Anda deploy.
Versi plugin, yang merupakan versi modul Wasm Anda. Anda dapat menunjukkan versi modul Wasm mana yang akan digunakan plugin sebagai modul utama (aktif).
Mengakses atribut di plugin
Plugin Wasm dapat mengakses atribut yang diteruskan menggunakan panggilan ABI proxy_get_property, yang merupakan bagian dari ABI Proxy-Wasm. Nama properti yang dapat Anda ambil sesuai dengan nama atribut.
Anda dapat mengakses properti sebagai representasi jalur nama atribut. Misalnya, untuk mengambil request.host, Anda dapat menggunakan representasi jalur seperti
{"request", "host"}.
Contoh Rust konseptual berikut menunjukkan cara mengakses atribut yang diteruskan dalam implementasi HttpContext:
use proxy_wasm::traits::{HttpContext, RootContext}; use proxy_wasm::types::Action; // ... inside your HttpContext implementation ... fn on_request_headers(&mut self, _num_headers: usize, _end_of_stream: bool) -> Action { if let Some(host) = self.get_property(vec!["request", "host"]) { // host is a Vec, convert to string let host_str = String::from_utf8(host).unwrap_or_default(); log::info!("Request host: {}", host_str); } if let Some(region) = self.get_property(vec!["source", "client_region"]) { let region_str = String::from_utf8(region).unwrap_or_default(); log::info!("Client region: {}", region_str); } Action::Continue }
Batasan
Bagian ini mencantumkan beberapa batasan terkait plugin.
Batasan resource
Plugin sangat dibatasi dalam jumlah resource yang dapat digunakan:
Plugin dapat menggunakan hingga 1 msec vCPU yang dinormalisasi untuk setiap pemanggilan. Milidetik CPU bergantung pada platform, tetapi platform yang dinormalisasi kira-kira setara dengan prosesor dengan kecepatan clock 4 GHz. Pemanggilan adalah fase eksekusi yang ditagih secara independen, yang dapat berupa header permintaan, isi permintaan, header respons, atau isi respons.
Plugin dapat menggunakan memori hingga 16 MiB untuk setiap instance VM (4 MiB untuk plugin Media CDN).
Instance harus dapat melayani hingga 1.000 permintaan serentak, yang berarti bahwa plugin dapat menyimpan memori hingga 16 KiB untuk setiap streaming (4 KiB untuk plugin Media CDN). Total penggunaan memori mencakup status global dan alokasi stack. Plugin yang melebihi batas ini akan dihentikan.
Sebaiknya gunakan C++ dan Rust, karena keduanya menghasilkan plugin dengan jejak memori terkecil. Go SDK tidak direkomendasikan untuk Media CDN karena runtime dan pembersih sampah memori Go memerlukan jejak memori dasar minimum sebesar 2–3 MiB.
Gunakan penguji plugin untuk membandingkan karakteristik CPU dan memori plugin.
Batasan pada API
Plugin dapat menggunakan subset ABI Proxy-Wasm. Plugin tidak mendukung timer, metrik kustom, data bersama, antrean bersama, atau panggilan jaringan keluar.
Peristiwa trailer HTTP tidak didukung.
Batasan terkait manipulasi header
Ukuran maksimum mutasi apa pun (header atau potongan isi) adalah 128 KiB.
Plugin tidak dapat mengganti mode pemrosesan streaming
ext_proc.Manipulasi header melalui plugin tidak didukung untuk beberapa header. Pemroses mengabaikan modifikasi apa pun di header ini, dan terus memproses permintaan.
Untuk plugin Media CDN, hal berikut tidak didukung:
- Header:
CDN-Loop,connection,keep-alive,proxy-authenticate,proxy-authorization,proxy-connection,te,trailers,transfer-encoding,upgrade, atauX-user-IP. - Header yang diawali dengan:
x-forwarded,x-goog-,x-google,x-gfe, ataux-amz-.
Untuk plugin Cloud Load Balancing, hal berikut tidak didukung:
Header:
connection,keep-alive,proxy-authenticate,proxy-authorization,proxy-connection,sec-user-ip,te,trailer,transfer-encoding,upgrade,x-dont-count-ads,x-dont-show-ads,x-gr,x-proxyuser-ip, ataux-user-ip.Selain itu, untuk
LbTrafficExtension, header ini juga tidak didukung:method,authority,scheme, atau header host.Header yang diawali dengan:
sec-gfe-,sec-google-,x-amz-,x-forwarded-,x-gfe-,x-goog-,x-google-, ataux-gproxy-.
- Header:
Batasan dengan klien dan backend HTTP/1.1
Saat Anda mengonfigurasi REQUEST_BODY atau RESPONSE_BODY untuk
ekstensi, jika load balancer menerima permintaan yang cocok, load balancer akan menghapus
header Content-Length dari respons dan beralih ke
encoding isi yang dipotong-potong.