Two Components Share the Work of a Sidecar

A policy that looked harmless in review cuts connections in Ambient that it was meant to allow. The reason lies one layer down.

Date
Topic
Ambient
Sources
4
Reading time
2 min
Version
Translation

Read the German original

A sidecar does everything in one container: mTLS, routing, policies, telemetry. Ambient splits this package into two parts, in two places.

Graphic: OMNI52 Open the figure at full size
Figure as text

Data path in Ambient across two nodes: pods contain only the app, no proxy in the pod; on every node, ztunnel (a separate Rust proxy, not Envoy) runs for L4, meaning mTLS, identity and TCP forwarding, always. Next to it, the waypoint, an Envoy that only enters the path where L7 is needed: HTTP routing, L7 policy, L7 telemetry. Below, two boxes: the mental boundary runs between L4 and L7, the pod boundary is the wrong compass in Ambient; in the waypoint, the four questions from report #12 apply (listener, route, cluster, endpoint). Punchline: an L7 policy without a waypoint blocks, when in doubt, even the clients it was meant to let through.

Part one is called ztunnel and runs once per node. It takes over the L4 layer: mTLS between workloads, identity, TCP forwarding. And it is not an Envoy. ztunnel is a separate proxy, written in Rust and deliberately kept lean, because on every node it serves all the pods. The matrix from report #11 already listed it as an engine of its own.

Part two is the waypoint. That one is an Envoy, and it only enters the path where a workload really needs L7: HTTP routing, AuthorizationPolicies on methods and paths, L7 telemetry. No need for L7, no waypoint, no Envoy in the path.

And this is where the trap from the first paragraph lies. Without a waypoint, an AuthorizationPolicy with L7 rules, meaning methods or paths, ends up at ztunnel, and ztunnel cannot evaluate L7. Istio turns it into a DENY policy: the connection breaks off, even for clients with the right identity. In review, the rule looked harmless because the reviewer was thinking in terms of pod boundaries. In Ambient, the mental boundary runs between L4 and L7. The pod boundary, which sidecar teams have reasoned along for years, is the wrong compass for this.

If you have read report #12, you already know the waypoint: listener, route, cluster, endpoint, the same engine, the same debugging. Here too, Envoy knowledge simply moves with you.

For the bill, that means: you only pay for L7 where you need L7. In return, someone has to be able to answer clearly which workloads those are and which policies carry L7 rules. This inventory is the real Ambient homework, architecture work instead of relabeling.

An L7 policy without a waypoint blocks, when in doubt, even the clients it was meant to let through.

Next week brings the assessment this arc has been heading toward: why I still stay with sidecars for hard enterprise requirements.

About the author

Portrait of Uli Renz

Uli Renz has been building and hardening service meshes in highly regulated enterprise environments since Istio 1.4. The patterns in these reports come from that work.

If your mesh already runs in production, the Posture Check is the place to start: 13 review areas, each finding rated by severity and backed by evidence from the config. In 90 minutes we go through the list together.

Request a strategy call

The request form on istio-consulting.de is in German.