Istio EnvoyFilter: Pengertian, Cara Kerja, Arsitektur, Komponen, Fungsi, Manfaat, Kelebihan, Kekurangan, dan Implementasinya | Dewa234
Istio EnvoyFilter: Pengertian, Cara Kerja, Arsitektur, Komponen, Fungsi, Manfaat, Kelebihan, Kekurangan, dan Implementasinya
Setelah membahas Istio Telemetry API, kita telah memahami bagaimana Istio menyediakan metrics, access logging, dan distributed tracing untuk membangun observability pada service mesh. Namun, pada kebutuhan tertentu, konfigurasi standar Istio belum tentu cukup.
Dalam lingkungan enterprise, administrator terkadang membutuhkan kontrol yang lebih spesifik terhadap proxy Envoy. Misalnya melakukan modifikasi terhadap HTTP header, mengatur filter tertentu, menyesuaikan perilaku proxy, atau mengintegrasikan konfigurasi khusus yang tidak tersedia melalui resource Istio standar.
Untuk kebutuhan tersebut, Istio menyediakan resource bernama EnvoyFilter. Resource ini memberikan kemampuan kepada administrator untuk melakukan kustomisasi terhadap konfigurasi Envoy yang digunakan oleh Istio.
EnvoyFilter merupakan fitur advanced sehingga penggunaannya perlu dilakukan dengan hati-hati. Konfigurasi yang salah dapat memengaruhi perilaku proxy bahkan menyebabkan traffic aplikasi mengalami gangguan.
Pada artikel ini kita akan membahas EnvoyFilter mulai dari pengertian, cara kerja, arsitektur, komponen, fungsi, manfaat, contoh penggunaan, konfigurasi YAML, hingga best practice dalam lingkungan production.
Apa Itu Istio EnvoyFilter?
Istio EnvoyFilter adalah resource konfigurasi Istio yang memungkinkan administrator memodifikasi konfigurasi proxy Envoy yang digunakan dalam service mesh.
Dengan EnvoyFilter, administrator dapat menambahkan, mengubah, atau menghapus konfigurasi tertentu pada proxy Envoy sesuai kebutuhan aplikasi Dewa234 maupun infrastruktur.
Application
│
▼
Istio Proxy
│
▼
EnvoyFilter
│
├── HTTP Filter
├── Network Filter
├── Listener
├── Cluster
└── Route
│
▼
Customized Envoy
Berbeda dengan resource Istio seperti VirtualService, DestinationRule, atau AuthorizationPolicy yang menyediakan abstraksi konfigurasi tingkat tinggi, EnvoyFilter memberikan kontrol yang lebih dekat terhadap konfigurasi internal Envoy.
Mengapa EnvoyFilter Dibutuhkan?
Istio telah menyediakan banyak resource untuk mengatur traffic management, security, dan observability. Namun, tidak semua kebutuhan khusus dapat direpresentasikan menggunakan resource tersebut.
Dalam situasi tertentu, organisasi mungkin membutuhkan konfigurasi Envoy yang lebih spesifik. Contohnya adalah menambahkan filter HTTP tertentu atau mengubah konfigurasi listener pada workload tertentu.
Istio Standard Configuration
│
├── VirtualService
├── DestinationRule
├── Gateway
├── AuthorizationPolicy
└── Telemetry
│
▼
Advanced Requirement
│
▼
EnvoyFilter
EnvoyFilter menjadi mekanisme advanced customization ketika konfigurasi Istio standar belum mampu memenuhi kebutuhan tersebut.
Hubungan EnvoyFilter dengan Envoy Proxy
Untuk memahami EnvoyFilter, penting untuk memahami hubungan antara Istio dan Envoy. Istio menggunakan Envoy sebagai data plane proxy untuk menangani traffic aplikasi.
Istio Control Plane
│
│ Configuration
▼
Envoy Proxy
│
├── HTTP Traffic
├── TCP Traffic
├── TLS
└── Routing
│
▼
Application
EnvoyFilter memungkinkan konfigurasi tertentu pada Envoy dimodifikasi berdasarkan kebutuhan yang telah ditentukan oleh administrator.
Bagaimana Cara Kerja EnvoyFilter?
Ketika Envoy proxy dikonfigurasi oleh Istio, terdapat berbagai bagian konfigurasi seperti listeners, clusters, routes, dan HTTP filters. EnvoyFilter dapat digunakan untuk melakukan perubahan terhadap bagian tertentu tersebut.
Envoy Configuration
│
▼
EnvoyFilter
│
├── INSERT
├── MERGE
├── REPLACE
└── REMOVE
│
▼
Modified Configuration
│
▼
Envoy Proxy
Dengan mekanisme tersebut, administrator dapat melakukan customization tanpa harus membangun ulang Envoy atau mengubah source code aplikasi.
Komponen Utama EnvoyFilter
| Komponen | Fungsi |
|---|---|
| workloadSelector | Menentukan workload yang menjadi target konfigurasi. |
| configPatches | Menentukan perubahan konfigurasi Envoy. |
| applyTo | Menentukan bagian konfigurasi Envoy yang dimodifikasi. |
| match | Menentukan kondisi konfigurasi yang harus dicocokkan. |
| patch | Menentukan operasi perubahan konfigurasi. |
Workload Selector
workloadSelector digunakan untuk menentukan workload yang akan menerima konfigurasi EnvoyFilter. Selector biasanya menggunakan label Kubernetes.
EnvoyFilter
│
workloadSelector
│
app=payment
│
▼
Payment Service
Dengan selector, administrator dapat memastikan konfigurasi khusus hanya diterapkan pada workload tertentu dan tidak memengaruhi seluruh service mesh.
ConfigPatches
Bagian configPatches merupakan salah satu komponen terpenting dalam EnvoyFilter. Di sinilah administrator menentukan perubahan yang ingin diterapkan terhadap konfigurasi Envoy.
configPatches
│
├── applyTo
│
├── match
│
└── patch
Setiap patch menentukan bagian Envoy yang akan dimodifikasi serta operasi yang dilakukan terhadap konfigurasi tersebut.
ApplyTo pada EnvoyFilter
Field applyTo menentukan objek konfigurasi Envoy yang menjadi target patch. Target tersebut dapat berupa komponen seperti listener, route configuration, cluster, atau HTTP filter.
| Target | Contoh Fungsi |
|---|---|
| HTTP_FILTER | Memodifikasi atau menambahkan HTTP filter. |
| NETWORK_FILTER | Memodifikasi network filter. |
| LISTENER | Memodifikasi listener Envoy. |
| CLUSTER | Memodifikasi konfigurasi cluster. |
| ROUTE_CONFIGURATION | Memodifikasi konfigurasi routing. |
Patch Operation
Patch operation menentukan bagaimana konfigurasi Envoy akan dimodifikasi. Beberapa operasi yang umum digunakan adalah INSERT_BEFORE, INSERT_AFTER, MERGE, REPLACE, dan REMOVE.
Existing Envoy Config
│
▼
PATCH
│
┌────┼────┐
▼ ▼ ▼
INSERT MERGE REMOVE
│
▼
Updated Envoy Config
Pemilihan operasi harus dilakukan dengan hati-hati karena perubahan pada konfigurasi proxy dapat berdampak langsung terhadap traffic aplikasi.
Fungsi Istio EnvoyFilter
- Melakukan customization terhadap Envoy Proxy.
- Menambahkan HTTP filter tertentu.
- Memodifikasi network filter.
- Mengubah konfigurasi listener.
- Menyesuaikan konfigurasi route.
- Memodifikasi cluster configuration.
- Mendukung kebutuhan advanced traffic management.
- Mengintegrasikan konfigurasi khusus yang belum tersedia pada API Istio standar.
- Menyediakan kontrol lebih detail terhadap data plane.
Contoh Sederhana EnvoyFilter
Berikut adalah contoh struktur dasar EnvoyFilter yang menggunakan workload selector dan config patch.
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: custom-filter
spec:
workloadSelector:
labels:
app: payment
configPatches:
- applyTo: HTTP_FILTER
match:
context: SIDECAR_INBOUND
patch:
operation: INSERT_BEFORE
value:
name: custom-http-filter
Contoh tersebut menunjukkan pola dasar EnvoyFilter. Detail konfigurasi filter harus disesuaikan dengan filter Envoy yang memang tersedia dan kompatibel dengan versi Istio yang digunakan.
EnvoyFilter dalam Arsitektur Service Mesh
Istio Control Plane
│
▼
Envoy Configuration
│
▼
EnvoyFilter
│
┌─────────────┼─────────────┐
▼ ▼ ▼
Listener Route Cluster
│ │ │
└─────────────┼─────────────┘
▼
Envoy Proxy
│
▼
Application
Arsitektur tersebut menunjukkan bahwa EnvoyFilter berada pada lapisan konfigurasi proxy dan memberikan kemampuan customization yang lebih rendah level dibandingkan resource Istio standar.
EnvoyFilter dan Ambient Mesh
Pada lingkungan Ambient Mesh, penggunaan EnvoyFilter perlu dipahami secara berbeda dibandingkan Sidecar Mode karena tidak semua traffic ditangani oleh Envoy sidecar.
Ambient Mesh
│
├── ztunnel
│
│ Layer 4
│
▼
Waypoint Proxy
│
│ Layer 7
▼
Application
Kebutuhan customization Layer 7 pada Ambient Mesh dapat berkaitan dengan Waypoint Proxy. Oleh karena itu, administrator harus memastikan komponen proxy yang menjadi target benar-benar sesuai dengan konteks konfigurasi yang ingin dimodifikasi.
Perbedaan EnvoyFilter dengan Telemetry API
| Resource | Fokus |
|---|---|
| Telemetry API | Metrics, logging, dan tracing. |
| EnvoyFilter | Customization konfigurasi Envoy. |
Telemetry API menyediakan abstraksi yang lebih tinggi dan lebih mudah digunakan untuk observability. EnvoyFilter memberikan kontrol yang lebih dalam terhadap proxy sehingga penggunaannya lebih advanced.
Jenis Patch Operation pada EnvoyFilter
Salah satu konsep penting dalam EnvoyFilter adalah patch operation. Operation menentukan bagaimana konfigurasi Envoy yang sudah ada akan dimodifikasi. Pemilihan operation harus disesuaikan dengan posisi dan tujuan perubahan konfigurasi.
| Operation | Fungsi |
|---|---|
| INSERT_BEFORE | Menambahkan konfigurasi sebelum konfigurasi target. |
| INSERT_AFTER | Menambahkan konfigurasi setelah konfigurasi target. |
| INSERT_FIRST | Menambahkan konfigurasi pada posisi pertama. |
| INSERT_LAST | Menambahkan konfigurasi pada posisi terakhir. |
| MERGE | Menggabungkan konfigurasi baru dengan konfigurasi yang sudah ada. |
| REPLACE | Mengganti konfigurasi target. |
| REMOVE | Menghapus konfigurasi target. |
INSERT_BEFORE
INSERT_BEFORE digunakan ketika administrator ingin menambahkan filter atau konfigurasi baru sebelum konfigurasi target tertentu.
Existing Filters
│
├── Filter A
│
├── Filter B
│
└── Filter C
│
▼
INSERT_BEFORE Filter B
│
▼
Updated Filters
├── Filter A
├── New Filter
├── Filter B
└── Filter C
Operation ini berguna ketika urutan filter memiliki pengaruh terhadap proses request dan response.
INSERT_AFTER
INSERT_AFTER memiliki konsep yang serupa, tetapi konfigurasi baru ditempatkan setelah konfigurasi target.
Existing
Filter A
Filter B
Filter C
│
▼
INSERT_AFTER Filter B
│
▼
Filter A
Filter B
New Filter
Filter C
Pemilihan posisi filter perlu diperhatikan karena Envoy memproses filter berdasarkan urutan yang telah ditentukan.
INSERT_FIRST dan INSERT_LAST
INSERT_FIRST menempatkan konfigurasi baru pada posisi awal, sedangkan INSERT_LAST menempatkannya pada posisi akhir.
INSERT_FIRST New Filter Filter A Filter B Filter C INSERT_LAST Filter A Filter B Filter C New Filter
Kedua operation tersebut dapat digunakan ketika administrator tidak membutuhkan target filter tertentu sebagai referensi posisi.
MERGE
Operation MERGE digunakan untuk menggabungkan konfigurasi baru dengan konfigurasi yang telah tersedia.
Existing Config
│
├── Setting A
├── Setting B
└── Setting C
+
New Config
├── Setting B
└── Setting D
│
▼
MERGE
│
▼
Combined Config
MERGE cocok ketika administrator hanya ingin menyesuaikan sebagian konfigurasi tanpa mengganti seluruh objek konfigurasi.
REPLACE
Operation REPLACE digunakan untuk mengganti konfigurasi target dengan konfigurasi baru.
Original
Configuration A
│
▼
REPLACE
│
▼
Configuration B
Karena operation ini dapat mengubah konfigurasi secara signifikan, penggunaannya harus dilakukan dengan sangat hati-hati.
REMOVE
Operation REMOVE digunakan untuk menghapus konfigurasi tertentu dari Envoy.
Before
Filter A
Filter B
Filter C
│
▼
REMOVE Filter B
│
▼
Filter A
Filter C
Penghapusan filter dapat berdampak langsung terhadap traffic. Oleh sebab itu, target yang akan dihapus harus dipastikan benar-benar sesuai dengan kebutuhan.
Context pada EnvoyFilter
EnvoyFilter juga dapat menggunakan context untuk menentukan konteks traffic yang menjadi target konfigurasi.
| Context | Contoh Penggunaan |
|---|---|
| SIDECAR_INBOUND | Traffic yang masuk menuju workload. |
| SIDECAR_OUTBOUND | Traffic yang keluar dari workload. |
| GATEWAY | Traffic yang diproses oleh gateway. |
| ANY | Konfigurasi yang tidak dibatasi pada satu konteks tertentu. |
SIDECAR_INBOUND
Context SIDECAR_INBOUND digunakan ketika konfigurasi ditujukan untuk traffic yang masuk menuju workload melalui sidecar proxy.
External / Service
│
▼
Sidecar Proxy
│
SIDECAR_INBOUND
│
▼
Application
Context ini berguna ketika administrator ingin melakukan customization terhadap request yang masuk ke sebuah service.
SIDECAR_OUTBOUND
SIDECAR_OUTBOUND digunakan untuk traffic yang keluar dari workload menuju service lain.
Application
│
▼
Sidecar Proxy
│
SIDECAR_OUTBOUND
│
▼
Destination Service
Contohnya adalah ketika konfigurasi tertentu hanya diperlukan pada traffic yang dikirim oleh Payment Service menuju Order Service.
GATEWAY Context
Context GATEWAY digunakan ketika EnvoyFilter diterapkan pada gateway. Hal ini berguna untuk melakukan customization terhadap traffic yang melewati Istio Gateway.
Internet │ ▼ Istio Gateway │ EnvoyFilter │ ▼ Internal Service
Penggunaan pada gateway harus dilakukan dengan hati-hati karena perubahan konfigurasi dapat memengaruhi traffic dari banyak aplikasi sekaligus.
Contoh EnvoyFilter untuk HTTP Filter
Salah satu penggunaan EnvoyFilter adalah menambahkan HTTP filter pada proxy. Contoh berikut menggambarkan struktur konfigurasi secara umum.
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: custom-http-filter
spec:
workloadSelector:
labels:
app: payment
configPatches:
- applyTo: HTTP_FILTER
match:
context: SIDECAR_INBOUND
patch:
operation: INSERT_FIRST
value:
name: custom-filter
Konfigurasi aktual filter harus disesuaikan dengan kebutuhan dan konfigurasi Envoy yang digunakan. Jangan menyalin konfigurasi filter secara langsung ke production tanpa melakukan validasi kompatibilitas terlebih dahulu.
Contoh Modifikasi HTTP Header
EnvoyFilter dapat digunakan untuk kebutuhan tertentu yang berkaitan dengan pemrosesan HTTP. Salah satu skenario yang mungkin digunakan adalah menyesuaikan informasi header melalui konfigurasi Envoy yang sesuai.
Client │ HTTP Request │ ▼ Envoy Proxy │ ├── Header Processing │ └── Custom Filter │ ▼ Application
Pendekatan ini dapat berguna ketika terdapat kebutuhan integrasi khusus yang belum tersedia melalui konfigurasi Istio tingkat tinggi.
EnvoyFilter dan VirtualService
EnvoyFilter dan VirtualService memiliki tingkat abstraksi yang berbeda. VirtualService digunakan untuk mengatur perilaku routing, sedangkan EnvoyFilter memberikan akses customization terhadap konfigurasi proxy Envoy.
Istio Configuration
│
├── VirtualService
│ │
│ └── Routing
│
└── EnvoyFilter
│
└── Envoy Customization
Jika kebutuhan dapat diselesaikan menggunakan VirtualService atau resource Istio standar lainnya, pendekatan tersebut umumnya lebih mudah dipelihara dibandingkan menggunakan EnvoyFilter.
EnvoyFilter dan Authorization Policy
Authorization Policy berfungsi mengatur apakah sebuah request diizinkan atau ditolak berdasarkan identitas, namespace, principal, maupun atribut lainnya. EnvoyFilter memiliki fungsi berbeda karena berfokus pada customization proxy.
Request │ ▼ Authorization Policy │ ALLOW / DENY │ ▼ Envoy Proxy │ Customization │ EnvoyFilter
Keduanya dapat berada dalam arsitektur yang sama, tetapi tidak sebaiknya dianggap sebagai pengganti satu sama lain.
EnvoyFilter dan Telemetry API
Telemetry API menyediakan cara yang lebih terstruktur untuk mengatur metrics, logging, dan tracing. EnvoyFilter memberikan kontrol yang jauh lebih rendah terhadap konfigurasi Envoy.
Observability
│
├── Standard Requirement
│
│ ▼
│ Telemetry API
│
└── Advanced Proxy Customization
│
▼
EnvoyFilter
Karena itu, Telemetry API sebaiknya menjadi pilihan pertama untuk kebutuhan observability yang dapat diselesaikan melalui API standar.
Contoh Alur Request dengan EnvoyFilter
Client │ ▼ Istio Gateway │ ▼ Envoy Proxy │ ├── Existing Filter │ ├── Custom EnvoyFilter │ └── Existing Filter │ ▼ Authorization │ ▼ Application
EnvoyFilter dapat menjadi bagian dari rantai pemrosesan request di dalam proxy. Karena itu, perubahan konfigurasi dapat memengaruhi request sebelum mencapai aplikasi maupun response sebelum kembali kepada client.
Implementasi EnvoyFilter pada Production
Pada production, EnvoyFilter sebaiknya hanya digunakan ketika kebutuhan tidak dapat diselesaikan dengan API Istio yang lebih tinggi. Hal ini penting karena EnvoyFilter memberikan kontrol yang sangat detail dan berpotensi meningkatkan kompleksitas operasional.
Business Requirement
│
▼
Istio Standard API?
│
┌────┴────┐
│ │
YES NO
│ │
▼ ▼
Use Istio EnvoyFilter
API
Pendekatan tersebut membantu menjaga konfigurasi service mesh tetap sederhana dan mudah dipelihara.
Validasi Konfigurasi EnvoyFilter
Sebelum konfigurasi diterapkan pada production, lakukan validasi menggunakan lingkungan staging. Periksa konfigurasi proxy yang dihasilkan dan pastikan tidak terdapat perubahan yang tidak diinginkan.
EnvoyFilter YAML
│
▼
Validation
│
▼
Staging
│
▼
Traffic Test
│
▼
Production
Validasi menjadi semakin penting apabila EnvoyFilter menggunakan operasi seperti REPLACE atau REMOVE karena kesalahan konfigurasi dapat berdampak luas terhadap traffic.
Risiko Penggunaan EnvoyFilter
EnvoyFilter merupakan fitur advanced sehingga penggunaan yang tidak tepat dapat menimbulkan risiko operasional.
- Konfigurasi dapat memengaruhi traffic aplikasi.
- Kesalahan match dapat membuat patch diterapkan pada target yang tidak diinginkan.
- Perubahan versi Istio atau Envoy dapat memengaruhi kompatibilitas konfigurasi.
- Konfigurasi yang terlalu kompleks dapat menyulitkan troubleshooting.
- Patch yang salah dapat menyebabkan proxy tidak berfungsi sebagaimana mestinya.
Best Practice Dasar EnvoyFilter
- Gunakan EnvoyFilter hanya ketika API Istio standar tidak mencukupi.
- Gunakan workloadSelector sespesifik mungkin.
- Validasi konfigurasi pada staging terlebih dahulu.
- Dokumentasikan alasan setiap EnvoyFilter dibuat.
- Hindari konfigurasi yang terlalu kompleks.
- Monitor perubahan konfigurasi proxy setelah deployment.
- Perhatikan kompatibilitas versi Istio dan Envoy.
- Gunakan version control untuk menyimpan konfigurasi.
Best Practice Lanjutan Istio EnvoyFilter
EnvoyFilter memberikan kontrol yang sangat detail terhadap proxy Envoy. Karena itu, penggunaannya sebaiknya mengikuti prinsip konfigurasi yang sederhana, terukur, dan mudah dikembalikan apabila terjadi masalah.
Sebelum membuat EnvoyFilter baru, administrator sebaiknya terlebih dahulu memeriksa apakah kebutuhan tersebut sebenarnya sudah dapat dipenuhi oleh resource Istio standar seperti VirtualService, DestinationRule, Gateway, AuthorizationPolicy, atau Telemetry API.
Kebutuhan
│
▼
Istio Standard API?
│
├── Ya ─────► Gunakan API Standar
│
└── Tidak
│
▼
EnvoyFilter
Pendekatan tersebut dapat membantu mengurangi kompleksitas konfigurasi dan memudahkan proses maintenance service mesh.
Gunakan Workload Selector Secara Spesifik
Salah satu praktik penting adalah menggunakan workloadSelector secara spesifik. Jangan menerapkan konfigurasi custom kepada seluruh workload apabila hanya satu atau beberapa service yang membutuhkannya.
EnvoyFilter
│
▼
workloadSelector
│
└── app=payment
│
▼
Payment Service
Dengan selector yang tepat, risiko konfigurasi memengaruhi service lain dapat dikurangi.
Gunakan Version Control
Konfigurasi EnvoyFilter sebaiknya disimpan menggunakan sistem version control. Dengan demikian, setiap perubahan dapat dilacak dan konfigurasi sebelumnya dapat dikembalikan apabila terjadi masalah.
EnvoyFilter YAML
│
▼
Git Repository
│
├── Version 1
├── Version 2
└── Version 3
│
▼
Deployment
Pendekatan ini juga mendukung praktik GitOps karena perubahan konfigurasi dapat dikelola secara deklaratif.
Dokumentasikan Setiap EnvoyFilter
Setiap EnvoyFilter sebaiknya memiliki dokumentasi yang menjelaskan alasan pembuatannya, workload yang menjadi target, bagian Envoy yang dimodifikasi, serta risiko yang perlu diperhatikan.
| Informasi | Contoh |
|---|---|
| Nama | custom-http-filter |
| Target | Payment Service |
| Context | SIDECAR_INBOUND |
| Tujuan | Custom HTTP processing |
| Operation | INSERT_FIRST |
Dokumentasi tersebut akan sangat membantu ketika konfigurasi harus dipelihara oleh anggota tim yang berbeda.
Perhatikan Versi Istio dan Envoy
EnvoyFilter bekerja sangat dekat dengan konfigurasi Envoy sehingga perubahan versi Istio maupun Envoy dapat memengaruhi kompatibilitas konfigurasi tertentu.
Istio Version
│
▼
Envoy Version
│
▼
EnvoyFilter
│
▼
Proxy Configuration
Sebelum melakukan upgrade Istio, konfigurasi EnvoyFilter yang digunakan sebaiknya diperiksa kembali dan diuji pada lingkungan non-production.
Monitoring Setelah Deployment
Setelah EnvoyFilter diterapkan, administrator sebaiknya melakukan monitoring terhadap workload yang menjadi target. Perhatikan error rate, latency, request rate, serta kondisi proxy.
EnvoyFilter
│
▼
Deployment
│
▼
Envoy Proxy
│
▼
Telemetry
│
├── Metrics
├── Logs
└── Traces
│
▼
Monitoring
Telemetry API yang telah dibahas pada artikel sebelumnya dapat digunakan bersama EnvoyFilter untuk membantu memantau dampak perubahan konfigurasi.
Troubleshooting EnvoyFilter
Troubleshooting menjadi bagian penting karena kesalahan konfigurasi EnvoyFilter dapat menyebabkan perubahan perilaku proxy. Pemeriksaan sebaiknya dilakukan secara bertahap mulai dari resource Kubernetes hingga konfigurasi Envoy yang dihasilkan.
1. EnvoyFilter Tidak Berdampak
Jika konfigurasi tidak memberikan efek, periksa terlebih dahulu workloadSelector. Pastikan label workload yang menjadi target sesuai dengan selector yang digunakan.
EnvoyFilter │ ▼ workloadSelector │ ├── Match ─────► Apply │ └── No Match ──► Tidak diterapkan
2. Match Tidak Sesuai
Periksa bagian match pada configPatches. Patch hanya akan diterapkan apabila konfigurasi Envoy sesuai dengan kondisi yang ditentukan.
Kesalahan pada context, listener, filter name, route, atau konfigurasi target dapat menyebabkan patch tidak diterapkan seperti yang diharapkan.
3. Filter Tidak Berada pada Posisi yang Diharapkan
Jika menggunakan INSERT_BEFORE atau INSERT_AFTER, periksa target yang digunakan sebagai referensi. Posisi filter sangat penting karena Envoy memproses filter berdasarkan urutannya.
Filter A
│
▼
Filter B
│
▼
Filter C
│
│
▼
Expected Position
4. Proxy Mengalami Masalah
Apabila setelah penerapan EnvoyFilter proxy mengalami masalah, segera periksa konfigurasi yang baru diterapkan dan bandingkan dengan konfigurasi sebelumnya.
New EnvoyFilter
│
▼
Proxy Problem
│
▼
Rollback
│
▼
Previous Configuration
Karena itu, perubahan EnvoyFilter sebaiknya dilakukan secara bertahap dan selalu memiliki rencana rollback.
Validasi Konfigurasi Proxy
Dalam proses troubleshooting, administrator dapat memeriksa konfigurasi proxy yang dihasilkan oleh Istio untuk memastikan patch telah diterapkan sesuai harapan.
EnvoyFilter YAML
│
▼
Istio Control Plane
│
▼
Envoy Configuration
│
▼
Proxy
Pemeriksaan konfigurasi aktual sangat membantu ketika hasil yang terlihat pada aplikasi berbeda dari konfigurasi yang direncanakan.
Rollback EnvoyFilter
Jika EnvoyFilter menyebabkan masalah, konfigurasi dapat dikembalikan dengan menghapus atau memperbaiki resource yang bermasalah sesuai prosedur deployment yang digunakan.
Production │ ▼ EnvoyFilter │ ▼ Unexpected Behavior │ ▼ Rollback │ ▼ Stable Configuration
Rollback harus menjadi bagian dari prosedur deployment, terutama untuk EnvoyFilter yang memengaruhi gateway atau banyak workload.
Kelebihan Istio EnvoyFilter
- Memberikan kontrol tingkat lanjut terhadap Envoy Proxy.
- Dapat melakukan customization terhadap konfigurasi Envoy.
- Mendukung modifikasi HTTP filter.
- Dapat digunakan untuk network filter tertentu.
- Mendukung modifikasi listener, cluster, dan route configuration.
- Dapat diarahkan ke workload tertentu menggunakan selector.
- Mendukung kebutuhan advanced service mesh.
- Dapat digunakan ketika API Istio standar belum menyediakan konfigurasi yang dibutuhkan.
- Dapat dikombinasikan dengan Telemetry dan resource Istio lainnya.
Kekurangan Istio EnvoyFilter
- Lebih kompleks dibandingkan resource Istio tingkat tinggi.
- Membutuhkan pemahaman mengenai konfigurasi Envoy.
- Kesalahan konfigurasi dapat memengaruhi traffic.
- Kompatibilitas dapat dipengaruhi perubahan versi Istio dan Envoy.
- Terlalu banyak EnvoyFilter dapat membuat service mesh sulit dipelihara.
- Troubleshooting dapat menjadi lebih kompleks.
- Konfigurasi yang terlalu luas dapat memengaruhi banyak workload.
Contoh Arsitektur Production
Dalam lingkungan production, EnvoyFilter sebaiknya ditempatkan sebagai bagian dari strategi konfigurasi service mesh yang lebih besar.
Istio Control Plane
│
┌─────────────────┼─────────────────┐
│ │ │
▼ ▼ ▼
VirtualService AuthorizationPolicy Telemetry
│ │ │
└─────────────────┼─────────────────┘
│
▼
EnvoyFilter
│
▼
Envoy Proxy
│
▼
Workload
│
▼
Application
Arsitektur tersebut menunjukkan bahwa EnvoyFilter bukan pengganti resource Istio lainnya. Setiap resource memiliki fungsi masing-masing dan EnvoyFilter digunakan ketika dibutuhkan customization pada lapisan proxy.
Contoh Skenario Penggunaan
Misalnya sebuah organisasi memiliki Payment Service yang membutuhkan konfigurasi HTTP khusus yang belum tersedia melalui API Istio standar. Administrator dapat membuat EnvoyFilter yang hanya menargetkan Payment Service.
Payment Service
│
▼
workloadSelector
│
▼
EnvoyFilter
│
▼
Custom HTTP Processing
│
▼
Payment Application
Dengan cara tersebut, konfigurasi tidak perlu diterapkan kepada seluruh service dalam cluster.
EnvoyFilter untuk Advanced Service Mesh
EnvoyFilter dapat menjadi solusi ketika service mesh telah berkembang dan kebutuhan konfigurasi menjadi lebih kompleks. Namun, fleksibilitas tersebut harus diimbangi dengan governance dan dokumentasi yang baik.
Simple Requirement
│
▼
Istio Standard API
│
Advanced Requirement
│
▼
EnvoyFilter
│
▼
Controlled Customization
Semakin banyak customization yang dilakukan pada Envoy, semakin penting pula proses testing, version control, observability, dan rollback.
FAQ Istio EnvoyFilter
Apa itu Istio EnvoyFilter?
Istio EnvoyFilter adalah resource konfigurasi yang digunakan untuk melakukan customization terhadap konfigurasi proxy Envoy dalam service mesh.
Apa fungsi utama EnvoyFilter?
Fungsi utamanya adalah memberikan kontrol tingkat lanjut terhadap konfigurasi Envoy ketika kebutuhan tertentu tidak dapat diselesaikan menggunakan resource Istio standar.
Apakah EnvoyFilter wajib digunakan pada Istio?
Tidak. Sebagian besar kebutuhan umum service mesh dapat ditangani menggunakan resource Istio standar. EnvoyFilter digunakan untuk kebutuhan customization yang lebih advanced.
Apa itu configPatches?
configPatches adalah bagian konfigurasi EnvoyFilter yang menentukan perubahan terhadap konfigurasi Envoy.
Apa itu workloadSelector?
workloadSelector digunakan untuk menentukan workload yang menjadi target EnvoyFilter berdasarkan label.
Apa itu INSERT_BEFORE?
INSERT_BEFORE digunakan untuk menambahkan konfigurasi baru sebelum konfigurasi target.
Apa itu INSERT_AFTER?
INSERT_AFTER digunakan untuk menambahkan konfigurasi setelah konfigurasi target.
Apa fungsi MERGE?
MERGE digunakan untuk menggabungkan konfigurasi baru dengan konfigurasi yang sudah ada.
Apa fungsi REPLACE?
REPLACE digunakan untuk mengganti konfigurasi target dengan konfigurasi baru.
Apa fungsi REMOVE?
REMOVE digunakan untuk menghapus konfigurasi target dari konfigurasi Envoy.
Apa itu SIDECAR_INBOUND?
SIDECAR_INBOUND merupakan context yang digunakan untuk konfigurasi traffic yang masuk menuju workload pada mode sidecar.
Apa itu SIDECAR_OUTBOUND?
SIDECAR_OUTBOUND digunakan untuk konfigurasi traffic yang keluar dari workload pada mode sidecar.
Apakah EnvoyFilter dapat digunakan pada Gateway?
Ya. EnvoyFilter dapat digunakan pada context Gateway untuk kebutuhan customization terhadap proxy yang menangani traffic gateway.
Apakah EnvoyFilter dapat digunakan pada Ambient Mesh?
Penggunaannya perlu disesuaikan dengan arsitektur Ambient Mesh dan proxy yang menjadi target. Administrator perlu memahami apakah customization berkaitan dengan ztunnel atau Waypoint Proxy serta fungsi traffic yang ditangani masing-masing komponen.
Apakah EnvoyFilter berbahaya?
EnvoyFilter bukan fitur yang berbahaya jika digunakan dengan benar. Namun, karena memberikan kontrol yang sangat detail terhadap proxy, kesalahan konfigurasi dapat berdampak langsung terhadap traffic.
Kapan sebaiknya EnvoyFilter digunakan?
Gunakan EnvoyFilter ketika kebutuhan tidak dapat diselesaikan secara memadai menggunakan API Istio standar dan memang membutuhkan customization pada konfigurasi Envoy.
Apakah EnvoyFilter dapat menggantikan VirtualService?
Tidak. VirtualService digunakan untuk konfigurasi routing dan traffic behavior, sedangkan EnvoyFilter digunakan untuk customization konfigurasi Envoy.
Apakah EnvoyFilter dapat menggantikan AuthorizationPolicy?
Tidak. AuthorizationPolicy berfungsi mengatur authorization, sedangkan EnvoyFilter berfokus pada customization proxy.
Baca Juga
- Istio Telemetry API
- Istio PeerAuthentication dan Mutual TLS (mTLS)
- Istio RequestAuthentication (JWT)
- Istio Authorization Policy
- Istio Waypoint Proxy
- Istio Ambient Mesh
Tautan pada bagian Baca Juga dapat diarahkan ke URL artikel masing-masing setelah seluruh artikel terkait tersedia di Blogger. Strategi tersebut membantu membangun hubungan topical antarartikel dalam seri Istio.
Artikel Selanjutnya
Setelah memahami EnvoyFilter, pembahasan dapat dilanjutkan ke topik berikutnya yang masih berada dalam ekosistem Istio dan Kubernetes Service Mesh.
Istio Security
│
▼
Traffic Management
│
▼
Ambient Mesh
│
▼
Telemetry
│
▼
EnvoyFilter
│
▼
Advanced Service Mesh
Dengan memahami seluruh komponen tersebut secara bertahap, pembaca dapat membangun pemahaman yang lebih lengkap mengenai bagaimana Istio mengelola traffic, keamanan, observability, serta customization pada service mesh.
Kesimpulan
Istio EnvoyFilter merupakan resource advanced yang memberikan kemampuan kepada administrator untuk melakukan customization terhadap konfigurasi proxy Envoy yang digunakan dalam service mesh.
Berbeda dengan resource Istio standar seperti VirtualService, AuthorizationPolicy, dan Telemetry API, EnvoyFilter memberikan kontrol yang lebih rendah terhadap konfigurasi Envoy. Administrator dapat memodifikasi HTTP filter, network filter, listener, cluster, route configuration, maupun bagian tertentu lainnya sesuai kebutuhan.
EnvoyFilter menggunakan beberapa komponen penting seperti workloadSelector, configPatches, applyTo, match, dan patch. Patch operation seperti INSERT_BEFORE, INSERT_AFTER, MERGE, REPLACE, dan REMOVE menentukan bagaimana perubahan konfigurasi dilakukan.
Fleksibilitas EnvoyFilter menjadi kelebihan utama sekaligus tantangan. Semakin besar kontrol yang diberikan kepada administrator, semakin besar pula kebutuhan terhadap testing, dokumentasi, version control, monitoring, serta strategi rollback.
Karena itu, EnvoyFilter sebaiknya tidak digunakan hanya karena tersedia. Apabila kebutuhan masih dapat diselesaikan menggunakan API Istio standar, pendekatan tersebut umumnya lebih mudah dipahami dan dipelihara.
Dalam lingkungan production, penggunaan EnvoyFilter harus dilakukan secara terkontrol. Workload selector sebaiknya dibuat spesifik, konfigurasi harus diuji pada staging, kompatibilitas versi Istio dan Envoy perlu diperhatikan, serta perubahan harus dipantau menggunakan telemetry.
Dengan pemahaman yang tepat, EnvoyFilter dapat menjadi alat yang sangat powerful untuk kebutuhan advanced proxy customization pada Kubernetes Service Mesh.