Killing the Sidecar: Migrating to Sidecarless Service Meshes via Ambient Networking

Quick answer
Killing the Sidecar: Migrating to Sidecarless Service Meshes: quick answer
Killing the Sidecar: Migrating to Sidecarless Service Meshes via Ambient Networking Running an Envoy sidecar inside every single Kubernetes pod is a massive waste of cloud spend.
What is the main takeaway from Killing the Sidecar: Migrating to Sidecarless Service Meshes via Ambient Networking?
Killing the Sidecar: Migrating to Sidecarless Service Meshes via Ambient Networking Running an Envoy sidecar inside every single Kubernetes pod is a massive waste of cloud spend.
Which InstaTunnel page should I read next?
Use the related pages below to continue into the most relevant documentation, product workflow, comparison page, or implementation guide.
Running an Envoy sidecar inside every single Kubernetes pod is a massive waste of cloud spend. Ambient networking splits Layer 4 and Layer 7 processing at the node level, eliminating sidecar overhead while preserving zero-trust encryption. Here is the full architectural picture, grounded in current benchmarks and the Istio release history through 1.30.
The Sidecar Tax: Why the Classic Model Is Breaking Cloud Budgets
The evolution of cloud-native architecture has been defined by decoupling: applications from physical servers via virtual machines, runtime dependencies via containers, and network logic from application code via the service mesh. For years, the industry standard for that last decoupling has been the sidecar proxy model—most famously popularized by Istio.
The model works by injecting an Envoy proxy container into every application pod. The proxy intercepts all inbound and outbound traffic, handling mutual TLS (mTLS) encryption, telemetry generation, traffic routing, and authorization policies. The abstraction is clean. The cost is not.
As Kubernetes deployments have scaled from dozens of microservices to thousands, a compounding flaw in the sidecar model has become impossible to ignore: you are running one full Envoy process for every single pod in the cluster. That tax lands across three distinct vectors.
1. Resource Bloat and Cloud Spend
Envoy is a capable proxy, but it requires dedicated CPU and memory allocation. In Kubernetes, every container in a pod must declare resource requests and limits. At 1,000 pods, you are managing 1,000 Envoy proxy lifecycles.
Because traffic spikes are unpredictable, platform teams must provision sidecars against worst-case load. If a sidecar requires 0.2 vCPU and 64 MB RAM to handle peak traffic safely, a 2,500-pod cluster reserves 500 vCPU cores and 160 GB of memory for nothing except network plumbing. In many enterprise environments, the service mesh data plane consumes more compute than the business logic it supports.
2. The Operational Nightmare of Lifecycle Management
Because the sidecar is co-located in the same pod as the application, their lifecycles are coupled. Patching a CVE in Envoy, or upgrading the mesh version, requires a rolling restart of every application pod. That violates a basic infrastructure principle: networking changes should not cause application restarts.
The coupling also introduces race conditions during pod startup. If the application container initializes before the sidecar proxy is ready to route traffic, requests fail, crash loops occur, and CI/CD pipelines stall. Kubernetes Jobs are particularly problematic: an injected sidecar that never terminates can prevent the Job’s Pod from completing, orphaning it indefinitely.
3. The “All-or-Nothing” Compute Penalty
Traditional sidecars conflate Layer 4 (L4) transport security with Layer 7 (L7) application routing. Even if a microservice only needs mTLS encryption and has no requirement for HTTP retries, header manipulation, or traffic splitting, every packet passing through the sidecar still pays the cost of full L7 HTTP parsing. There is no way to opt out.
Enter the Ambient Networking Data Plane
The architectural response to these problems is Istio Ambient Mode, announced in September 2022 and reaching General Availability in Istio 1.24 on November 7, 2024. At GA, the ztunnel, waypoints, and all related APIs were marked Stable by the Istio Technical Oversight Committee, signaling full production readiness. The ztunnel image on Docker Hub had crossed 1 million total downloads by that date, with approximately 63,000 pulls in the final week before release.
The core idea behind the ambient networking data plane is a clean separation of concerns: basic security (L4) is a ubiquitous, invisible property of the infrastructure, while advanced application networking (L7) is applied strictly on an opt-in basis. Achieving that separation means removing the proxy from the application pod entirely and replacing 1,000 sidecars with two new components: the Ztunnel (for L4) and the Waypoint Proxy (for L7).
Ztunnel: Mastering Layer 4 Kernel Transport Security
The Ztunnel (Zero Trust Tunnel) is the foundation of the sidecarless service mesh. It is a purpose-built, node-level proxy written in Rust, chosen specifically for memory safety, speed, and an ultra-low resource footprint.
Ztunnel is deployed as a Kubernetes DaemonSet. One instance runs on each node, regardless of how many pods that node hosts. According to official Istio performance documentation, a single ztunnel proxy at 1,000 requests per second consumes approximately 0.06 vCPU and 12 MB of memory under steady-state load. That idle/low-load profile is a meaningful constraint: at high pod density, ztunnel benefits from statistical multiplexing across all pods on the node, and actual memory usage under real-world mixed traffic patterns typically sits in the 30–50 MB range depending on configuration state.
Ztunnel operates strictly at OSI Layers 3 and 4. It does not parse HTTP requests, does not read JSON payloads, and does not perform traffic splitting. Its responsibilities are confined to:
- Establishing and terminating mTLS connections on behalf of pods.
- Enforcing L4 network authorization policies (e.g., “Service A may reach Service B on port 8080”).
- Emitting baseline TCP telemetry metrics.
How Traffic Reaches Ztunnel Without a Sidecar
The mechanism that makes transparent interception work has evolved across the 1.x release cycle. The default mode in current Istio releases uses in-pod redirection: the Istio CNI node agent delivers the pod’s network namespace to the co-located ztunnel, which then starts its redirection sockets inside that namespace while running outside the pod. Traffic redirection between ztunnel and the application pod is therefore invisible to any Kubernetes primary CNI operating in the node network namespace—Cilium, Calico, Flannel, and the in-house CNI implementations used by OpenShift and Amazon EKS all coexist without conflict.
An older mechanism used iptables rules combined with GENEVE overlay tunnels. This required marking and redirecting traffic at the node network namespace, which conflicted with a wide range of third-party CNIs. The current in-pod approach, introduced to achieve universal CNI compatibility ahead of the Beta milestone, resolved this fundamental portability constraint.
An optional eBPF-based redirection mode is also available via the redirectMode: "ebpf" Helm value. Enabling it requires kernel version 4.20 or later and eliminates the need for GENEVE encapsulation, offering measurable latency and throughput improvements over the iptables path. eBPF redirection is opt-in; the default remains iptables + in-pod namespace delivery. Platform teams with CNI compatibility requirements, or running older kernels, should stay on the default.
Regardless of redirection mechanism, the traffic path is the same once ztunnel has the packet:
- Source pod sends a standard TCP packet.
- The Istio CNI redirects the packet into the local ztunnel.
- Ztunnel identifies the source pod, retrieves its SPIFFE X.509 SVID, and encapsulates the traffic using HBONE (HTTP-Based Overlay Network Environment)—HTTP/2 CONNECT over mTLS on port 15008.
- The packet is tunneled to the ztunnel on the destination node.
- The destination ztunnel decrypts, validates policies, and delivers the packet to the destination pod.
To the application, the network appears as a plain local connection. In reality the traffic is fully encrypted and mutually authenticated at the node layer.
Operational note: Existing
NetworkPolicyobjects in ambient-enrolled namespaces must allow inbound port 15008 for HBONE traffic to reach the destination ztunnel. This is a common gotcha during migration.
SPIFFE Cryptographic Identity Management
Ztunnel manages SPIFFE identities for all pods on its node. When a pod is enrolled into the ambient mesh, ztunnel requests an X.509 SVID from Istiod on behalf of that pod’s service account. Ztunnel therefore holds multiple distinct identities simultaneously—one per service account running on the node.
Identities follow the canonical Istio SPIFFE format:
spiffe://<trust-domain>/ns/<namespace>/sa/<service-account>
The SPIFFE ID is embedded in the Subject Alternative Name field of the X.509 certificate, integrating directly with standard TLS mutual authentication. Istiod’s internal CA issues and rotates these certificates automatically; for enterprises requiring centralized PKI governance, Istiod supports delegation to an external SPIRE deployment.
When a pod initiates a connection, the CNI’s network namespace tracking guarantees that ztunnel knows the exact source pod identity—it cannot be spoofed. The selected SVID for that pod initiates the mTLS handshake, and the destination ztunnel verifies the identity before delivering traffic. This is cryptographic per-workload authentication at the node layer; lateral movement by a compromised pod remains cryptographically blocked even when both pods share the same physical host.
Waypoint Proxies: Decoupling Layer 7 Processing
For the majority of internal east-west cluster traffic, ztunnel’s L4 mTLS coverage is sufficient. Some services require Layer 7 logic: HTTP header-based routing, canary deployments, circuit breaking, rate limiting, or WebAssembly extensions. In a traditional mesh, every pod pays that L7 cost regardless. In the ambient data plane, L7 is handled exclusively by Waypoint Proxies.
Waypoints are standard Envoy proxies deployed outside application pods, typically one per namespace or per service account. They scale independently of the application and only need to exist for the services that actually require L7 capabilities.
When a service is configured to use a waypoint, the full traffic path is:
- Source pod emits a packet.
- Source node ztunnel intercepts, attaches the source SPIFFE identity, and HBONE-encapsulates the traffic.
- Traffic is routed to the Waypoint Proxy assigned to the destination service.
- The waypoint terminates the HBONE tunnel, inspects HTTP headers, applies L7 policy (e.g., routing 10% of traffic to a
v2canary), re-encrypts, and forwards. - Traffic arrives at the destination node ztunnel.
- The destination ztunnel delivers the packet to the destination pod.
By making L7 an explicit opt-in, platform teams can apply waypoints only to the services that genuinely need HTTP-layer logic and leave the remainder at pure L4 overhead.
Extension Model: WasmPlugin and TrafficExtension API
One important constraint to understand before migrating: the EnvoyFilter API is not supported for waypoint proxies. EnvoyFilter remains in Alpha status after years of production use in sidecar mode, primarily because its tight coupling to internal Envoy xDS structure makes it fragile across upgrades. The maintainers have deliberately not ported it to ambient mode.
Extensions for waypoints must use WebAssembly (Wasm) plugins. In Wasm, custom authentication logic, specialized telemetry, or request/response transformation can be loaded dynamically into the waypoint at runtime without rebuilding the proxy binary. The WasmPlugin API is the current mechanism; TrafficExtension—a unified API supporting both Wasm and Lua for sidecars, gateways, and waypoints—shipped as Alpha in Istio 1.30 (May 2026) and is the forward path.
Teams with heavy EnvoyFilter investments should treat Wasm migration as a first-class item in their ambient adoption plan.
Node-Level Proxy Optimization: The Economic Impact
The arithmetic of migrating from per-pod sidecars to per-node ztunnels is straightforward, and the numbers hold up in practice. Istio documentation and early adopters consistently report savings of 70% to 90% or more in mesh data plane compute overhead.
Consider a cluster with 50 worker nodes running 2,500 microservice pods.
Sidecar model:
- 2,500 Envoy proxies, each provisioned for peak load.
- At 0.2 vCPU reserved per sidecar: 500 vCPU cores consumed by the mesh data plane.
Ambient model:
- 50 ztunnel instances (one per node) at approximately 0.06–1 vCPU each depending on traffic density, benefiting from statistical multiplexing across all pods on the node.
- Waypoints deployed for the 10–20% of services that require L7 logic; at 10 waypoint instances, roughly 1 vCPU each.
- Total mesh data plane overhead: approximately 60–100 vCPU cores.
That is an 80–88% reduction in compute dedicated to network plumbing. In cloud environments where vCPU-hours translate directly to line-item spend, the savings at enterprise scale are material.
The latency story is equally strong. Official Istio performance benchmarks (measured on the CNCF Community Infrastructure Lab at 1,000 RPS, 1 KB payload, HTTP/1.1, mutual TLS enabled) show that the two ztunnel hops of an ambient L4 path add 0.17 ms at P90 and 0.20 ms at P99 over baseline data-plane latency. An independent peer-reviewed comparison found that Istio Ambient showed only an 8% latency increase at 3,200 RPS—the best result among all tested mesh implementations—while traditional Istio sidecar mode produced a 166% increase at the same load and failed to meet the 12,800 RPS target entirely.
HBONE’s use of HTTP/2 as the tunnel framing introduces approximately 12% additional latency over a raw TLS connection in single-connection scenarios, an overhead the Istio project is actively tracking for reduction. For multi-connection workloads at scale, the statistical multiplexing gains from the shared node proxy dominate, and the net latency profile is better than sidecar mode for virtually all realistic production traffic shapes.
Redefining Security: The Shared-Proxy Objection Answered
A common concern when adopting a sidecarless mesh is the intuition that a sidecar—isolated within the pod’s own network namespace—is more secure than a shared ztunnel serving multiple pods on the same node. In practice, ambient mode maintains, and in several ways improves, the zero-trust posture of the cluster.
Cryptographic isolation is preserved. Ztunnel holds distinct X.509 SVIDs for each service account on the node. The in-pod redirection mechanism guarantees that ztunnel knows the exact source pod identity before selecting the corresponding certificate for an mTLS handshake. There is no situation in which pod A can use pod B’s identity, even when both pods reside on the same physical host.
The Envoy admin API attack surface is removed. In sidecar mode, a compromised application container has localhost access to Envoy’s administration API—a well-known escalation vector. In ambient mode, the proxy is no longer co-located in the pod. A compromised application has no local proxy to attack.
Rust’s memory safety eliminates an entire class of vulnerability. Ztunnel is written in Rust, which eliminates buffer overflows and use-after-free bugs at the language level. The Istio project explicitly selected Rust for this reason: the proxy holding all on-node cryptographic material must be memory-safe.
Existing NetworkPolicy integration is unchanged. Ztunnel encrypts and authenticates traffic at the mesh layer. Standard Kubernetes NetworkPolicy continues to operate at the CNI layer below, enforcing network boundary controls without conflict. Calico, Cilium, and other CNIs that provide deep packet inspection continue to work alongside ztunnel rather than being replaced by it.
Migration: What the Operational Shift Actually Looks Like
The migration path in Istio Ambient Mode is deliberately designed to be non-disruptive. Bringing a namespace into the ambient mesh requires a single label:
kubectl label namespace enterprise-apps istio.io/dataplane-mode=ambient
The Istio CNI detects the label, configures in-pod redirection for all new pods in that namespace, and begins routing traffic through the node ztunnel. Application pods do not restart. TCP connections are not dropped. The upgrade to strict mTLS is instantaneous and transparent.
Upgrading the mesh itself decouples from application lifecycle entirely. To roll a new ztunnel version, operators update the DaemonSet—node by node, with standard rolling update semantics—while application pods remain completely untouched. Waypoints are ordinary Kubernetes Deployments and upgrade like any other Deployment. The network infrastructure is no longer in the developer’s purview.
Migrating from Sidecar Mode
The Istio project’s stated 2025–2026 roadmap gives sidecar-to-ambient migration first-class priority: tooling to assess migration readiness, rollback-safe interoperability between sidecar and ambient namespaces in the same cluster, and comprehensive documentation are all active work items. Sidecar mode is not deprecated—the maintainers have explicitly committed to ongoing sidecar support—but the operational investment is now clearly concentrated on the ambient path.
The primary pre-migration checklist items for teams with existing sidecar deployments:
- Audit EnvoyFilter usage. Any filters must be rewritten as Wasm plugins before disabling sidecar injection. The TrafficExtension API (Istio 1.30 Alpha) is the forward target.
- Validate CNI compatibility. Current in-pod redirection works with all major CNIs including Cilium and Calico, but verify against the specific version combinations in your environment.
- Check
VirtualServiceusage.VirtualServicein ambient mode is Alpha and cannot be combined with Gateway API resources. Services relying onVirtualServicefor traffic management should migrate toHTTPRoute(Gateway API) before or during the ambient transition. - Update NetworkPolicy for port 15008. HBONE traffic must be permitted inbound on port 15008 for all ambient-enrolled pods.
The Istio Ambient Roadmap: 2025 and Beyond
The ambient mode feature surface has expanded significantly since the 1.24 GA:
Istio 1.27 (August 2025): Ambient multicluster graduated to Alpha. Cross-cluster secure connectivity, service discovery, and load balancing became available with the familiar ztunnel + waypoint architecture, enabling active-active configurations across clusters and cloud regions from a single control plane.
Istio 1.28 (November 2025): Waypoints gained the ability to route traffic to remote networks in multicluster configurations. L7 policies including outlier detection now apply to cross-network requests. Native nftables support was added as an alternative to iptables for ambient mode network rule management.
Istio 1.29 (February 2026): Ambient multi-network multicluster promoted to Beta, with significantly improved telemetry across distributed clusters. HBONE was enriched with baggage headers to carry peer metadata transparently through east-west gateways, enabling accurate L7 metrics in multi-cluster topologies. The HBONE HTTP/2 window-sizing issue affecting high-throughput workloads was also addressed.
Istio 1.30 (May 2026): Four CVEs patched, including a JWKS fallback RSA private key leak (CVE-2026-31837) and unauthenticated XDS debug endpoint exposure (CVE-2026-31838). The TrafficExtension API shipped as Alpha, unifying Wasm and Lua extension configuration for sidecars, gateways, and waypoints. Agentgateway—a new data plane component for AI inference workload routing—was introduced as experimental. The XDS debug authentication requirement became mandatory, and CNI config file permissions tightened to 0600.
KubeCon EU 2026 (Amsterdam, March 2026): The CNCF announced Istio ambient multicluster Beta, Gateway API Inference Extension Beta (for intelligent AI model traffic routing), and experimental agentgateway integration. The framing was explicit: Istio is now positioned as infrastructure for AI-era Kubernetes workloads, with 66% of organizations already running generative AI on Kubernetes according to CNCF data.
Conclusion: The Future Is Ambient
The sidecar proxy was a necessary and genuinely important stepping stone in the evolution of cloud-native networking. It proved that zero-trust architectures were viable at scale and taught the industry how to decouple network intelligence from application code. But the compute tax, operational friction, and lifecycle coupling have become structural problems that cannot be engineered away within the sidecar model itself.
The transition to a sidecarless service mesh via an ambient networking data plane represents the maturation of the service mesh concept. By deploying Rust-based, memory-safe ztunnels as shared per-node L4 proxies and isolating Envoy waypoints for on-demand L7 logic, organizations get three things at once: a smaller and more defensible security attack surface, a mesh lifecycle that is genuinely invisible to application teams, and a concrete 70–90% reduction in the compute overhead dedicated to network infrastructure.
The Istio project’s GA in November 2024, the multicluster Beta in early 2026, and the active roadmap through 1.30 collectively signal that this is no longer experimental infrastructure. For new deployments, ambient mode is the default choice. For teams running sidecar deployments at scale, the migration tooling and interoperability guarantees are mature enough to begin planning the transition now.
It is time to kill the sidecar and let the network go ambient.
Changelog
| # | Section | Change |
|---|---|---|
| 1 | Throughout | Removed metadata header (subtitle/description block). |
| 2 | Introduction | Corrected GA framing: ambient mode reached GA in Istio 1.24 on November 7, 2024 with ztunnel, waypoints, and all APIs marked Stable by the Istio TOC—not “by 2026” as some earlier drafts implied. Added Docker Hub download milestone (1M+ downloads, ~63k/week at GA). |
| 3 | Sidecar Tax §2 | Added Kubernetes Jobs / orphaned pod problem as a concrete lifecycle failure mode, sourced from official CNCF ambient mode announcement. |
| 4 | Ztunnel §resource | Corrected memory benchmark: official Istio performance docs report 12 MB at 1,000 RPS and typical idle/mixed usage of 30–50 MB. Removed unattributed “less than 15 MB” figure. Added precise vCPU figure of 0.06 per single ztunnel instance from official Istio Performance and Scalability docs. |
| 5 | Traffic interception | Corrected and expanded redirection mechanism section. Replaced vague “CNI plugin or eBPF” description with accurate account: default mode is in-pod namespace delivery (iptables); eBPF is an opt-in alternative requiring kernel ≥4.20; older GENEVE overlay mode was a prior implementation, not the current default. Sources: Istio blog January 2024 and preliminary 1.29 docs. |
| 6 | HBONE | Added HBONE port number (15008) and the practical NetworkPolicy implication that ambient-enrolled pods must allow inbound 15008. |
| 7 | SPIFFE | Added explicit SPIFFE ID format spiffe://<trust-domain>/ns/<namespace>/sa/<service-account>, the X.509 SVID mechanism, and the Istiod certificate-per-service-account model. Sourced from Istio SPIRE integration docs and SPIFFE framework documentation. |
| 8 | Waypoints §limitations | Added EnvoyFilter limitation (explicitly not supported for waypoints per Istio official docs), Wasm/TrafficExtension as the extension path, VirtualService Alpha caveat, and L7 policy fail-safe behavior (L7 policies applied to ztunnel via workload selector become DENY policies). |
| 9 | Benchmarks | Replaced illustrative latency claims with official Istio 1.22⁄1.23 benchmark data: P90 = 0.17 ms, P99 = 0.20 ms for two ztunnel hops at 1,000 RPS with mTLS. Added peer-reviewed academic comparison (arXiv:2411.02267): Istio Ambient produced only 8% latency increase vs 166% for traditional sidecar at 3,200 RPS. Added HBONE HTTP/2 overhead figure (~12% vs raw TLS in single-connection scenarios) from ztunnel GitHub issue #1476. |
| 10 | Compute savings | Adjusted vCPU example to use 0.2 vCPU per sidecar (matching Istio performance guidance) rather than 0.5. Resulting savings estimate of 80–88% aligns with official Istio “can exceed 90%” statements and Solo.io “90% or more” claim. |
| 11 | Added §: Roadmap 2025–2026 | New section documenting Istio 1.27 (multicluster Alpha, August 2025), 1.28 (multicluster L7 policies, nftables, November 2025), 1.29 (multicluster Beta, HBONE baggage headers, February 2026), 1.30 (four CVEs, TrafficExtension Alpha, agentgateway experimental, May 2026), and KubeCon EU 2026 announcements. All sourced from official Istio blog posts and CNCF press releases. |
| 12 | Migration checklist | Added concrete pre-migration checklist covering EnvoyFilter audit, CNI compatibility, VirtualService migration, and NetworkPolicy port 15008. |
Related InstaTunnel pages
Continue from this article into the most relevant product guides and workflows.
Related Topics
Keep building with InstaTunnel
Read the docs for implementation details or compare plans before you ship.