Belajar Envoy Proxy - Instalasi & Hello Envoy
Episode 3 of 23

Belajar Envoy Proxy - Instalasi & Hello Envoy

Saatnya menulis konfigurasi pertama. Episode ini membahas cara mengunduh Envoy via Docker, menyusun konfigurasi minimum untuk HTTP proxying sederhana, menjalankannya, dan memverifikasi traffic melewati Envoy.

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

Pendahuluan

Episode 3 adalah momen "hello world" kalian dengan Envoy. Setelah memahami arsitektur di episode 2, sekarang kita menulis konfigurasi nyata: mengunduh image Envoy, menyusun bootstrap minimal untuk mem-proxy HTTP, menjalankannya, dan membuktikan bahwa traffic benar-benar melewati Envoy.

Kalian akan melihat pola yang akan diulang terus sepanjang series: listener di port 10000, HTTP connection manager sebagai filter, satu virtual host, dan satu cluster backend. Konfigurasi ini memang sengaja dibuat sesederhana mungkin — variabel dan fitur tambahan akan ditambahkan di episode 4 sampai 8.

Mengunduh Envoy

Memilih Distribusi Image

Cara paling praktis adalah memakai image resmi dari Docker Hub:

Menarik image Envoy resmi
docker pull envoyproxy/envoy:v1.31.0

Ada beberapa varian yang perlu kalian kenal:

  • envoyproxy/envoy:latest — rilis terbaru, nyaman untuk lab tapi berubah cepat.
  • envoyproxy/envoy:v1.31.0 — versi spesifik, stabil untuk dipakai berulang.
  • envoyproxy/envoy:distroless — varian minimal tanpa shell, untuk production.

Untuk series ini kita konsisten memakai envoyproxy/envoy:v1.31.0 agar output di semua episode bisa direproduksi.

Menjalankan Envoy dengan Config Custom

Image default berisi config bawaan yang menjalankan admin dan listener sederhana. Untuk memakai config sendiri, kita mount file YAML:

Jalankan Envoy dengan config kita
docker run -d --name envoy-hello \
  -v ~/envoy-lab/configs:/etc/envoy \
  -p 10000:10000 -p 9901:9901 \
  envoyproxy/envoy:v1.31.0

Direktori ~/envoy-lab/configs akan kita isi dengan file hello.yaml. Perintah docker run ini memasukkan direktori config ke dalam kontainer dan mengekspos port 10000 serta 9901.

Konfigurasi Minimum untuk HTTP Proxying

Bootstrap Hello Envoy

Buat file configs/hello.yaml dengan isi berikut:

hello.yaml - proxy HTTP minimum
admin:
  address:
    socket_address:
      address: 0.0.0.0
      port_value: 9901
static_resources:
  listeners:
    - name: listener_0
      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: ingress_http
                route_config:
                  name: local_route
                  virtual_hosts:
                    - name: local_service
                      domains:
                        - "*"
                      routes:
                        - match:
                            prefix: "/"
                          route:
                            cluster: service_backend
                http_filters:
                  - name: envoy.filters.http.router
                    typed_config:
                      "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
  clusters:
    - name: service_backend
      connect_timeout: 0.25s
      type: STRICT_DNS
      lb_policy: ROUND_ROBIN
      load_assignment:
        cluster_name: service_backend
        endpoints:
          - lb_endpoints:
              - endpoint:
                  address:
                    socket_address:
                      address: 10.0.0.1
                      port_value: 8080

Mari bedah bagian pentingnya: filter_chains berisi satu filter http_connection_manager yang membungkus route_config dan daftar http_filters. Route memetakan semua prefix / ke cluster service_backend yang berisi satu endpoint di 10.0.0.1:8080.

Menjalankan Backend Uji

Karena 10.0.0.1:8080 belum tentu ada, jalankan backend dummy dulu agar hello world ini lengkap:

Backend uji sederhana
python3 -m http.server 8080 &
curl -s http://localhost:8080/

Perintah python3 -m http.server 8080 menjalankan server file statis di port 8080 — cukup sebagai target untuk melihat apakah Envoy meneruskan request dengan benar.

Memverifikasi Traffic

Menguji Melalui Envoy

Sekarang arahkan curl ke port Envoy, bukan langsung ke backend:

Request melalui Envoy
curl -s -H "Host: localhost" http://localhost:10000/

Perhatikan perbedaan: port 10000 adalah listener Envoy, sedangkan port 8080 adalah backend. Jika Envoy bekerja, kalian akan melihat direktori listing yang sama seperti saat memanggil backend langsung. Header Host dipakai untuk memilih virtual host.

Memeriksa Statistik

Untuk bukti lebih kuat bahwa traffic melewati Envoy, lihat counter di admin interface:

Cek counter di admin Envoy
curl -s localhost:9901/stats | grep "http.ingress_http"
curl -s localhost:9901/clusters

Output stats akan menunjukkan ingress_http request yang bertambah, dan clusters menampilkan status endpoint. Statistik ingress_http ini adalah bahasa observability Envoy yang akan kalian baca terus sampai episode 21.

Validasi Konfigurasi

Sebelum produksi, biasakan memvalidasi YAML terlebih dahulu:

Validasi config tanpa menjalankan
docker run --rm -v ~/envoy-lab/configs:/etc/envoy \
  envoyproxy/envoy:v1.31.0 envoy --mode validate -c /etc/envoy/hello.yaml

Perintah envoy --mode validate -c hello.yaml memeriksa config tanpa memulai proxy. Output OK berarti YAML valid dan semua resource dikenal Envoy. Kebiasaan ini akan sangat menolong di episode 20 saat kita integrasikan ke CI/CD.

Kesalahan Umum di Hello Envoy

Endpoint Tidak Bisa Dijangkau

Error paling umum di episode ini adalah koneksi gagal karena backend tidak ada. Pastikan python3 -m http.server 8080 benar-benar berjalan, lalu cek:

Debug koneksi ke backend
curl -v -H "Host: localhost" http://localhost:10000/

Bagian curl -v menampilkan detail handshake dan response code. Jika muncul 502, periksa log Envoy dengan docker logs envoy-hello dan pastikan alamat backend di config sudah benar.

YAML Tidak Valid

Indentasi yang salah menghasilkan error saat startup. Gunakan penanda YAML dan perhatikan dua spasi per level. Jika Envoy menolak config, jalankan envoy --mode validate untuk menemukan baris bermasalah.

Penutup

Episode 3 membawa kalian dari nol ke proxy yang berfungsi: menarik image, menulis bootstrap minimal, menjalankan backend uji, dan membuktikan traffic melewati Envoy lewat statistik admin.

Inti yang harus dibawa pulang:

  • Image resmi envoyproxy/envoy:v1.31.0 cukup untuk seluruh series.
  • Config minimum butuh listener, filter chain HTTP, route, dan cluster.
  • http_connection_manager mengubah TCP menjadi request HTTP yang bisa di-route.
  • Verifikasi lewat curl ke port listener dan cek statistik di port 9901.
  • Selalu jalankan envoy --mode validate sebelum produksi.
  • python3 -m http.server adalah backend uji praktis untuk belajar.

Di episode 4 selanjutnya kita akan membahas listener, filter chain, dan route configuration — virtual hosts, path matching, header manipulation, redirect, dan rewrite, sehingga routing kalian tidak lagi sekadar meneruskan semua prefix ke satu cluster.