Розширюваність
Istio надає два основних механізми розширення: розширення Envoy, описані нижче, та постачальники розширень.
Розширення проксі Envoy
Istio надає два механізми для розширення проксі на основі Envoy: WebAssembly (Wasm) та Lua. Обидва налаштовуються за допомогою API TrafficExtension, який надає уніфікований спосіб приєднання розширень до робочих навантажень із узгодженим націлюванням та впорядкуванням за фазою/пріоритетом.
Вибір типу фільтра
| WebAssembly | Lua | |
|---|---|---|
| Мови | C++, Rust, Go, AssemblyScript та інші | Тільки Lua |
| Розповсюдження | Завантажується з OCI-реєстрів, HTTP-URL або локальних файлів | Вбудовується безпосередньо в ресурс |
| Памʼять | Вища — кожен втулок працює у власній пісочниці | Приблизно в 10 разів нижча, ніж у WebAssembly |
| Ізоляція | Повна VM-пісочниця — збій обмежується втулком | Працює в процесі; збій може зупинити робочий потік |
| Політика відмов | Налаштовується — за замовчуванням fail-closed | Тільки fail-open — без опції конфігурації |
| SDLC | Повна екосистема: юніт-тести, CI, версіоновані релізи | Обмежена — скрипт живе в самому ресурсі |
| Найкраще підходить для | Складної логіки, багаторазових втулків, промислових розширень | Простих одноразових перетворень, тимчасових обхідних рішень |
Загалом, для промислових розширень, які потребують тестування, версіонування та повторного використання, віддавайте перевагу WebAssembly. Для легких, локальних змін, де простота вбудованого коду переважає відсутність інструментів, віддавайте перевагу Lua.
Втулки WebAssembly
WebAssembly є технологією ізоляції для складніших розширень. API для пісочниці Proxy-Wasm замінює Mixer як основний механізм розширення в Istio.
Цілі використання пісочниці WebAssembly:
- Ефективність — розширення додає мінімальні затримки, навантаження на ЦП і використання памʼяті.
- Функціональність — розширення може забезпечувати виконання політики, збір телеметрії та виконання мутацій корисного навантаження.
- Ізоляція — помилка програмування або збій одного втулка не впливає на інші втулки.
- Конфігурація — втулки налаштовуються за допомогою API, яке узгоджується з іншими API Istio. Розширення можна налаштувати динамічно.
- Оператор — розширення можна випробувати в тестовому режимі, а також розгорнути з конфігурацією log-only, fail-open або fail-close.
- Розробник розширень — втулок можна написати кількома мовами програмування.
Ця відеопрезентація є вступом до архітектури інтеграції WebAssembly.
Високорівнева архітектура
Розширення Istio (втулки Proxy-Wasm) мають кілька компонентів:
- Інтерфейс постачальника фільтрів (SPI) для створення втулків Proxy-Wasm для фільтрів.
- Пісочниця з V8 Wasm Runtime, вбудована в Envoy.
- Host API для роботи з заголовками, трейлерами та метаданими.
- API викликів для gRPC і HTTP запитів.
- API статистики та ведення журналів для збору метрик і моніторингу.
Приклад
Приклад втулка Proxy-Wasm на C++ для фільтра можна знайти тут. Ви можете слідувати цьому посібнику для реалізації розширення Wasm за допомогою C++.
Екосистема
- Istio Ecosystem Wasm Extensions
- Proxy-Wasm ABI specification
- Proxy-Wasm C++ SDK
- Proxy-Wasm Go SDK
- Proxy-Wasm Rust SDK
- Proxy-Wasm AssemblyScript SDK
- WebAssembly Hub
- WebAssembly Extensions For Network Proxies (відео)
Скрипти Lua
Фільтри Lua забезпечують легкий підхід із вбудованими скриптами для простих перетворень запитів і відповідей. Код Lua вбудовується безпосередньо в ресурс TrafficExtension і виконується в проксі Envoy, без необхідності розповсюдження модулів. Фільтри Lua найкраще підходять для простого маніпулювання заголовками, ведення журналів або умовної логіки. Для складнішої обробки рекомендуються фільтри WebAssembly.
Обсяг памʼяті Lua значно менший, ніж у WebAssembly. Результати тестів показують, що Lua споживає приблизно 20–26 MiB незалежно від паралельності, тоді як WebAssembly коливається від ~110 MiB за низької паралельності до ~290 MiB за високої:
| Паралельність | Lua (MiB) | Wasm (MiB) |
|---|---|---|
| 1 | 19.79 | 117.7 |
| 2 | 23.07 | 132.5 |
| 4 | 22.63 | 152.0 |
| 8 | 23.97 | 190.9 |
| 16 | 25.66 | 291.8 |