Skip to main content

Free O’Reilly Book | Linkerd: Up & Running

Download
close
Security · Kubernetes

Zero Trust Network Security for Kubernetes

Automatically secure all service-to-service communication with cryptographic identities, mutual TLS encryption, and deny-by-default authorization policies all without changing code.

Why your cross-zone bill is so high?

Cloud providers bill for traffic that crosses an availability-zone boundary, charged in each direction. Kubernetes spreads traffic as evenly as it can across pods, so in a typical 3-zone cluster about two-thirds of your traffic crosses a zone boundary and gets billed for it.

$100K–$1M+

Annual cross-zone charges at 1 GB/s on AWS (high-traffic cluster)

≈ 0

Cross-zone cost on Azure — in-zone routing highest-value on AWS & GCP

Why a pod IP is not an identity

Zero trust moves security off the network perimeter and onto the workloads themselves. The US National Institute of Standards and Technology defines it in SP 800-207 as a model that grants "no implicit trust to assets or user accounts based solely on their physical or network location. In a dynamic environment like Kubernetes, pod IP addresses change constantly as containers scale up, crash, or migrate across servers, making them temporary and disposable. Relying on an IP for security means your firewall rules are always trying to hit a moving target, which inevitably leads to gaps where a new, unverified pod inherits an old IP's permissions.

Linkerd solves this by ignoring the unpredictable IP entirely and instead issuing an unforgeable, cryptographic ID badge (like a digital passport) tied directly to the service's actual role. In short, IPs only tell you where traffic is coming from in the moment, but Linkerd and BEL verify exactly who is calling, allowing you to enforce permanent, unhackable security rules.

A routing detail you can spoof

Every byte that crosses a zone boundary gets billed twice, once leaving, once arriving.

Every byte that crosses a zone boundary gets billed twice, once leaving, once arriving.

0

lines of application code to change

24h

auto-rotated identity cert per pod

<10MB

proxy footprint, sub-ms p99 overhead

Proxy footprint and latency from the 2025 Linkerd vs. Ambient Mesh benchmarks. Read the full analysis →

What you get with Linkerd Zero Trust security

With Linkerd, you get automated zero trust security for Kubernetes through zero-configuration mTLS that encrypts, authenticates, and enforces strict identity-based access controls across all meshed communication.

mTLS on by default

Every TCP connection between meshed pods is mutually authenticated and encrypted, with zero configuration.

Certificate

Identity from your ServiceAccounts

Per-pod certificates, auto-rotated every 24 hours, derived from a primitive you already run.

Deny-by-default, enforced per pod

Authorization policy as Kubernetes CRDs, enforced in each pod's own proxy, so the network is never trusted stopping lateral movement by blocking all internal traffic unless an explicit permission exists.

A Memory-Safe, CVE-resistant architecture

Linkerd's ultra-light proxy data plane is built entirely in Rust. Rust enforces strict bounds that prevent memory corruption and buffer overflow exploits, saving you from more points of vulnerability

Checkmark

Simplified auditing

Encryption and authorization are applied transparently at the platform layer. Enabling compliance teams to verify network protection without interrupting developer timelines or altering a single line of application code.

How it works

Buoyant Enterprise for Linkerd (BEL) treats every meshed pod as untrusted until it proves who it is. The control plane issues each pod a short-lived identity certificate bound to its Kubernetes ServiceAccount. Every connection between meshed pods is mutually authenticated and encrypted; and authorization policy decides which identities may reach which services that are enforced in each pod's own proxy.

Perimeter security vs. zero trust security
perimeter security zero trust security
!
Breach grants internal access
Evildoer
!
Once inside the perimeter, the attacker can move laterally and access internal resources.

Zone-aware load balancing with HAZL

Under normal load HAZL keeps requests in-zone; when the in-zone endpoint is overloaded or returning errors, it spills to another zone, then returns in-zone as load recovers.

What a mesh covers, and what it doesn't

A mesh isn't the whole story. The mesh covers service-to-service encryption and authorization inside the cluster. You still need L3/L4 network policy at the CNI layer, ingress and egress controls, event logging, and supply-chain security.

What it doesn't cover

✗  Traffic to/from non-meshed workloads

✗  Health checks that bypass the proxy

✗  L3/L4 network policy (CNI layer)

✗  Ingress and egress boundary

✓  mTLS for all meshed traffic

✓  ServiceAccount-based identity

✓  AuthorizationPolicy (deny-by-default)

✓  Community support

What it covers

✓  mTLS for every east-west connection

✓  Cryptographic identity per ServiceAccount

✓  Deny-by-default authorization policy

✓  FIPS 140-validated encryption (BEL)

✓  Authorization-policy generation from live traffic

✓  Trust-anchor rotation (BEL 2.20 operator)

✓  Lifecycle automation

✓  Hardened releases + CVE-response path

Why Linkerd for zero trust

1

mTLS on by default, with zero config

Linkerd eliminates the risk of human error by automatically establishing end-to-end mTLS for all internal container traffic the moment its proxy sidecar is injected. This guarantees that all service-to-service data is encrypted and bidirectionally authenticated in transit, without requiring engineers to touch a single line of application code or hand-roll a certificate authority.

Read the docs ↗

2

Workload identity you don't have to invent

Each proxy gets a certificate bound to the pod's ServiceAccount, expiring after 24 hours and auto-rotated, with the private key generated in-memory and never leaving the pod. The riskiest piece is rotating the shared trust anchor at the root; Buoyant Enterprise for Linkerd 2.20 adds an operator that automates that rotation with guardrails.

Read the docs ↗

3

Deny-by-default authorization, per pod

Moving to a default-deny posture via native Custom Resource Definitions (Server, AuthorizationPolicy) enforces strict isolation inside the cluster. A compromise of one public-facing container cannot pivot laterally to a sensitive backend unless an explicit policy explicitly bridges them.

Read the docs ↗

4

Roll out policy without breaking prod

Linkerd removes the risk of production outages by providing an audit mode that simulates default-deny rules and logs violations without actually blocking live application traffic. BEL goes a step further by automatically profiling real-world traffic to generate and maintain your starter security policies, removing the guesswork from enforcing a Zero Trust architecture

Read the docs ↗

Show me the evidence

See why companies rely on Linkerd to protect their most sensitive workloads.

Petabytes secured, pod by pod

Mezmo secures petabytes of data monthly with Linkerd. Identity comes from Kubernetes ServiceAccounts, encryption uses Rustls, and enforcement is per pod.

Zero trust, federal-grade, day one

IntelliGRC automated mTLS and identity attestation across their clusters without touching application code — and speed-ran their FedRAMP compliance timeline in the process.

CNCF-graduated

Buoyant created Linkerd, coined the term "service mesh," and shipped the service mesh in July 28, 2021.

Frequently asked questions

What is zero trust?

A model that assumes no user, device, or workload is trusted by network location, and verifies identity and authorization on every request. See NIST SP 800-207.

Does mTLS require code changes?

No. It's applied by the injected proxy to traffic between meshed pods, with no application changes.

Where does workload identity come from?

From the pod's Kubernetes ServiceAccount, issued as a short-lived, auto-rotated certificate.

Is this open-source Linkerd or BEL?

The mTLS and policy mechanisms are open source. Policy generation, FIPS builds, and supported releases are BEL.