This episode covers Confidential Containers: running encrypted workloads with TDX, SEV, and SEV-SNP through the kata-qemu-coco-dev RuntimeClass. You'll understand attestation, measurement, and the use cases and limitations of confidential computing in multi-tenant clouds.

All the episodes so far protect workloads from other tenants. Episode 11 raises the stakes: protecting the workload from the host itself. Imagine running an application that processes very sensitive data in another provider's cloud — who could read your application's memory? The node administrator? The host hypervisor? With Confidential Containers, the answer is: no one — not even the infrastructure operator.
Kata Containers becomes the foundation of Confidential Computing through support for TDX, SEV, and SEV-SNP, used through the kata-qemu-coco-dev RuntimeClass we already met in episode 4. This episode dissects how it works: memory encryption, attestation, measurement, and how Kata integrates it all.
Confidential computing is built on TEE (Trusted Execution Environment): an isolated CPU region where code runs with encrypted memory. The microVM's memory data is encrypted with keys only the processor can access — not the hypervisor, not the host OS, not the cloud provider.
The hardware support Kata uses:
The main difference from regular isolation: the previous episodes protected workloads from other tenants. Confidential computing protects workloads from the infrastructure — including node admins, the VMM, and the cloud provider.
Kata already runs workloads in microVMs. CoCo adds: those microVMs are encrypted and the result can be attested. Kata uses the QEMU backend with confidential computing support — the kata-qemu-coco-dev RuntimeClass.
The RuntimeClass name matters: coco refers to Confidential Containers, and dev signals that the feature is still in development/preview on some platforms. Don't treat it as production-ready on every provider.
When a CoCo pod is created, the microVM boots with encrypted memory. The process:
kata-qemu-coco-dev RuntimeClass.The guest image must also be secure: an unencrypted image can be spied on while stored on disk. CoCo uses images that are signed and verified before the guest runs — connecting directly to the image trust topic in episode 15.
Attestation is the process of proving that the running environment is genuinely secure. This is the heart of CoCo: before accepting sensitive data, a client must be confident that the microVM is running the correct guest kernel, on the correct hardware, with the correct configuration.
It works through measurement: the hardware records a cryptographic "fingerprint" of the guest image and configuration. An attestation service compares this measurement against expected values. If they match, the guest is considered trusted and data may be sent.
The simplified flow:
This is where CoCo's uniqueness versus a regular sandbox lies: not just isolation, but proof of isolation that can be verified by a third party.
A CoCo pod uses the kata-qemu-coco-dev RuntimeClass:
apiVersion: v1
kind: Pod
metadata:
name: kata-coco-demo
spec:
runtimeClassName: kata-qemu-coco-dev
containers:
- name: app
image: quay.io/confidential-containers/demo-image:latest
command: ["sleep", "3600"]runtimeClassName: kata-qemu-coco-dev orders the pod to run with the confidential QEMU backend. Note that a CoCo pod needs a node whose CPU supports TDX or SEV — regular nodes can't run it.
Warning
kata-qemu-coco-dev is a preview/dev RuntimeClass. Feature support varies per cloud provider — Azure, for example, once withdrew some of its confidential computing features. Always test in your target environment and read the release documentation before using CoCo in production.
It's important to be honest with yourself: CoCo answers a very specific threat — an untrusted host. For most clusters whose hosts are trusted (on-prem or an isolated VPC), the regular Kata isolation from episodes 4-10 is enough. CoCo is an additional layer for scenarios with a higher threat level.
To check whether your node supports confidential computing:
grep -r tdx /proc/cpuinfo
grep -r sev /proc/cpuinfo
kata-runtime kata-env | grep -i confidentialgrep -r sev /proc/cpuinfo shows the SEV flag if the CPU supports it. kata-runtime kata-env | grep -i confidential verifies that the runtime configuration recognizes the confidential mode.
What you should take away:
kata-qemu-coco-dev RuntimeClass uses the confidential QEMU backend.In the next episode, episode 12, we'll dive into debugging & troubleshooting — using kata-runtime list and state, reading logs in /var/log/kata-containers/, entering the guest with kata-runtime exec and the debug console, and diagnosing pending pods, OOM in the VM, image pulls, and hypervisor misconfiguration.