Episode ini membahas skala dan ketahanan: deployment patterns sidecar, gateway, dan standalone, high availability control plane untuk xDS, serta pertimbangan multi-zone dan multi-cluster pada Envoy.

Setelah menguasai fitur di dalam satu Envoy, kini saatnya berpikir tentang banyak Envoy. Episode 17 membahas high availability dan scaling: pola deployment sidecar, gateway, dan standalone, menjaga control plane xDS tetap tersedia, serta pertimbangan saat Envoy tersebar di banyak zone dan cluster. Konsep kuncinya: Envoy adalah stateless, sehingga menskalakannya hanya soal menambah instance dan menjaga config tetap konsisten.
Pola paling umum di service mesh: satu Envoy menempel setiap pod atau VM workload.
apiVersion: v1
kind: Pod
metadata:
name: orders-5f9d6b
spec:
containers:
- name: orders
image: registry.example.com/orders:1.4.0
ports:
- containerPort: 8080
- name: envoy
image: envoyproxy/envoy:v1.31.0
ports:
- containerPort: 15006
volumeMounts:
- name: envoy-config
mountPath: /etc/envoy
volumes:
- name: envoy-config
configMap:
name: orders-envoy-configPola sidecar envoy membuat setiap traffic masuk dan keluar dari orders melewati Envoy. Keuntungan: isolasi dan kebijakan per workload. Biaya: resource overhead per pod.
Berbeda dengan sidecar yang menyebar, gateway memusatkan Envoy di titik masuk:
apiVersion: apps/v1
kind: Deployment
metadata:
name: edge-gateway
spec:
replicas: 3
selector:
matchLabels:
app: edge-gateway
template:
metadata:
labels:
app: edge-gateway
spec:
containers:
- name: envoy
image: envoyproxy/envoy:v1.31.0
ports:
- containerPort: 10000
- containerPort: 9901Deployment edge-gateway dengan replicas: 3 memberi tiga instance gateway di belakang LoadBalancer. Karena Envoy stateless, menambah replica hanya menambah satu pod — tidak ada replikasi state yang harus dijaga.
Pola standalone memakai Envoy untuk tugas tertentu: proxy database, egress proxy, atau aggregator telemetry. Tidak terikat workload dan tidak harus di edge — Envoy berdiri sendiri dengan config khusus.
Jika semua Envoy bergantung pada satu control plane xDS, maka control plane itu adalah titik gagal. Solusinya: jalankan beberapa instance di belakang load balancer:
static_resources:
clusters:
- name: xds_cluster
connect_timeout: 1s
type: STATIC
lb_policy: ROUND_ROBIN
http2_protocol_options: {}
load_assignment:
cluster_name: xds_cluster
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: cp-1.internal
port_value: 18000
- endpoint:
address:
socket_address:
address: cp-2.internal
port_value: 18000Dengan lb_policy: ROUND_ROBIN, Envoy bergantian terhubung ke cp-1 dan cp-2. Jika satu control plane mati, Envoy membuka stream baru ke instance yang tersedia — config yang sudah diterima tetap dipakai.
Poin yang sering disalahpahami: Envoy yang kehilangan koneksi xDS tidak berhenti. Dia terus menjalankan config terakhir yang diterima; hanya kemampuan menerima perubahan yang hilang. Inilah alasan Envoy didesain stateless — traffic tetap jalan, hanya update yang tertunda.
Saat Envoy diganti versi, proses drain sangat penting:
curl -s -X POST localhost:9901/drain_listeners?inboundonly
curl -s -X POST localhost:9901/healthcheck/failPerintah drain_listeners menghentikan listener menerima koneksi baru, sementara healthcheck/fail menandai Envoy tidak sehat di orkestrator. Setelah request yang berjalan selesai, pod bisa dimatikan tanpa kehilangan traffic — pola yang wajib dipakai pada rolling update.
Di deployment multi-zone, Envoy harus prefer endpoint di zone yang sama:
clusters:
- name: orders_service
connect_timeout: 0.25s
type: EDS
lb_policy: LEAST_REQUEST
locality_lb_endpoints:
- priority: 0
locality:
zone: us-east-1a
lb_endpoints:
- endpoint:
address:
socket_address:
address: 10.0.1.10
port_value: 8080
- priority: 1
locality:
zone: us-east-1b
lb_endpoints:
- endpoint:
address:
socket_address:
address: 10.0.2.10
port_value: 8080locality_lb_endpoints dengan priority mengarahkan Envoy memakai endpoint zone sendiri dulu, lalu zone lain saat yang pertama tidak tersedia. Ini mengurangi latensi antar-zone dan biaya bandwidth.
Kombinasi pattern yang direkomendasikan untuk multi-cluster:
locality_lb_endpoints per zone dengan priority.Gateway Envoy di Kubernetes bisa diskalakan otomatis:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: edge-gateway
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: edge-gateway
minReplicas: 3
maxReplicas: 20
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70HPA edge-gateway menambah replica saat CPU rata-rata di atas 70 persen. Karena Envoy stateless dan config diambil dari control plane, pod baru langsung berguna dalam hitungan detik.
Episode 17 membawa Envoy ke skala platform: pola deployment sidecar, gateway, dan standalone, high availability control plane xDS, prioritas zone untuk latensi, serta autoscaling gateway.
Inti yang harus dibawa pulang:
drain_listeners dan healthcheck/fail adalah protokol shutdown yang aman.locality_lb_endpoints dengan priority membuat Envoy prefer zone lokal.Di episode 18 selanjutnya kita akan membahas advanced routing dan traffic shaping — weighted clusters, mirror traffic dan shadowing, header-based routing dan path rewrites, plus fault injection untuk chaos engineering.