Skip to main content
This guide walks through installing Istio in ambient mode using the CLI, verifying dataplane behavior (ztunnel and CNI), labeling namespaces for ambient dataplane mode, running a test pod to confirm layer‑4 interception, and optionally deploying a waypoint proxy for layer‑7 features.
Ambient mode removes the sidecar proxy from workloads and uses a host‑level daemon (ztunnel) plus the Istio CNI for transparent L4 interception. Use waypoint proxies when you need layer‑7 features (HTTP routing, mirroring, fault injection).

1 — Download Istio and add istioctl to PATH

Download the desired Istio version (example uses 1.26.3) and add the bin folder to your PATH:
Verify the client version (before install the cluster will not show control plane pods):

2 — Install Istio using the ambient profile

Install Istio with the ambient profile:
Wait for the control plane components to become ready.

3 — Verify Istio system pods and daemonsets

Check pods in istio-system — ambient mode shows ztunnel and istio-cni-node:
Check daemonsets (notice ztunnel and istio-cni-node run as DaemonSets):
  • ztunnel: handles L4 traffic interception for workloads in ambient mode.
  • istio-cni-node: handles CNI and iptables conversions so workloads are transparently routed.

4 — Namespace labeling for ambient dataplane mode

In sidecar mode you’d label namespaces with istio-injection=enabled. For ambient mode, label namespaces with istio.io/dataplane-mode=ambient. Check current namespace labels:
istioctl analyze may still report injection info targeted at sidecar mode:
Label the default namespace for ambient dataplane mode:
Verify the label:

5 — Run a test workload and confirm traffic is intercepted by ztunnel

Create a simple test pod (NGINX image used here):
Since ambient mode does not use a sidecar, the pod shows 1/1. ztunnel intercepts the host‑level L4 traffic. Tail ztunnel logs to observe intercepted connections:
From the test pod, execute a simple curl to an external site to generate outbound traffic:
You should see corresponding access connection complete entries in the ztunnel logs. This confirms L4 interception and basic outbound connectivity through ztunnel.
Ambient mode provides transparent L4 interception out of the box. For L7 features (HTTP routing, mirroring, fault injection) you must deploy waypoint proxies and use Kubernetes Gateway API resources (e.g., HTTPRoute). These are distinct from Istio sidecar VirtualServices and require additional CRDs and configuration.

6 — Install Kubernetes Gateway API CRDs (required for waypoint + HTTPRoute)

Install the Gateway API CRDs (example uses Gateway API v1.3.0 standard install):
Verify CRDs (partial list):

7 — Apply a waypoint proxy for layer‑7 capabilities (optional)

Create a waypoint in the namespace to enable an Envoy proxy as an entry point for L7 traffic:
Check pods: a waypoint Deployment will create a pod:
Confirm the waypoint is created as a Deployment:
Use waypoint proxies when you need the L7 features (HTTPRoute, mirroring, fault injection) — note these use Gateway API resources like HTTPRoute, which are Kubernetes-native and not Istio VirtualServices.

8 — Remove waypoint proxy (if desired)

To delete all waypoint resources in a namespace:

Quick reference — Commands summary

What to expect and exam note

  • Ambient mode: uses ztunnel (daemon) + istio-cni to transparently intercept L4 traffic. Workloads do not show a sidecar container.
  • Waypoint proxy: required for advanced L7 features. It relies on the Kubernetes Gateway API (Gateway, HTTPRoute) rather than Istio VirtualServices.
  • If you’re preparing for the ICA/field exam: you typically only need to know how to install ambient mode and label namespaces to enable dataplane interception (L4). Deep waypoint or HTTPRoute configuration is usually out of scope.

References

That’s the end of the demo — you should now have a working Istio ambient installation, observe L4 traffic handled by ztunnel, and understand when to use waypoint proxies for L7 features.

Watch Video

Practice Lab