Belajar Istio - Advanced Extensibility (EnvoyFilter & WASM Proxy-WASM)
Episode 15 of 23

Belajar Istio - Advanced Extensibility (EnvoyFilter & WASM Proxy-WASM)

Episode 15 melampaui CRD bawaan: kapan memakai EnvoyFilter dengan aman, membangun filter Proxy-WASM untuk logika kustom, cara mendaftarkannya lewat extension provider dan Telemetry API, serta contoh header enricher dan telemetry exporter.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

Istio sudah punya banyak CRD, tetapi dunia nyata selalu punya kebutuhan khusus: menambah header khusus, memanggil service otorisasi kustom, atau mengekspor metrik bisnis. Episode 15 ini membahas dua cara memperluas mesh: EnvoyFilter untuk patch langsung dan Proxy-WASM untuk filter kustom yang dijalankan di sandbox.

Pesan utama episode ini: dengan kekuatan besar datang tanggung jawab besar. Kedua alat ini harus dipakai dengan disiplin.

Kapan Memakai EnvoyFilter dengan Aman

Kriteria Penggunaan

EnvoyFilter adalah patch langsung ke konfigurasi Envoy. Pertimbangkan memakainya hanya jika semua opsi berikut gagal:

  • Fitur sudah dicoba dengan CRD level tinggi (VirtualService, DestinationRule, Telemetry, AuthorizationPolicy).
  • Kebutuhan sudah dianalisis dengan proxy-config dan terbukti tidak bisa dicapai lewat API publik.
  • Tim paham struktur konfigurasi Envoy untuk versi yang dipakai.

Risiko yang Harus Diakui

EnvoyFilter rawan rusak saat upgrade Envoy karena nama filter, struktur config, dan API berubah antar versi. Aturan pengamanannya:

  • Pasang di namespace istio-system agar terlihat sebagai konfigurasi mesh.
  • Batasi dengan match yang se-spesifik mungkin.
  • Sertakan owner dan alasan di komentar Git.
  • Uji di staging dengan traffic nyata sebelum menyentuh produksi.
Inspeksi sebelum patch
istioctl proxy-config listener productpage-abc123
istioctl proxy-config cluster productpage-abc123

istioctl proxy-config listener memperlihatkan struktur listener nyata. Kembangkan EnvoyFilter dari struktur ini, bukan dari ingatan.

Proxy-WASM: Filter Kustom dalam Sandbox

Mengapa WASM

Filter Envoy asli harus ditulis dalam C++ dan dikompilasi ke binary Envoy itu sendiri — tidak praktis. Proxy-WASM (WASM) memungkinkan filter ditulis dalam bahasa lain (Rust, Go, C++, AssemblyScript), dikompilasi ke WebAssembly, dan dimuat oleh Envoy saat runtime di dalam sandbox yang aman. Istio mendukungnya lewat API WasmPlugin.

Membangun Filter Sederhana

Contoh paling sederhana: filter Rust yang menambah header pada request. Setelah dikompilasi menjadi filter.wasm, daftarkan:

WasmPlugin
apiVersion: extensions.istio.io/v1alpha1
kind: WasmPlugin
metadata:
  name: header-enricher
  namespace: istio-system
spec:
  selector:
    matchLabels:
      app: productpage
  url: oci://registry.example.com/mesh/header-enricher:v1
  phase: AUTHN
  pluginConfig:
    headerName: x-tenant
    headerValue: tenant-a

WasmPlugin mendaftarkan modul WASM dan menerapkannya pada workload yang cocok dengan selector. url: oci:// memuat modul dari registry OCI — pola yang direkomendasikan karena bisa di-versioning seperti image.

Kelebihan WASM dibanding EnvoyFilter

  • Modul di-sandbox: crash filter tidak menjatuhkan Envoy.
  • Update modul tanpa rebuild Envoy: cukup ganti versi OCI.
  • Dikembangkan dalam bahasa yang lebih aman daripada patch C++.

Contoh: Header Enricher dan Telemetry Export

Telemetry API dengan Ekstensi

Selain WasmPlugin, ekstensi bisa dipasang lewat Telemetry API dengan metrics kustom:

Metrik kustom via Telemetry
apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
  name: custom-metrics
  namespace: istio-system
spec:
  metrics:
  - providers:
    - name: prometheus
    overrides:
    - match:
        metric: REQUEST_COUNT
      tagOverrides:
        tenant:
          value: "istio_attributize(request.headers['x-tenant'])"

tagOverrides menambah dimensi tenant ke metrik request count dari header. Hasilnya: kalian bisa mengukur traffic per tenant langsung di Prometheus — contoh praktis telemetry exporter tanpa menulis filter baru.

Extension Provider dan Orchestrasi

Saat modul WASM banyak, daftarkan provider lewat MeshConfig extensionProviders agar bisa dipakai secara konsisten:

Extension provider
spec:
  meshConfig:
    extensionProviders:
    - name: tenant-ext
      wasm:
        url: oci://registry.example.com/mesh/tenant-ext:v1
        imagePullPolicy: IfNotPresent

Provider ini lalu bisa direferensikan dari beberapa WasmPlugin. Kelola versi di sini, bukan di masing-masing plugin — lebih mudah di-upgrade dan diaudit.

Warning

WASM tetap harus diuji terhadap versi Envoy yang dipakai Istio. Modul yang dikompilasi untuk ABI proxy-wasm yang berbeda bisa gagal dimuat secara diam-diam. Periksa log istio-proxy saat first load.

Penutup

Episode 15 membuka pintu ekstensibilitas: memakai EnvoyFilter dengan kriteria dan pengamanan yang ketat, membangun filter Proxy-WASM yang di-sandbox dan di-versioning via OCI, serta mengintegrasikannya lewat WasmPlugin, extension providers, dan Telemetry API.

Inti yang harus dibawa pulang:

  • EnvoyFilter hanya setelah CRD level tinggi terbukti tidak cukup.
  • Selalu kembangkan EnvoyFilter dari output proxy-config, bukan dari ingatan.
  • Proxy-WASM berjalan di sandbox dan bisa di-update tanpa rebuild Envoy.
  • WasmPlugin adalah API Istio untuk memuat modul WASM.
  • oci:// URL memungkinkan versioning modul seperti image.
  • Telemetry API bisa menambah dimensi metrik tanpa filter kustom.
  • Periksa log sidecar saat pertama memuat modul WASM.

Di episode 16 selanjutnya kita akan menyatukan banyak cluster: multi-cluster dan mesh federation — topologi primary-remote dan replicated control plane, east-west gateway, ekspor service lintas cluster, serta pembentukan trust domain antar mesh.

Belajar Istio - Advanced Extensibility (EnvoyFilter & WASM Proxy-WASM) | Belajar Istio