Service Mesh
mTLS, observability, traffic shaping between services — Istio, Linkerd, Cilium.
By 2026 most teams that needed a mesh have one; many teams that thought they needed one have learned they didn't. The bar for adopting a mesh has risen.
The contenders
- ★ Istio — the heavyweight; deepest feature set; ambient mesh mode reduces sidecar overhead. Default for big enterprise.
- ★ Linkerd — Rust-based proxy (linkerd2-proxy); much simpler than Istio, very fast. CNCF graduated. Default for "I want a mesh, not a project."
- ★ Cilium Service Mesh — eBPF-native; no sidecars; ties into Cilium CNI / Gateway. Fastest-growing in 2026.
- Consul Connect (HashiCorp) — comes with Consul; works on k8s and non-k8s.
- Kuma (Kong) — multi-cluster / multi-mesh; CRD-driven.
- Traefik Mesh (formerly Maesh) — lighter; less feature-rich.
- AWS App Mesh — being deprecated by AWS in favor of customers self-hosting Istio / Linkerd.
What a mesh actually buys you
- ★ mTLS between services — automatic, rotated certificates.
- ★ Per-call observability — golden signals (latency, errors, throughput) without instrumenting code.
- Retry / timeout / circuit breaker policies as config.
- Traffic splitting / canaries / mirroring at the L7 level.
- AuthN / AuthZ between services (e.g., "service A may call service B's
/fooonly"). - Multi-cluster connectivity (in advanced setups).
What a mesh costs you
- Operational complexity. Sidecar version drift, mesh upgrades, debugging where the request actually went.
- Latency overhead — sidecar proxies add a few ms per hop. eBPF meshes (Cilium) reduce this.
- Memory — each pod gains a 50–150 MB sidecar.
- Knowledge debt — your team now needs to understand Envoy config or eBPF.
Sidecar vs. sidecar-less
- Classic Istio / Linkerd / Consul — Envoy or proxy sidecar in every pod.
- Istio Ambient mode — split into per-node ztunnel + per-namespace waypoint proxies.
- Cilium Mesh — kernel-level eBPF; no sidecars at all.
- Linkerd "no-sidecar" mode is in development.
When you don't need a mesh
- 1–2 services. You don't need a mesh; pod-to-pod TLS is fine without it.
- All traffic in one namespace and you control both ends. Just use TLS.
- You can adopt mTLS with cert-manager + service-account tokens without a mesh.
When you do need a mesh
- Many services across many teams.
- Hard requirement for mTLS-everywhere with auto-rotation.
- Compliance demands service-to-service AuthZ policies.
- Operations team that knows Envoy / Istio.
Patterns to adopt
- ★ Linkerd-first for most teams. Istio when you need its full feature set.
- Adopt observability before mesh. Prometheus + Grafana + Tempo gets you 80% of mesh's observability win.
- Pin mesh versions in IaC. Mesh upgrades break things; test in staging.
- Limit mesh scope. Don't enroll every namespace; pilot one team first.
Pick this if…
- Default new mesh, want simple: Linkerd.
- Default new mesh, big enterprise / max features: Istio (Ambient mode).
- All-in on Cilium / eBPF: Cilium Service Mesh.
- Multi-cluster / non-k8s: Consul Connect or Kuma.
- You're not sure you need one: you probably don't.