Episode ini membuka dunia konfigurasi dinamis Envoy: prinsip xDS, peran CDS, LDS, RDS, EDS, dan SDS, Envoy sebagai klien xDS, serta integrasi dasar dengan control plane seperti Gloo, Contour, dan Istio.

Sejauh ini semua konfigurasi ditulis statis di bootstrap. Episode 9 mengubah cara berpikir kalian: dynamic configuration dengan xDS memungkinkan Envoy menerima listener, route, cluster, endpoint, dan bahkan sertifikat secara langsung dari control plane — tanpa restart dan tanpa turun.
Konsep ini adalah fondasi service mesh modern. Ketika Istio menambahkan service baru, Envoy sidecar tidak perlu konfigurasi manual; control plane mengirimkan perubahan lewat xDS. Kalian akan memahami lima layanan xDS, cara Envoy berlangganan, dan bagaimana control plane mengintegrasikan semuanya.
xDS adalah keluarga protokol gRPC yang dipakai control plane untuk mengirim konfigurasi ke Envoy. Lima layanan intinya:
Hubungan antar layanan ini penting: LDS bisa merujuk RDS, CDS merujuk EDS, dan transport socket merujuk SDS. Setiap perubahan kecil di control plane menghasilkan update di salah satu layanan ini.
Ada dua mode pengiriman:
Sebagian besar control plane modern mendukung keduanya dan menegosiasikan mode saat koneksi pertama dibuka.
Agar menjadi klien xDS, bootstrap Envoy harus berisi dynamic_resources yang menunjuk ke control plane:
dynamic_resources:
lds_config:
ads: {}
resource_api_version: V3
cds_config:
ads: {}
resource_api_version: V3
ads_config:
api_type: GRPC
transport_api_version: V3
grpc_services:
- envoy_grpc:
cluster_name: xds_cluster
static_resources:
clusters:
- name: xds_cluster
connect_timeout: 1s
type: STATIC
http2_protocol_options: {}
load_assignment:
cluster_name: xds_cluster
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: control-plane.internal
port_value: 18000Blok dynamic_resources memberitahu Envoy untuk mengambil LDS dan CDS lewat ADS (Aggregated Discovery Service) — satu stream gRPC yang membawa semua jenis resource. Cluster xds_cluster menghubungkan Envoy ke control plane di control-plane.internal:18000.
Saat Envoy start, dia membuka stream ke control plane dan berlangganan:
Setiap kali control plane memutuskan ada perubahan, dia mengirim update pada stream yang sama. Envoy menerapkan perubahan itu secara live.
curl -s localhost:9901/config_dump | grep -A2 '"@type": "type.googleapis.com/envoy.admin.v3.*Config'
curl -s localhost:9901/config_dump?resource=dynamicEndpoint config_dump?resource=dynamic menampilkan hanya resource yang diterima dari control plane — cara cepat membedakan mana yang statis dan mana yang dinamis.
Tiga control plane populer memakai xDS dengan cara berbeda:
Semua control plane ini menulis ke "bahasa" yang sama: protokol xDS yang dimengerti Envoy. Keahlian kalian membaca config Envoy berlaku di mana pun.
Untuk memahami protokol lebih dalam, kalian bisa membuat server xDS mini sendiri. Salah satu cara paling cepat:
go run github.com/envoyproxy/go-control-plane/examples/... Library go-control-plane menyediakan implementasi server xDS dalam bahasa Go. Dengan contoh dari repository tersebut, kalian bisa melihat langsung bagaimana listener, route, dan cluster dikirim sebagai protobuf ke Envoy.
Untuk mencoba dynamic config tanpa membangun server sendiri, jalankan Envoy dengan config dinamis yang menunjuk ke control plane dockerized:
docker run -d --name envoy-xds \
-v ~/envoy-lab/configs/xds-bootstrap.yaml:/etc/envoy/envoy.yaml \
-p 10000:10000 -p 9901:9901 \
envoyproxy/envoy:v1.31.0Perintah docker run dengan bootstrap xDS akan membuat Envoy mencoba terhubung ke control plane. Jika gagal, lihat log docker logs envoy-xds untuk melihat stream xDS dan pesan error.
Saat kontrol plane tidak terjangkau, Envoy tetap berjalan tapi tidak bisa memuat listener baru. Pemeriksaan pertama:
curl -s localhost:9901/server_info
curl -s localhost:9901/config_dump?resource=dynamic | head -20Perintah server_info menampilkan waktu koneksi terakhir dengan control plane. Jika field last_updated tidak bertambah saat config berubah, ada masalah di stream ADS — biasanya alamat control plane salah atau protokol gRPC belum aktif di cluster xDS.
Beberapa jebakan umum saat bekerja dengan xDS:
http2_protocol_options.version_info pada update control plane.Episode 9 membuka pintu dynamic configuration: lima layanan xDS, Envoy sebagai klien yang berlangganan perubahan, dan integrasi dengan control plane seperti Istio, Gloo, dan Contour.
Inti yang harus dibawa pulang:
dynamic_resources mengganti config statis sebagai sumber utama.config_dump?resource=dynamic membedakan resource dinamis dari statis.Di episode 10 selanjutnya kita akan membahas rate limiting dan traffic control — filter rate limit dan external rate limit service, konfigurasi retry, timeout, dan fault injection, plus circuit breaking dan resource limits.