This episode covers confidential computing and trusted guests in the Firecracker ecosystem: attestation and trusted VMs, their position in the Kubernetes ecosystem, current limitations, and the pattern of distributing secrets securely via MMDS and TLS without exposing metadata to the internet.

So far we've been protecting the host from the guest. Episode 15 flips the question: how can a guest protect itself from the host? This is the world of confidential computing — where a VM can prove its identity and integrity, and its data stays secret even from the machine's operator.
Why is this episode important? Firecracker is designed for untrusted workloads — code from users. But there's another class of workload: sensitive data (financial, healthcare) that needs cryptographic guarantees that only the right code can read it. Understanding Firecracker's position here — what's already possible, what's still evolving — is part of assessing platform suitability for your workloads.
In the ordinary cloud model, the host is the "owner" and the guest must trust it. Confidential computing flips that: with special hardware (e.g. AMD SEV-SNP, Intel TDX), guest memory can be encrypted so the host (including administrators and the hypervisor) can't read it. The guest can even attest — prove to a third party: "I'm running on trusted hardware, with the right image, under a legitimate configuration."
A common attestation flow:
Attestation is the foundation of "zero-trust compute": secrets are no longer sent to an IP, but to a proof.
How does Firecracker fit into the confidential computing world? Two dimensions:
microvm runtime class pattern (episode 12) can be combined with confidential workloads — Pods run inside trusted microVMs, with attestation managed by components such as an attestation operator on the control plane side.The Kubernetes ecosystem has growing support for confidential containers (e.g. via Kata Containers with confidential hardware). Firecracker itself doesn't promise end-to-end confidential computing out of the box — but its position as a lightweight VMM makes it a natural candidate in that stack.
An important part of engineering evaluation is knowing the limits:
In other words: for confidential requirements, evaluate specifically. Firecracker can be part of the solution, but not necessarily the whole solution — and that decision must be based on testing, not belief.
While confidential computing is the future, today there's a pattern that's already secure and practical for distributing secrets: MMDS (episode 6). Its security keys:
169.254.169.254 isn't routable — metadata can only be accessed by that guest itself, not by other guests or the internet.The production pattern for distributing secrets with MMDS:
The MMDS + TLS combination gives you: an isolated delivery path (MMDS) + encrypted transport (TLS) + on-demand secrets (secret store). This is the pattern production uses — and never expose MMDS to the internet (technically impossible, but also don't set up routing that opens 169.254.169.254 to the outside).
Tip
The golden rule of secrets: never store secrets in an image, in a Pod's environment variables, or on a shared filesystem. MMDS is enough to carry a temporary token; the real secret is pulled from the secret store over TLS with regular rotation.
To understand the concept at a practical level, here's a mini flow you can build:
# 1. Guest reads identity and nonce from MMDS
TOKEN=$(curl -s http://169.254.169.254/latest/token)
# 2. Guest calls the attestation service with its proof
curl -s https://attest.example.com/verify -H "Authorization: Bearer $TOKEN"
# 3. If verified, guest pulls the secret over TLS
curl -s https://vault.example.com/v1/secrets/db -H "X-Vault-Token: $TOKEN"The flow above teaches the key pattern: the guest proves itself first, then receives secrets. The nonce prevents replay; TLS prevents eavesdropping; and the token in MMDS can be rotated per boot.
169.254.169.254 is link-local; never add a route that exposes it.The key takeaways:
169.254.169.254) is a secure, isolated metadata path.In the next episode 16 we'll measure everything: Testing & Performance Benchmark — measuring cold boot versus snapshot time, memory overhead, IOPS and bandwidth throughput, running load tests with thousands of microVMs per host, and failure injection drills to validate platform resilience.