Skip to main content

Migrating from Istio Sidecar to Ambient Mode: What Actually Changes in Production

5 min read
Migrating from Istio Sidecar to Ambient Mode: What Actually Changes in ProductionDevOps

Most teams adopt Istio when service-to-service communication becomes harder to manage with Kubernetes primitives alone. As platforms grow, they need consistent mTLS, traffic policy, authorization, retries, observability, and controlled communication between services.

Istio solves most of those problems. But the traditional sidecar model carries an operational cost. Every application pod runs an Envoy proxy. Every workload rollout has to account for mesh behavior. Platform teams manage sidecar injection, proxy resources, telemetry labels, and the side effects of one proxy per pod. For large platforms, that overhead shows up in memory usage, rollout complexity, debugging paths, and developer experience.

That is why Istio ambient mode matters. Istio 1.24 marked ambient mode as generally available, with ztunnel, waypoints, and ambient APIs promoted to Stable for production use.

Migrating from Istio sidecar to ambient mode changes far more than the proxy. The Istio ambient mode migration moves where traffic is intercepted, where policy is enforced, how telemetry is produced, how resources are consumed, and how teams reason about Kubernetes service mesh ownership. This guide covers what actually changes in production: the architecture difference, when migration makes sense, what breaks, and how to approach the move without treating ambient mode as a drop-in switch.

Istio Ambient vs Sidecar: What the Architecture Actually Looks Like

In traditional Istio sidecar mode, an Envoy proxy runs next to every application pod. Each sidecar handles traffic interception, mTLS, identity, traffic policy, telemetry, routing, retries, and other mesh behavior for that specific workload.

Ambient mode separates those responsibilities into two layers.

At the base layer, ztunnel runs as a node-level DaemonSet. It handles the secure Layer 4 overlay: routing and zero-trust mTLS for all traffic between ambient-enabled workloads. Above that, waypoint proxy Istio instances can be deployed at namespace or service boundaries when workloads need Layer 7 behavior: HTTP routing, retries, JWT validation, and route-aware authorization.

The Kubernetes service mesh dataplane changes from one Envoy proxy per pod to shared infrastructure at the node and namespace level. Application pods stop carrying mesh state. Deployment specs stop changing because of sidecar injection. Mesh functionality moves to the platform layer.

For platform teams, that changes the operating model:

  • Mesh adoption becomes less invasive for application teams
  • Workload restarts for proxy injection are no longer part of every mesh change
  • Resource cost shifts from per-pod sidecars to ztunnel DaemonSets and optional waypoints
  • Mesh behavior is governed by namespace and service labels rather than pod annotations

Ambient mode does not make the mesh cost disappear. It moves the cost and complexity to different places.

Istio is used in production by companies like Airbnb, Intuit, eBay, and Salesforce. As platforms at that scale grow, the per-pod sidecar cost becomes one of the main arguments for evaluating ambient mode.

When Istio Ambient Mode Migration Makes Sense

Ambient mode is a strong fit when Istio sidecar overhead creates operational drag: extra memory per pod, slow rollouts, injection failures, sidecar lifecycle issues, and restarts just to change mesh behavior.

It is the right default for new clusters and greenfield services that need Istio mTLS, identity, and policy without heavy per-pod Envoy customization.

It also fits multi-tenant Kubernetes environments with clear namespace boundaries. Because waypoints are introduced at namespace or service scope, platform teams can provide a mesh foundation while application teams opt into Layer 7 features only where they need them.

Migration is not always the right move immediately. Waiting makes sense when:

  • The current sidecar setup depends on advanced Layer 7 behavior at the pod level
  • Custom Envoy configuration or complex AuthorizationPolicy patterns do not map cleanly to waypoint placement
  • Multi-cluster routing is already complex and needs parity validation

Istio's 2025 to 2026 roadmap focuses on improving feature parity between sidecar and ambient mode, including a supported migration path for existing sidecar deployments. That direction is clear. But production teams should validate multicluster behavior, rollback paths, and reliability requirements against their own environment before moving.

Layer 4 is the cleanest part of the Istio ambient mode migration. Layer 7 is where most production questions appear.

Istio Ambient Mode Migration Path: Namespace by Namespace

The safest Istio ambient mode migration pattern is incremental, not a big-bang replacement. Istio supports a hybrid phase where sidecar and ambient workloads coexist in the same cluster, giving teams time to validate behavior namespace by namespace.

A practical migration flow:

1. Install ambient support:

bash
istioctl install --set profile=ambient

2. Label a staging namespace for ambient mode:

bash
kubectl label namespace staging istio.io/dataplane-mode=ambient

3. Remove the old sidecar injection label if present:

bash
kubectl label namespace staging istio-injection-

4. Restart workloads so they come back without sidecars:

bash
kubectl rollout restart deployment -n staging

5. Verify pods no longer carry sidecars:

bash
kubectl get pods -n staging -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.containers[*].name}{"\n"}{end}'

6. Check ztunnel activity:

bash
kubectl logs -n istio-system -l app=ztunnel

7. Add a waypoint if Layer 7 features are required:

bash
istioctl waypoint apply -n staging

During the hybrid phase, validate behavior, not just pod shape. Confirm mTLS, authorization policy enforcement, service-to-service traffic, ingress paths, telemetry, Prometheus labels, dashboards, and alerting before moving additional namespaces.

This is where the Istio migration touches broader platform engineering decisions. Ambient mode is not only an Istio configuration change: it affects rollout safety, networking assumptions, namespace ownership, Istio observability, and incident response.

For teams where Prometheus is the observability layer, the ambient migration also changes how mesh telemetry is scraped. The Prometheus Kubernetes monitoring setup that worked against sidecar metrics needs to be reviewed before cutover.

What Breaks When You Move from Istio Sidecar to Ambient Mode

Blog post image

The biggest migration risk is assuming that removing sidecars means the same behavior with less overhead. Some behavior moves cleanly. Some needs redesign.

EnvoyFilter is not supported in ambient mode. Istio's ambient Layer 7 documentation confirms that EnvoyFilter is not supported with waypoint proxies and is actively discouraged by maintainers. If your sidecar setup uses EnvoyFilter for routing, header manipulation, telemetry, protocol handling, or proxy extensions, audit every instance before migrating.

Policy placement changes. In sidecar mode, each workload has a local Envoy proxy that enforces both Layer 4 and Layer 7 policy. In ambient mode, ztunnel handles Layer 4, and Layer 7 behavior requires a waypoint proxy Istio configuration. Istio's waypoint documentation states that policies in ambient mode are enforced by the destination waypoint, which acts as a gateway to the namespace, service, or pod. Traffic must pass through the waypoint for those policies to apply.

CNI and traffic interception must be validated. Ambient mode depends on traffic redirection at the node or pod networking layer. Production teams should test their exact CNI plugin, Kubernetes version, node image, security policies, and network policy model before any rollout. This is not optional. CNI compatibility is a hard dependency.

Deployment and CI/CD assumptions break silently. PodSecurity policies, admission controllers, RBAC, policy-as-code tools, and CI/CD checks may assume sidecar injection, sidecar annotations, or proxy containers in every meshed pod. These checks need updating before or alongside the migration.

Third-party tooling loses its signals. Observability platforms, service catalogs, policy scanners, and internal dashboards that identify mesh membership by looking for sidecar annotations or Envoy containers will stop working correctly. The mesh can work while the ecosystem around the mesh breaks.

Istio Observability in Ambient Mode: What Changes

Istio observability is where many teams feel the migration most sharply.

In sidecar mode, every workload has an Envoy proxy producing telemetry from the pod boundary. Dashboards, alerts, and distributed tracing assumptions are built on those sidecar metrics and labels.

In ambient mode, ztunnel exposes metrics for the Layer 4 plane. Waypoint proxies produce Layer 7 telemetry for workloads routed through them. The data exists, but the source, label model, and granularity change.

Specific things to audit before migration:

Telemetry DependencyWhat Changes
Dashboards filtering by Envoy container or sidecar labelsMay need to be rebuilt around ztunnel and waypoint metric sources
Alerts using proxy-specific metric dimensionsLabels change, so alert queries need updating
Service graphs built on sidecar telemetryGraph topology changes if some services have no waypoint
Distributed traces from HTTP spans at every pod boundaryL7 tracing only where waypoints are deployed
Workloads with L7 telemetry requirementsNeed explicit waypoint placement to retain visibility

Distributed tracing requires special attention. Sidecars automatically generated HTTP spans at each workload boundary. In ambient mode, Layer 7 tracing depends on waypoint participation. If a service does not have a waypoint, you cannot assume the same HTTP-level trace visibility you had through sidecars. The telemetry contract itself changes, so plan waypoint placement before cutover rather than patching dashboards afterward.

Istio Ambient Mode Resource and Latency Reality

Ambient mode can reduce resource usage, but savings are not uniform across every cluster.

In sidecar mode, every application pod pays the sidecar cost. At hundreds or thousands of pods, that overhead becomes significant in memory, CPU, rollout time, and operational complexity.

In ambient mode, the baseline cost moves to ztunnel as a DaemonSet plus waypoint proxies where Layer 7 is needed. That model is more cost-effective at scale, because the mesh stops adding a full Envoy instance to every pod.

Cluster PatternAmbient Cost Impact
Few pods per nodeModest savings; ztunnel fixed cost can offset sidecar removal
Many pods per nodeMemory savings become significant
Heavy L4 security requirementsStrong fit; ztunnel handles this efficiently
Heavy per-service L7 behaviorWaypoint design determines resource profile
Large existing sidecar estateStrong migration candidate at scale

Latency deserves honest treatment. Istio's performance documentation notes that sidecar mode routes requests through client and server sidecars, while ambient mode routes through client and server node ztunnels, with waypoints added when configured. For most internal service traffic, the difference is small enough that reliability, policy clarity, and operability matter more than micro-benchmark differences. Latency-sensitive workloads should be tested explicitly, not assumed safe.

Ambient is not automatically cheaper at every scale. Its real effect is on the unit economics of the mesh: the more pods you run and the less you depend on per-pod Layer 7 customization, the stronger the case.

In-Place Migration vs Parallel Cluster: How to Decide

There are two valid approaches to moving a production Kubernetes service mesh to ambient mode.

FactorIn-Place MigrationParallel Cluster
Mesh policy stateClean and documentedAccumulated or unclear
EnvoyFilter usageNone or minimalHeavy
Observability couplingMaintainableTightly coupled to sidecar metrics
Namespace ownershipWell-definedInconsistent
Multi-cluster routingStraightforwardAlready complex
Rollback confidenceHighLow
Team trust in current meshStrongLow

In-place migration is appropriate when the sidecar estate is consistent, policies are understandable, dashboards and alerts can be maintained, and teams can validate namespace by namespace with clear rollback paths.

A parallel cluster is safer when the sidecar mesh carries years of accumulated policy, heavy EnvoyFilter usage, unclear namespace ownership, brittle observability, or undocumented traffic behavior. In that case, ambient mode is an opportunity to rebuild the mesh model rather than carry every legacy assumption forward.

For critical platforms, a fresh ambient-enabled cluster with controlled traffic migration is often lower risk than untangling a heavily customized sidecar mesh in place.

Planning an Istio Service Mesh Migration Without Surprises

A successful Istio migration to ambient mode is one where application teams barely notice the change and the platform team has verified every assumption behind it.

The work starts before any namespace labels change.

Audit the current sidecar estate. List every namespace, injection label, AuthorizationPolicy, PeerAuthentication, VirtualService, DestinationRule, EnvoyFilter, telemetry dependency, ingress path, egress rule, dashboard, alert, and third-party integration that touches the mesh.

Classify workloads by migration readiness:

Workload TypeDefinitionPath
L4-only candidatesNeed mTLS and identity onlyMove to ambient immediately
L7 waypoint candidatesNeed HTTP routing, retries, JWT authMove to ambient with waypoint
Sidecar-retained workloadsHeavy EnvoyFilter or pod-level L7 policyKeep on sidecar temporarily
Workloads needing redesignPolicy assumptions incompatible with ambientRedesign before moving
Later-phase workloadsDependencies on earlier migrationsQueue for a future phase

For teams with a mature sidecar estate, the install command is rarely the hard part. The work is deciding what should move, what should stay, where waypoint proxies belong, and which observability or policy contracts need rebuilding before migration.

For new clusters, ambient mode is the model worth evaluating first. For existing sidecar environments, the right decision depends on policy complexity, telemetry dependencies, custom Envoy usage, multicluster requirements, and rollback safety.

Removing sidecars is the visible step. The real goal is a Kubernetes service mesh that is less invasive, easier to operate, and better matched to how the platform is actually run. Ambient mode provides that path. A good migration plan decides how much of it is safe to take now.

Procedure's platform engineering team has designed and migrated Kubernetes service mesh deployments across production environments. Follow our engineering work on LinkedIn.

If you are planning an Istio sidecar to ambient migration and want a design review before making changes to production, we can help.

Talk to our Istio consulting team →

Frequently Asked Questions

What is Istio ambient mode and how does it differ from sidecar mode?

Istio ambient mode replaces per-pod Envoy sidecar proxies with two shared infrastructure layers: ztunnel, a node-level DaemonSet that handles Layer 4 mTLS and routing, and optional waypoint proxies at namespace or service scope for Layer 7 features. In sidecar mode, each pod carries its own Envoy proxy that handles all mesh behavior locally. Ambient mode moves mesh infrastructure to the platform layer, making pods leaner and mesh adoption less invasive for application teams.

Is Istio ambient mode production-ready in 2026?

Yes. Istio 1.24, released in late 2024, marked ambient mode as generally available with ztunnel, waypoints, and ambient APIs promoted to Stable, and it has been production-ready since. Migrating an existing sidecar deployment to ambient still requires careful planning, particularly around EnvoyFilter usage, observability dependencies, CNI compatibility, and authorization policy placement.

Does EnvoyFilter work in Istio ambient mode?

No. EnvoyFilter is not supported with waypoint proxies in ambient mode and is explicitly discouraged by Istio maintainers. If your current sidecar setup depends on EnvoyFilter for routing, header manipulation, telemetry, or protocol handling, those configurations must be audited and redesigned before migrating to ambient mode.

What happens to distributed tracing when moving from sidecar to ambient mode?

In sidecar mode, Envoy proxies automatically generate HTTP spans at every pod boundary. In ambient mode, Layer 7 tracing only occurs where waypoint proxies are deployed. Services without waypoints will not produce the same HTTP-level trace visibility. Teams should audit which services rely on sidecar-generated traces and plan waypoint placement accordingly before migration.

How long does an Istio sidecar to ambient migration take?

There is no universal answer. It depends on the number of namespaces, the complexity of existing policy, EnvoyFilter usage, observability dependencies, and whether you choose in-place migration or a parallel cluster. A well-owned cluster with clean policies can move namespace by namespace over days to weeks. A cluster with heavy custom Envoy configuration or undocumented traffic behavior may require a parallel cluster rebuild. The audit phase, before any labels change, typically takes longer than the migration itself.

Should I migrate my existing Istio cluster or start with a new ambient-enabled cluster?

If your sidecar estate is clean, with documented policies, maintainable dashboards, minimal EnvoyFilter usage, and clear namespace ownership, in-place migration namespace by namespace is viable. If the current mesh has accumulated legacy policy, heavy custom Envoy config, or tightly coupled observability, a parallel cluster gives you the option to rebuild the mesh model correctly rather than carrying old assumptions forward. For critical production platforms, the parallel approach is usually the safer choice.

Procedure Team

Procedure Team

Engineering Team

Expert engineers building production AI systems.

Let's build

Ready to Build Production
AI Systems?

Our team has deployed AI systems serving billions of requests. Let’s talk about your engineering challenges and how we can help.

No obligation
30-minute call
Engineers, not sales