Curious Pandas

Meshes, mTLS and invisible proof

A service mesh encrypts and measures traffic between services without touching their code, which also means you can't tell from the app whether it's working. Learn where the proof lives.

14 min+35 XP for finishing

Inside a cluster, services call each other constantly. By default that traffic is plain, unencrypted and unmeasured, and any pod can call any other. A service mesh puts a layer of infrastructure underneath every call. It gives you:

  • mTLS: every connection is encrypted, and both sides prove who they are with certificates the mesh issues and rotates. No application code changes.
  • Telemetry: who called whom, how often, and how fast.
  • Policy: rules like “only the frontend may call the payments service”.

The tilt platform runs Istio in ambient mode. Istio’s original sidecar mode, which it still supports, injects a proxy into every pod. Ambient mode uses a shared per-node proxy called ztunnel for encryption and connection-level telemetry, and optional waypoint proxies for request-level features such as HTTP routing and request counts. Lab 06 adds a waypoint for exactly that reason: ztunnel encrypts and forwards traffic but doesn’t count requests.

The catch: it’s invisible

Because the app doesn’t change, the app can’t tell you whether it’s in the mesh. When the tilt platform was first built, zero namespaces carried the label that enrolls workloads. ztunnel ran on every node and every check was green, and not one workload was in the mesh. Kiali’s mesh view was the only thing that showed it.

Configured-but-inert is worse than absent, because it reads as protection.

How you join, and how you prove it

You enroll a namespace by labelling it istio.io/dataplane-mode=ambient. The proof is on the pod, not the namespace:

kubectl -n hello get pod -l app.kubernetes.io/name=hello \
  -o jsonpath='{.items[0].metadata.annotations.ambient\.istio\.io/redirection}'
#   enabled   -> traffic is captured by ztunnel
#   (empty)   -> not in the mesh
Check yourself+10 XP

Your app works exactly the same with and without the mesh. How do you prove a pod is in the ambient mesh?

Check yourself+10 XP

What does mTLS add over ordinary TLS?

Check yourself+10 XP

In ambient mode, which component would you add to get per-request metrics such as HTTP success rate?

Do it for real · your machine+50 XP bonus

Everything above ran in your browser. Now do it on a real cluster with tilt lab 03-join-the-mesh (profile observability). You need Docker, kind and Tilt, about 15 GB of free disk and 8 GB of spare RAM. Setup guide · Can my machine run it?

# Kiali: https://kiali.localhost -> Overview, note "Data planes (N)"
kubectl label ns hello istio.io/dataplane-mode-          # leave the mesh
kubectl -n hello rollout restart deploy/hello
kubectl -n hello get pod -l app.kubernetes.io/name=hello -o jsonpath='{.items[0].metadata.annotations.ambient\.istio\.io/redirection}'
kubectl label ns hello istio.io/dataplane-mode=ambient --overwrite
kubectl -n hello rollout restart deploy/hello
./scripts/platform.sh lab 03
Self-reported. We can't see your machine, and we don't want to. This is a bonus, never required.

Sources

Finished reading?

Missions and quizzes above earn their own XP. This marks the lesson done.