The Switch Nobody Wants to Flip First

“mTLS is enabled”, says the team. When asked, it turns out the mesh default has been on PERMISSIVE since the rollout. That is not enabled. That is a maybe.

Date
Topic
mTLS
Sources
3
Reading time
2 min
Version
Translation

Read the German original

PERMISSIVE means: the sidecar accepts mTLS, but also plaintext. As a migration state, that is exactly right, nobody wants to tear down half the landscape during the rollout. As a permanent state, it means encryption “most of the time”. Nobody knows how much plaintext is still in transit. Report #1 sends its regards: secure by gut feeling.

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

Staged path from PERMISSIVE to STRICT: the starting state allows mTLS and plaintext in parallel, the plaintext share is unknown, then STRICT is enforced first per namespace and finally mesh-wide. Before each stage sits a measurement gate built on istio_requests_total with the connection_security_policy label, below it the rollback path back to PERMISSIVE as a single apply.

The path to STRICT is not a leap of faith but a measurement.

Observe first: istio_requests_total carries the connection_security_policy label. One query, and you see which connections are still running without mutual_tls. The same telemetry as in report #9, this time as a migration radar.

Then tighten in stages: PeerAuthentication with mode: STRICT, first per workload or namespace, wherever the metric shows zero plaintext. If a legacy client is still hanging on after all, it surfaces individually instead of in one big bang. The mesh-wide switch comes last, once the remaining list is empty. And the rollback path is named before anyone flips a switch: the PeerAuthentication back to PERMISSIVE, one apply, no redeploy.

For decision makers, the difference is bigger than it sounds. “Encryption is configured” is a statement of intent. “Plaintext is technically impossible, here is the metric” is proof. An auditor asks for exactly the second sentence.

Anyone who stops at PERMISSIVE has never unpacked the moving boxes and calls the apartment furnished.

Even so, one issue remains open after that: mTLS cleanly answers WHO is talking. It does not say a word about who is ALLOWED to talk. More on that next week.

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.