Cilium vs Istio: CNI or Service Mesh?
Cilium and Istio overlap on some features - mTLS, observability, L7 routing - but they solve different problems. One is a CNI with mesh features; the other is a mesh that runs on any CNI. Here is how to choose.
TL;DR
Cilium and Istio are often compared as if they were interchangeable, but they sit at different layers. Cilium is a CNI - it provides the actual pod networking, network policy, and kernel-level observability for your cluster, and it has grown sidecarless service-mesh features on top. Istio is a service mesh - it does not replace your CNI; it layers L7 traffic management, identity, and policy over whatever networking you already run.
- Choose Cilium if you want fast eBPF-based networking, network policy, and observability as your CNI foundation - with enough mesh features (encryption, mutual authentication, L7 policy) for many teams, without sidecars.
- Choose Istio if you need a rich, dedicated service mesh - deep L7 routing, advanced traffic shaping, and a large ecosystem - on top of your existing CNI.
Many teams run both: Cilium as the CNI, Istio as the mesh.
Cilium vs Istio at a glance
| Cilium | Istio | |
|---|---|---|
| Primary role | CNI (networking, policy, observability) | Service mesh |
| Data plane | eBPF in kernel + per-node Envoy for L7 | Sidecar Envoy, or ambient ztunnel + waypoints |
| Sidecars | None (sidecarless by design) | Yes (classic) or none (ambient mode) |
| Replaces your CNI | Yes | No - runs on any CNI |
| L7 traffic management | Good (Envoy, Gateway API) | Most complete |
| Encryption | Transparent WireGuard / IPsec | mTLS between proxies |
| Observability | Hubble (flow-level, eBPF) | Telemetry via proxies + add-ons |
| CNCF status | Graduated | Graduated |
Architecture
Cilium plugs into Kubernetes as the CNI and does most of its work in the Linux kernel using eBPF. Routing, load balancing, network policy enforcement, and L3/L4 observability all happen in-kernel without per-pod proxies, which keeps the data path short and fast. For L7 concerns - HTTP routing and L7 policy - Cilium runs a per-node Envoy proxy rather than injecting one into every pod. Encryption is handled separately in the kernel with WireGuard or IPsec. The result is a sidecarless mesh where the networking substrate and the mesh share one control plane.
Istio takes the opposite approach: it assumes a CNI is already present and adds a mesh on top. In its classic model, Istio injects an Envoy sidecar into each pod; all traffic flows through that proxy, which gives Istio total control over L7 behavior at the cost of per-pod resource overhead and lifecycle complexity. Istio's newer ambient mode removes sidecars, splitting the data plane into a per-node ztunnel for L4 (identity, mTLS, basic routing) and optional waypoint proxies for L7 features only where you need them. Ambient narrows the historical overhead gap with Cilium considerably.
Performance and overhead
Because Cilium does L3/L4 in the kernel and only invokes Envoy for L7, its baseline overhead is low - there is no sidecar cost on every pod, and eBPF avoids extra userspace hops for the common case. This is Cilium's headline advantage and the reason many platform teams adopt it as the CNI regardless of their mesh plans.
Istio's classic sidecar model adds a proxy hop and memory cost per pod, which matters at scale. Ambient mode meaningfully reduces this by moving L4 to a shared per-node ztunnel and making L7 proxying opt-in per workload. If you are evaluating Istio in 2026, evaluate ambient, not the legacy sidecar model - the performance story is very different. Even so, for pure networking and policy, Cilium's eBPF path is typically the leaner foundation.
Features and observability
This is where the tools diverge by intent. Istio has the deepest L7 traffic-management surface: weighted routing, retries, timeouts, circuit breaking, fault injection, traffic mirroring, and progressive delivery through VirtualService and DestinationRule. Its ecosystem - integrations, dashboards, and documentation - is large and well proven for complex multi-service routing and canary workflows.
Cilium leads on network-level observability through Hubble, which exposes flow-level visibility - what is talking to what, at which layer, allowed or dropped - straight from eBPF with minimal overhead. Cilium also brings strong network policy (including identity-aware and DNS-aware rules), transparent WireGuard or IPsec encryption for all pod traffic, and increasingly capable L7 and Gateway API support. Cilium also offers mutual authentication between workloads, but it works differently from Istio's mTLS and is less mature - check its current status in the Cilium docs before you depend on it. For L7 routing it is enough for many teams; it does not match Istio's range of traffic-shaping features.
Both projects are CNCF graduated, both are actively developed, and both have healthy communities - so maturity is not a differentiator. The real question is which layer you are solving for.
Which should you choose?
- Choose Cilium if you are picking a CNI, want high-performance eBPF networking, identity-aware network policy, transparent encryption, and Hubble observability - and you want sidecarless encryption and L7 policy without running a separate mesh. For many clusters, Cilium alone covers networking, policy, and "enough" mesh.
- Choose Istio if you need a dedicated, full-featured service mesh - advanced L7 routing, canary and traffic-shaping workflows, and a mature ecosystem - on top of whatever CNI you run. Use ambient mode to avoid the sidecar overhead.
If you are starting fresh and unsure, run Cilium as your CNI and add Istio only if your L7 traffic-management needs outgrow what Cilium provides. That layered approach is common and easy to extend later. The fastest way to decide is to run each on a real cluster and see where the boundary falls for your workloads.
Frequently asked questions
What is the main difference between Cilium and Istio?
Cilium is a Kubernetes CNI built on eBPF that provides networking, network policy, and observability at the kernel level, with optional sidecarless service-mesh features. Istio is a dedicated service mesh that runs on top of any CNI and focuses on L7 traffic management, mTLS, and policy. Cilium owns the networking layer; Istio adds a mesh layer above it.
Can you run Cilium and Istio together?
Yes, and it is a common combination. Cilium handles the CNI, network policy, and L3/L4 observability while Istio provides the service mesh. Istio's ambient mode and Cilium coexist well, though you should test CNI chaining and avoid duplicating encryption or L7 proxying.
Does Cilium need sidecars like Istio?
No. Cilium is sidecarless by design - it enforces policy and encryption (WireGuard or IPsec) in the kernel via eBPF and uses a per-node Envoy proxy only for L7 features. Istio historically required a per-pod Envoy sidecar, but its ambient mode removes sidecars in favor of a per-node ztunnel plus optional waypoint proxies.
Which has better L7 traffic management, Cilium or Istio?
Istio. It offers the deepest L7 feature set - fine-grained routing, retries, fault injection, traffic mirroring, and canary releases through VirtualService and DestinationRule. Cilium handles L7 too via Envoy and Gateway API, but Istio's traffic-management surface is more mature and complete.
Do real production work, free. Live cloud workspaces in your browser - every project you complete lands on your portfolio.
Get started - free