Mengintegrasikan service mesh ke dalam alur GitOps FluxCD: instalasi dan konfigurasi Istio, Linkerd, serta AWS App Mesh, otomatisasi traffic management, hingga observability berupa tracing dan service graphs untuk mendukung canary analysis.

Di episode 17 kalian sudah mempelajari blue/green dan A/B testing dengan Flagger — trafik dipecah ke dua versi aplikasi, diuji, lalu dipromosikan. Saat itu Flagger menangani routing, tapi ada pertanyaan tersisa: ke mana trafik dialirkan dan bagaimana observasi koneksi antar service, retry, timeout, hingga mTLS dikelola? Jawabannya adalah service mesh.
Episode ini membahas integrasi service mesh dengan FluxCD. Kuncinya: mesh adalah aplikasi Kubernetes biasa — operator, CRD, dan control plane — sehingga ia bisa diinstal dan dikonfigurasi sepenuhnya lewat Git. Artinya seluruh kebijakan routing dan telemetry ikut di-versioning seperti manifest lain.
Service mesh adalah lapisan infrastruktur untuk komunikasi antar service. Setiap pod diberi sidecar proxy yang menyadap trafik masuk dan keluar, sehingga aplikasi tidak perlu tahu cara retry, load balancing, TLS, atau observability. Dua komponen utamanya:
| Aspek | Istio | Linkerd | AWS App Mesh |
|---|---|---|---|
| Model | Open source, self-hosted | Open source, ringan | Terkelola AWS |
| Fitur | Kaya (traffic, mTLS, observability) | Sederhana dan fokus | Native AWS, X-Ray |
| Instalasi | Beberapa chart | Dua file manifest | AWS CLI + controller |
| Metrics | Prometheus | Prometheus (addon viz) | CloudWatch |
| Weight routing | VirtualService | TrafficSplit (SMI) | VirtualRouter |
Instalasi Istio paling GitOps-friendly lewat chart resmi istio-base, istiod, dan gateway, yang dideklarasikan sebagai HelmRepository dan HelmRelease. Dengan enablePrometheusMerge: true, metrik mesh otomatis masuk pipeline Prometheus.
Tip
Urutan instalasi penting: istio-base (CRD) dulu, lalu istiod, lalu gateway. Atur dengan dependsOn pada Kustomization seperti di episode 10, atau pakai dependsOn pada HelmRelease.
Setelah chart masuk, aktifkan sidecar injection dengan label istio-injection: enabled pada namespace, dan routing dideklarasikan lewat VirtualService (ke mana trafik per host dialirkan) serta DestinationRule (policy seperti mTLS dan load balancing per subset):
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
name: api
namespace: apps
spec:
hosts:
- api.apps.svc.cluster.local
http:
- route:
- destination:
host: api
subset: stable
weight: 90
- destination:
host: api
subset: canary
weight: 10
---
apiVersion: networking.istio.io/v1
kind: DestinationRule
metadata:
name: api
namespace: apps
spec:
host: api
subsets:
- name: stable
labels:
version: stable
- name: canary
labels:
version: canary
trafficPolicy:
tls:
mode: ISTIO_MUTUALImportant
Flagger (episode 15-17) mendukung Istio dan justru mengelola VirtualService serta DestinationRule ini secara otomatis untuk canary. Timbangan 90/10 di atas adalah contoh yang bisa dihasilkan Flagger. Aktifkan enablePrometheusMerge: true agar metrik mesh masuk pipeline observability.
Verifikasi cepat instalasi memakai CLI:
istioctl version
istioctl proxy-status
istioctl analyze --namespace appsLinkerd jauh lebih ringan. Manifest instalasinya bisa di-generate dan di-commit langsung ke Git:
linkerd install --crds > install/linkerd/crds.yaml
linkerd install > install/linkerd/control-plane.yamlFluxCD cukup menunjuk satu Kustomization ke folder install/linkerd. Ini contoh paling langsung dari "mesh sebagai kode" — murni YAML dari repo, tanpa installer interaktif.
Linkerd memakai ServiceProfile untuk menggambarkan API sebuah service dan TrafficSplit untuk membagi trafik antar versi di level service:
apiVersion: split.smi-spec.io/v1alpha2
kind: TrafficSplit
metadata:
name: api
namespace: apps
spec:
service: api
backends:
- service: api-stable
weight: 900m
- service: api-canary
weight: 100mUntuk observability, tambahkan addon linkerd-viz sebagai HelmRelease. Dashboard bisa diakses lewat linkerd viz dashboard, dan linkerd viz top deploy/api menampilkan latensi real-time per deployment.
Di AWS, App Mesh menawarkan mesh terkelola: control plane dipegang AWS, proxy tetap Envoy di dalam cluster. Setup dimulai dari mesh dan virtual node yang di-deploy FluxCD:
apiVersion: appmesh.k8s.aws/v1beta2
kind: Mesh
metadata:
name: dev-null-mesh
spec:
namespaceSelector:
matchLabels:
mesh: dev-null
---
apiVersion: appmesh.k8s.aws/v1beta2
kind: VirtualNode
metadata:
name: api
namespace: apps
spec:
meshName: dev-null-mesh
listeners:
- portMapping:
port: 8080
protocol: http
backends:
- virtualService:
virtualServiceName: orders.apps.svc.cluster.localRouter dan route configuration menentukan kemana trafik menuju:
apiVersion: appmesh.k8s.aws/v1beta2
kind: VirtualRouter
metadata:
name: api-router
namespace: apps
spec:
meshName: dev-null-mesh
listeners:
- portMapping:
port: 8080
protocol: http
routes:
- name: api-route
httpRoute:
match:
prefix: /
action:
weightedTargets:
- virtualNodeName: api
weight: 100Tip
App Mesh cocok untuk organisasi yang sudah hidup di ekosistem AWS: metrik otomatis masuk CloudWatch dengan dimensi meshName dan virtualNodeName, tracing terintegrasi AWS X-Ray, dan IAM mengontrol siapa yang boleh mengubah mesh.
Mesh tanpa observability hanya menambah kompleksitas. Empat lapisan yang perlu dipikirkan:
Episode ini menunjukkan bahwa service mesh bukan sesuatu yang terpisah dari GitOps — mesh hanyalah aplikasi Kubernetes lain yang diinstal dan dikonfigurasi lewat Git. Kita membahas instalasi Istio dengan HelmRelease, otomatisasi VirtualService dan DestinationRule, Linkerd yang ringan dengan TrafficSplit, AWS App Mesh dengan virtual node dan router, serta observability berupa tracing, service graphs, dan dashboards.
Inti yang harus dibawa pulang:
Dengan mesh, trafik kini bisa diatur halus — tetapi ini membuka permukaan serangan baru. Di episode 19 selanjutnya kita membahas securing Flux: autentikasi, RBAC, network security, hingga supply chain security dengan Cosign dan admission controller. Sampai jumpa di episode 19!