Before you begin
Before migrating from sidecar to ambient mode, verify that your environment meets the requirements and create a backup of your current configuration.
Background: how policy enforcement changes
Understanding the key differences between sidecar and ambient policy enforcement will help you understand the migration steps and anticipate where changes are needed.
In sidecar mode:
- Policies use a
selectorto target pods by label. - The destination sidecar proxy enforces both L4 and L7 policies.
- A single
AuthorizationPolicycan match on source principal, HTTP method, path, or header and be enforced at the destination pod.
In ambient mode:
- L4 enforcement is handled by ztunnel, which runs on every node.
- L7 enforcement requires a waypoint proxy deployed per namespace or service.
- Policies enforced by a waypoint must use
targetRefspointing to aServiceorGateway, not a podselector. You cannot reuse selector based L7 policies as is. VirtualServiceis Alpha in ambient mode. Migrating toHTTPRouteis required for stable L7 traffic management.
Requirements
- A supported Istio release
- Kubernetes supported version (1.31, 1.32, 1.33, 1.34, 1.35)
- Gateway API CRDs installed (required for waypoint proxies)
If you do not yet have the Gateway API CRDs installed, install them now:
Note that the Kubernetes Gateway API CRDs do not come installed by default on most Kubernetes clusters, so make sure they are installed before using the Gateway API:
$ kubectl get crd gateways.gateway.networking.k8s.io &> /dev/null || \
kubectl apply --server-side -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.4.0/experimental-install.yamlVerify your current installation
Run the following commands to confirm the state of your existing sidecar installation:
$ istioctl version
$ kubectl get pods -n istio-system
$ kubectl get namespaces -l istio-injection=enabledCheck for any revision-based installations (if you use istio.io/rev labels rather than
istio-injection):
$ kubectl get namespaces -l 'istio.io/rev'Audit existing resources
List the Istio resources in use across your cluster:
$ kubectl get virtualservice,destinationrule,authorizationpolicy,requestauthentication,peerauthentication,envoyfilter,wasmplugin -ACheck which AuthorizationPolicy resources contain L7 rules. These will require waypoint
proxies to function in ambient mode:
$ kubectl get authorizationpolicy -A --no-headers | while read ns name rest; do
if kubectl get authorizationpolicy "$name" -n "$ns" -o yaml | grep -qE "(methods:|paths:|headers:|action: CUSTOM|action: AUDIT)"; then
echo "$ns/$name"
fi
doneCheck for PeerAuthentication resources with mode: DISABLE, these are not compatible
with ambient mode:
$ kubectl get peerauthentication -A -o yaml | grep -A2 "mtls:"Any PeerAuthentication with mode: DISABLE must be removed or changed before migration,
as ambient mode always enforces mTLS between mesh workloads.
PeerAuthentication resources with mode: STRICT or mode: PERMISSIVE are not blockers,
but they become redundant after migration: ambient mode enforces mTLS via ztunnel regardless
of these policies. You can safely remove them after migration is complete.
Back up your configuration
Before making any changes, export your current Istio configuration:
$ kubectl get virtualservice,destinationrule,authorizationpolicy,requestauthentication,peerauthentication,gateway,httproute,telemetry -A -o yaml > istio-config-backup.yaml
$ kubectl get namespaces -o yaml > namespace-backup.yamlStore these backups somewhere safe outside the cluster.
Set up traffic monitoring (optional)
Use Kiali or another observability tool to capture a baseline of your current traffic patterns before making changes. See Kiali for setup instructions.
Next steps
Proceed to Install ambient components.