# Cilium mTLS Encryption Arrives in Azure Kubernetes Service

- Link: https://thestackobserver.com/cilium-mtls-encryption-arrives-in-azure-kubernetes-service/
- Published: 2026-03-25T09:25:42-04:00
- Author: Stackxx

## Workload-Level Security Without the Service Mesh Tax

Microsoft and Isovalent announced the public preview of Cilium-based mutual TLS 
encryption for Azure Kubernetes Service this week, offering a middle path between
node-level encryption and full service meshes. The feature runs directly in the 
Azure CNI dataplane—no sidecars required, no application changes needed, and no 
additional control plane to manage.

This release represents the culmination of a close engineering collaboration between
Microsoft and Isovalent, which Cisco acquired in 2024. It brings transparent, workload-
level encryption to AKS customers who need cryptographic proof of identity without
the operational complexity of traditional service meshes.

## The Encryption Dilemma

Kubernetes teams historically faced a binary choice for in-transit encryption:

**Node-level encryption** using WireGuard, VXLAN, or virtual network encryption 
secures traffic between nodes but cannot authenticate individual workloads. Any 
pod on an encrypted node can talk to any other pod. This satisfies compliance requirements
for data-in-transit protection but fails to implement zero-trust principles. If 
an attacker compromises a node, they gain access to all traffic on that node.

**Service meshes** provide strong identity and mTLS but introduce operational complexity:
sidecar resources that increase memory and CPU usage, upgrade coordination across
the cluster, configuration sprawl, and debugging challenges when traffic flows break.
For many teams, the security benefits do not justify the operational overhead.

Cilium mTLS splits the difference. It delivers workload-level authentication and
encryption without a separate control plane or sidecar containers. This is encryption
as a dataplane feature, not as an add-on service.

## How It Works

The architecture uses three components working together transparently:

**Cilium Agent**: Runs on each node and enrolls pods in mTLS. When you label a namespace
with io.cilium/mtls-enabled=true, the agent enters each pod’s network namespace 
and installs iptables rules redirecting outbound traffic to a local proxy. It also
passes workload metadata—pod IP and namespace context—to the tunnel component.

**Ztunnel**: A lightweight, per-node Layer 4 proxy originally created by Istio and
contributed to the open-source ecosystem. On the source node, Ztunnel looks up the
destination workload via XDS streamed from the Cilium agent and establishes mutually
authenticated TLS 1.3 sessions between source and destination nodes. Connections
hold inline until authentication completes, ensuring traffic is never sent in plaintext.

The destination Ztunnel decrypts traffic and delivers it into the target pod, bypassing
interception rules via an in-pod mark. The application sees a normal plaintext connection—
completely unaware that encryption occurred.

**SPIRE**: The SPIFFE Runtime Environment acts as the cluster Certificate Authority,
issuing short-lived X.509 certificates called SVIDs that are automatically rotated
every hour. Identity derives from Kubernetes namespace and ServiceAccount—not IP
addresses. This decouples trust from network topology.

## The Trust Model

SPIRE-issued certificates bind identity to Kubernetes namespace and ServiceAccount.
This decouples trust from network topology entirely. A pod reschedules, its identity
follows. The certificate rotates automatically. Authentication succeeds regardless
of which node the pod lands on.

The result is zero-trust networking aligned with Kubernetes RBAC boundaries. Trust
decisions align naturally with how Kubernetes already organizes workloads. This 
enables a zero-trust networking model that fits cleanly into existing AKS security
practices without requiring new abstractions.

## Traffic Flow

When a pod initiates a TCP connection:

 * iptables rules redirect traffic to the local Ztunnel
 * Ztunnel retrieves the workload identity using certificates issued by SPIRE
 * Ztunnel establishes a mutually authenticated TLS session with the destination
   node’s Ztunnel
 * Traffic is encrypted and sent between pods
 * The destination Ztunnel decrypts traffic and delivers it to the target pod
 * Every packet from an enrolled pod is encrypted with no plaintext window

Every packet from an enrolled pod is encrypted. There is no plaintext window and
no dropped first packets. The connection holds inline by Ztunnel until the mTLS 
tunnel is established, then traffic flows bidirectionally through an HBONE (HTTP/
2 CONNECT) tunnel.

## Opt-In by Namespace

Adoption is gradual and non-breaking. Platform teams enable mTLS by applying a single
label to a namespace:

    ```wp-block-code
    kubectl label namespace production io.cilium/mtls-enabled=true
    ```

From that point, all pods in the namespace participate in mTLS. Traffic to non-enrolled
namespaces continues in plaintext. No connectivity failures. No hard cutovers. This
model enables gradual rollout, staged migrations, and low-risk adoption across environments.

Encryption applies only when both pods are enrolled. Traffic between enrolled and
non-enrolled workloads continues in plaintext without causing connectivity issues
or hard failures.

## Prerequisites and Setup

Cilium mTLS requires Azure CNI powered by Cilium and Advanced Container Networking
Services enabled. Enable when creating a new cluster or on an existing cluster by
updating the Advanced Container Networking Services configuration.

## Use Cases

Cilium mTLS fits when you need workload-level encryption for compliance requirements
like PCI-DSS, HIPAA, or SOC 2. It works when service mesh overhead exceeds your 
operational budget and you want encryption without application changes. The gradual
migration model supports environments where hard cutovers would be unacceptable.

However, it does not replace service meshes for Layer 7 traffic management including
retries, circuit breakers, and timeouts. It does not provide observability requiring
HTTP-level visibility. And it does not handle multi-cluster service discovery.

## The Bigger Picture

This release reflects a broader trend: eBPF-based networking absorbing security 
functions previously handled by sidecars or external appliances. Cisco’s acquisition
of Isovalent signaled this direction. Microsoft’s integration of that work into 
AKS confirms it.

For platform teams, it means fewer moving parts. For security teams, it means transparent
encryption with cryptographic proof of workload identity. For application teams,
it means nothing changes in their code or configuration.

## Sources

 * [Announcing Cilium mTLS Encryption for AKS – Microsoft Tech Community](https://techcommunity.microsoft.com/blog/azurenetworkingblog/announcing-public-preview-cilium-mtls-encryption-for-azure-kubernetes-service/4504423/)
 * [Cilium Project Documentation](https://cilium.io/)
 * [SPIFFE and SPIRE](https://spiffe.io/)
