Mengenal service mesh sebagai lapisan kontrol komunikasi antar-service: Istio/Linkerd, mutual TLS, traffic management seperti canary dan weighted routing, serta observability jaringan yang menyertainya

Setelah di episode 7 kita memastikan kode mengalir dari build ke deploy dengan pipeline yang konsisten, sekarang kode itu harus berkomunikasi satu sama lain. Di platform dengan ratusan service, komunikasi antar-service bukan sekadar masalah DNS — ia masalah keamanan (mTLS), keandalan (retry, timeout), dan observability (traces). Service mesh adalah jawaban platform engineering untuk masalah ini.
Mengapa service mesh relevan di 2026? Karena aplikasi sudah terbagi menjadi banyak microservice, dan mengimplementasikan retry, mTLS, dan distributed tracing di setiap service — di setiap bahasa — adalah beban yang tidak bisa ditanggung developer. Service mesh memindahkan beban ini ke data plane dan control plane yang dikelola platform team.
Service mesh adalah infrastruktur dedicated untuk menangani komunikasi service-to-service. Ia terdiri dari dua bagian:
istiod; di Linkerd: linkerd-controller.Yang terpenting: aplikasi tidak tahu keberadaan mesh. Service tetap memanggil service lewat HTTP biasa — proxy yang mengurus mTLS, retry, dan telemetry secara transparan.
Dua pilihan utama di ekosistem CNCF, dengan filosofi berbeda:
| Kriteria | Istio | Linkerd |
|---|---|---|
| Data plane | Envoy (kuat, kompleks) | Proxy Rust khusus (ringan) |
| Fitur | Traffic management sangat kaya, gateway, mTLS, observability | Fokus: security, reliability, telemetry |
| Resource overhead | Sedang-tinggi | Rendah |
| Kurva belajar | Curam | Landai |
| Cocok untuk | Platform kompleks dengan kebutuhan routing lanjutan | Mayoritas workload dengan kebutuhan standar |
Untuk series ini kita pakai Istio sebagai contoh utama karena fiturnya paling lengkap; konsep yang sama berlaku di Linkerd.
Fitur paling penting service mesh dari sisi keamanan adalah mutual TLS (mTLS) — dua arah: client dan server sama-sama membuktikan identitas lewat sertifikat. Ini berbeda dari TLS biasa yang hanya memverifikasi server.
Di Istio, mTLS diaktifkan secara mesh-wide dengan permissive mode dulu (agar service lama tidak rusak), lalu strict:
apiVersion: security.istio.io/v1
kind: PeerAuthentication
metadata:
name: default
namespace: istio-system
spec:
mtls:
mode: STRICTDengan STRICT, semua traffic antar-service diwajibkan memakai mTLS. Ini adalah fondasi zero trust yang akan kita perdalam di episode 18. Keuntungan lain: sertifikat yang dikeluarkan istiod membuat identitas service dapat diverifikasi — dasar untuk authorization antar-service (yang mana boleh bicara dengan yang mana).
Important
Aktifkan mTLS bertahap: mulai dengan mode PERMISSIVE (menerima plaintext dan mTLS), amati log, lalu pindah ke STRICT. Langsung STRICT dari hari pertama adalah cara paling populer untuk memutus komunikasi seluruh production.
Di sinilah service mesh menunjukkan kekuatan yang tidak dimiliki mekanisme Kubernetes standar. Ingress standard bisa load balance antar Pod, tapi tidak bisa mengarahkan persentase trafik antar versi dengan mudah.
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
name: payments-api
namespace: team-payments-prod
spec:
hosts:
- payments-api
http:
- route:
- destination:
host: payments-api
subset: v1
weight: 90
- destination:
host: payments-api
subset: v2
weight: 10Dengan weight: 90/10, 10% trafik diarahkan ke versi baru (v2). Platform team bisa menaikkan secara bertahap: 10% → 50% → 100%, sambil memantau error rate dan latency dari telemetry mesh.
apiVersion: networking.istio.io/v1
kind: DestinationRule
metadata:
name: payments-api
namespace: team-payments-prod
spec:
host: payments-api
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2Pola reliability yang dipindahkan dari kode aplikasi ke mesh:
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
name: payments-api
namespace: team-payments-prod
spec:
hosts:
- payments-api
http:
- timeout: 3s
retries:
attempts: 3
perTryTimeout: 1s
retryOn: connect-failure,5xx
route:
- destination:
host: payments-apiCatatan penting: timeout aplikasi tetap dibutuhkan — timeout di mesh dan di aplikasi harus dikoordinasikan (timeout client lebih pendek dari server, dst), jika tidak kalian mendapat error yang misterius.
Istio Gateway menggantikan kebutuhan ingress controller terpisah untuk kebutuhan routing tingkat lanjut:
apiVersion: networking.istio.io/v1
kind: Gateway
metadata:
name: public-gateway
namespace: istio-system
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 443
name: https
protocol: HTTPS
hosts:
- "*.apps.example.com"
tls:
mode: SIMPLE
credentialName: apps-tls-certGateway + VirtualService membentuk lapisan routing platform yang konsisten: semua service dipublish dengan pola DNS yang seragam ({service}.apps.example.com), TLS otomatis, dan kebijakan yang sama.
Bonus besar service mesh: telemetry otomatis. Karena semua traffic melewati proxy, mesh menghasilkan metrics (traffic, latency, error), traces (distributed tracing antar service), dan access logs tanpa aplikasi diubah sama sekali.
| Kemampuan | Istio | Linkerd |
|---|---|---|
| Metrics per service | istio_request_duration_seconds dll. | linkerd_request_latency_ms dll. |
| Distributed tracing | Jaeger/Tempo via Envoy | Jaeger/Zipkin (terbatas) |
| Service dependency graph | Kiali | linkerd viz |
Ini adalah jalur langsung ke episode 9 (observability platform) — mesh sudah menyediakan data, observability stack tinggal memvisualisasikannya.
Tip
Mulai dari Linkerd jika tim masih pemula (overhead kecil, instalasi 2 langkah) dan naik ke Istio saat kebutuhan routing lanjutan muncul (multi-gateway, authorization, fault injection). Menambah mesh yang kompleks sebelum ada kebutuhan adalah sumber toil yang tidak perlu.
Inti yang harus dibawa pulang:
PERMISSIVE → STRICT.VirtualService weight memungkinkan release bertahap yang aman.Di episode 9 selanjutnya kita membangun observability platform — Prometheus/Grafana untuk metrics, Loki untuk logs, Tempo untuk traces, dan OpenTelemetry sebagai standar data — yang mengubah data mentah dari mesh, pipeline, dan Kubernetes menjadi pengertian yang bisa ditindaklanjuti!