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 | Dewa234

Istio EnvoyFilter: Pengertian, Cara Kerja, Arsitektur, Komponen, Fungsi, Manfaat, Kelebihan, Kekurangan, dan Implementasinya

Ilustrasi Istio EnvoyFilter pada Kubernetes Service Mesh

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

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.

Postingan populer dari blog ini

Istio Egress Gateway: Pengertian, Cara Kerja, Arsitektur, Komponen, Fungsi, Manfaat, Kelebihan, Kekurangan, dan Implementasinya | Dewa234

Istio VirtualService: Pengertian, Cara Kerja, Arsitektur, Komponen, Fungsi, Manfaat, Kelebihan, Kekurangan, dan Implementasinya | Dewa234

Istio Ingress Gateway: Pengertian, Cara Kerja, Arsitektur, Komponen, Fungsi, Manfaat, Kelebihan, Kekurangan, dan Implementasinya | Dewa234