Belajar Envoy Proxy - Listener, Filter Chain & Route Configuration
Episode 4 of 23

Belajar Envoy Proxy - Listener, Filter Chain & Route Configuration

Episode ini mendalami listener dan filter chain: konfigurasi HTTP connection manager, virtual host, path matching, header manipulation, redirect, dan rewrite, lengkap dengan contoh route yang bisa langsung dicoba.

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

Pendahuluan

Konfigurasi hello world di episode 3 masih mentah: semua path diteruskan ke satu cluster. Episode 4 mengubah itu. Kita akan mendalami listener, filter chain, dan route configuration — cara memetakan beberapa domain dan path ke cluster berbeda, serta memanipulasi request lewat header, redirect, dan rewrite.

Ini adalah episode di mana Envoy mulai terasa seperti router beneran. Kalian akan melihat bagaimana satu file config bisa menangani beberapa virtual host sekaligus, dan bagaimana aturan match bekerja dari yang paling spesifik sampai yang paling umum.

Membuat Listener dan Filter Chain

Struktur Listener Lengkap

Listener adalah gerbang semua traffic. Contoh listener dengan dua filter chain (HTTP dan TCP) akan kita bedah nanti di episode 8, tapi untuk sekarang fokus pada satu filter chain HTTP:

Listener dengan HTTP connection manager
listeners:
  - name: listener_http
    address:
      socket_address:
        address: 0.0.0.0
        port_value: 10000
    filter_chains:
      - filters:
          - name: envoy.filters.network.http_connection_manager
            typed_config:
              "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
              stat_prefix: api_gateway
              route_config:
                name: api_routes
                virtual_hosts: []
              http_filters:
                - name: envoy.filters.http.router
                  typed_config:
                    "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router

Perhatikan stat_prefix: api_gateway — nilai ini menentukan awalan semua metric yang dihasilkan listener ini. Pemilihan prefix yang jelas memudahkan kalian membedakan metric antar listener di admin interface.

Peran Setiap Bagian Filter Chain

  • filter_chains mendefinisikan rangkaian filter untuk satu jenis koneksi (misalnya HTTP saja).
  • route_config menyimpan definisi virtual host dan route.
  • http_filters adalah pipeline filter HTTP yang memproses request, dan router harus selalu menjadi filter terakhir.

Routing HTTP dengan Virtual Hosts

Mengonfigurasi Beberapa Domain

Virtual host memungkinkan satu listener melayani banyak domain sekaligus. Contoh berikut memetakan dua domain ke cluster berbeda:

Virtual host dengan dua domain
route_config:
  name: api_routes
  virtual_hosts:
    - name: backend_vh
      domains:
        - api.example.com
      routes:
        - match:
            prefix: "/orders"
          route:
            cluster: orders_service
    - name: web_vh
      domains:
        - www.example.com
      routes:
        - match:
            prefix: "/"
          route:
            cluster: web_service

Envoy memilih virtual host berdasarkan header Host dari request. Domain api.example.com dikirim ke orders_service, sementara www.example.com menuju web_service. Virtual host api.example.com akan dipilih hanya jika header Host cocok persis.

Aturan Match: Exact, Prefix, dan Regex

Tiga cara umum mencocokkan path:

  • exact: "/health" — hanya path yang persis sama.
  • prefix: "/api/" — semua path yang diawali string tertentu.
  • safe_regex — pola regex yang diizinkan untuk matching lanjutan.

Urutan evaluasi penting: Envoy memeriksa route sesuai urutan kemunculannya di YAML, jadi tempatkan aturan paling spesifik lebih dulu.

Path Rewrite dan Redirect

Rewrite Sebelum Meneruskan

Kadang backend tidak menerima path yang sama dengan yang diminta klien. Gunakan prefix_rewrite:

Path rewrite
routes:
  - match:
      prefix: "/api/v1"
    route:
      cluster: orders_service
      prefix_rewrite: "/v1"

Dengan prefix_rewrite: "/v1", request /api/v1/users diubah menjadi /v1/users sebelum diteruskan ke backend. Teknik ini sangat umum untuk menyembunyikan struktur internal API.

Redirect ke Lokasi Lain

Jika kalian ingin memberitahu klien untuk pindah ke URL lain:

Redirect permanen
routes:
  - match:
      prefix: "/old"
    redirect:
      path_redirect: "/new"
      response_code: 301

Konfigurasi redirect mengembalikan respons 301 dengan lokasi /new tanpa menyentuh backend. Redirect cocok untuk migrasi endpoint lama.

Header Manipulation

Menambah dan Mengubah Header

Envoy bisa menambah, mengubah, atau menghapus header di level virtual host maupun route:

Manipulasi header request
virtual_hosts:
  - name: web_vh
    domains:
      - www.example.com
    request_headers_to_add:
      - header:
          key: X-Envoy-Gateway
          value: "v1"
        append_action: ADD_IF_ABSENT
    routes:
      - match:
          prefix: "/"
        route:
          cluster: web_service

request_headers_to_add menambah header X-Envoy-Gateway dengan nilai v1 ke setiap request yang masuk ke virtual host ini. append_action: ADD_IF_ABSENT memastikan header tidak diduplikasi jika sudah ada.

Memahami Header di Envoy

Header adalah alat utama komunikasi Envoy dengan upstream dan klien. Untuk melihat header yang tiba di backend, jalankan backend yang mencetak header:

Melihat header yang diteruskan
curl -v -H "Host: www.example.com" http://localhost:10000/ 2>&1 | grep "^> "

Baris dengan awalan > menunjukkan request headers yang dikirim Envoy ke backend. Perintah curl -v ini adalah cara tercepat mengamati hasil manipulasi header di episode ini.

Penutup

Episode 4 membawa routing kalian ke level berikutnya: listener dengan HTTP connection manager, virtual host untuk banyak domain, exact dan prefix matching, rewrite dan redirect, serta manipulasi header per request.

Inti yang harus dibawa pulang:

  • Listener plus filter chain adalah gerbang; route_config menentukan ke mana request pergi.
  • Virtual host dipilih berdasarkan header Host.
  • Gunakan exact, prefix, atau safe_regex untuk match path.
  • prefix_rewrite mengubah path sebelum ke backend; redirect memberi tahu klien pindah URL.
  • request_headers_to_add menambah header per virtual host atau route.
  • router selalu menjadi filter HTTP terakhir dalam pipeline.

Di episode 5 selanjutnya kita akan membahas clusters dan load balancing — definisi cluster dan endpoint, kebijakan round robin, least request, ring hash, dan maglev, plus health checks, connection pools, dan outlier detection.

Belajar Envoy Proxy - Listener, Filter Chain & Route Configuration | Belajar Envoy Proxy