Розширюваність

Istio надає два основних механізми розширення: розширення Envoy, описані нижче, та постачальники розширень.

Розширення проксі Envoy

Istio надає два механізми для розширення проксі на основі Envoy: WebAssembly (Wasm) та Lua. Обидва налаштовуються за допомогою API TrafficExtension, який надає уніфікований спосіб приєднання розширень до робочих навантажень із узгодженим націлюванням та впорядкуванням за фазою/пріоритетом.

Вибір типу фільтра

WebAssemblyLua
Мови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 статистики та ведення журналів для збору метрик і моніторингу.
Розширення Istio/Envoy
Розширення Istio/Envoy

Приклад

Приклад втулка Proxy-Wasm на C++ для фільтра можна знайти тут. Ви можете слідувати цьому посібнику для реалізації розширення Wasm за допомогою C++.

Екосистема

Скрипти Lua

Фільтри Lua забезпечують легкий підхід із вбудованими скриптами для простих перетворень запитів і відповідей. Код Lua вбудовується безпосередньо в ресурс TrafficExtension і виконується в проксі Envoy, без необхідності розповсюдження модулів. Фільтри Lua найкраще підходять для простого маніпулювання заголовками, ведення журналів або умовної логіки. Для складнішої обробки рекомендуються фільтри WebAssembly.

Обсяг памʼяті Lua значно менший, ніж у WebAssembly. Результати тестів показують, що Lua споживає приблизно 20–26 MiB незалежно від паралельності, тоді як WebAssembly коливається від ~110 MiB за низької паралельності до ~290 MiB за високої:

ПаралельністьLua (MiB)Wasm (MiB)
119.79117.7
223.07132.5
422.63152.0
823.97190.9
1625.66291.8
Чи була ця інформація корисною?
Чи є у вас пропозиції щодо покращення?

Дякуємо за ваш відгук!