Belajar Envoy Proxy - High Availability & Scaling
Episode 17 of 23

Belajar Envoy Proxy - High Availability & Scaling

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.

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

Pendahuluan

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.

Deployment Patterns: Sidecar, Gateway, dan Standalone

Sidecar per Workload

Pola paling umum di service mesh: satu Envoy menempel setiap pod atau VM workload.

Pod dengan sidecar Envoy
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-config

Pola sidecar envoy membuat setiap traffic masuk dan keluar dari orders melewati Envoy. Keuntungan: isolasi dan kebijakan per workload. Biaya: resource overhead per pod.

Gateway di Tepi

Berbeda dengan sidecar yang menyebar, gateway memusatkan Envoy di titik masuk:

Deployment gateway terpusat
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: 9901

Deployment 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.

Standalone untuk Task Khusus

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.

High Availability Control Plane xDS

Lebih dari Satu Control Plane

Jika semua Envoy bergantung pada satu control plane xDS, maka control plane itu adalah titik gagal. Solusinya: jalankan beberapa instance di belakang load balancer:

Cluster xDS dengan beberapa control plane
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: 18000

Dengan 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.

Perilaku Saat Control Plane Down

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.

Drain dan Restart yang Aman

Saat Envoy diganti versi, proses drain sangat penting:

Drain sebelum mematikan Envoy
curl -s -X POST localhost:9901/drain_listeners?inboundonly
curl -s -X POST localhost:9901/healthcheck/fail

Perintah 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.

Multi-Zone dan Multi-Cluster

PrioZone untuk Koneksi Lokal

Di deployment multi-zone, Envoy harus prefer endpoint di zone yang sama:

Prioritas local zone
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: 8080

locality_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.

Konfigurasi Health dan Load

Kombinasi pattern yang direkomendasikan untuk multi-cluster:

  • Pakai EDS agar endpoint bisa berubah dinamis antar cluster.
  • Atur locality_lb_endpoints per zone dengan priority.
  • Nyalakan health check dan outlier detection per cluster.
  • Biarkan control plane lintas-cluster mengelola endpoint agregat.

Menskalakan Gateway dengan HPA

Gateway Envoy di Kubernetes bisa diskalakan otomatis:

Horizontal Pod Autoscaler
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: 70

HPA 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.

Penutup

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:

  • Envoy adalah stateless; skala berarti menambah instance, bukan replikasi state.
  • Sidecar per workload, gateway di edge, standalone untuk tugas khusus.
  • Control plane xDS harus lebih dari satu instance di belakang load balancer.
  • Envoy tetap berjalan dengan config terakhir jika control plane down.
  • 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.

Belajar Envoy Proxy - High Availability & Scaling | Belajar Envoy Proxy