本节将介绍部署 Confidential Containers 所需的软硬件前提条件、 如何使用 Helm Chart 完成安装、如何验证安装结果, 以及如何运行使用 Confidential Containers 的 Pod。
快速开始
1 - 前提条件
本节将介绍使用 Helm Chart 安装 Confidential Containers 所需的软硬件前提条件。
2 - 安装
安装 Confidential Containers 之前,请先完成前提条件章节中的准备工作。
使用 Helm 安装 CoCo
通过 Confidential Containers Charts 仓库提供的 Helm Chart 安装 CoCo 运行时。
安装最新版本:
helm install coco oci://ghcr.io/confidential-containers/charts/confidential-containers \
--namespace coco-system \
--create-namespace
将 <VERSION> 替换为所需的发布版本:
helm install coco oci://ghcr.io/confidential-containers/charts/confidential-containers \
--version <VERSION> \
--namespace coco-system \
--create-namespace
例如,安装 v0.18.0 版本:
helm install coco oci://ghcr.io/confidential-containers/charts/confidential-containers \
--version 0.18.0 \
--namespace coco-system \
--create-namespace
等待所有 Pod 的 STATUS 变为 Running。
kubectl get pods -n coco-system --watch
如果需要了解特定场景的安装选项(例如 s390x、peer-pods)或高级配置,请参见
Charts 仓库文档。
验证安装
检查预期的 RuntimeClass 是否已创建。
kubectl get runtimeclass
可用的 RuntimeClass 取决于具体架构:
| runtimeclass | 说明 |
|---|---|
kata-qemu-coco-dev |
开发/测试运行时 |
kata-qemu-coco-dev-runtime-rs |
开发/测试运行时(基于 Rust) |
kata-qemu-snp |
AMD SEV-SNP |
kata-qemu-tdx |
Intel TDX |
kata-qemu-nvidia-gpu-snp |
NVIDIA GPU 加 AMD SNP 组合 |
kata-qemu-nvidia-gpu-tdx |
NVIDIA GPU 加 Intel TDX 组合 |
| runtimeclass | 说明 |
|---|---|
kata-qemu-coco-dev |
开发/测试运行时 |
kata-qemu-coco-dev-runtime-rs |
开发/测试运行时(基于 Rust) |
kata-qemu-se |
IBM Secure Execution |
kata-qemu-se-runtime-rs |
IBM Secure Execution(基于 Rust) |
| runtimeclass | 说明 |
|---|---|
kata-remote |
Peer-pods |
卸载
如需卸载 Confidential Containers 并删除 coco-system 命名空间,请执行:
helm uninstall coco --namespace coco-system
kubectl delete namespace coco-system
3 - 示例工作负载
创建示例 Confidential Containers 工作负载
使用 Helm Chart 安装 Confidential Containers 后,只需为 Pod 添加一个 RuntimeClass,
即可运行 CoCo 工作负载。
我们使用 kata-qemu-coco-dev RuntimeClass,它会在不依赖机密计算硬件支持的情况下运行 CoCo。
首先,使用一个未加密的容器镜像进行演示。
本示例使用如下 YAML 所示的 nginx 镜像:
apiVersion: v1
kind: Pod
metadata:
labels:
run: nginx
name: nginx
annotations:
io.containerd.cri.runtime-handler: kata-qemu-coco-dev
spec:
containers:
- name: nginx
image: nginx:1.29.4
dnsPolicy: ClusterFirst
runtimeClassName: kata-qemu-coco-dev
对于大多数基础的工作负载来说,通常只需在 Pod YAML 中设置 runtimeClassName
和 runtime-handler 注解即可。
按照上面的内容创建一个 Pod YAML 文件(本示例命名为 nginx.yaml)。
创建工作负载:
kubectl apply -f nginx.yaml
输出示例:
pod/nginx created
确认 Pod 已成功创建并处于运行状态:
kubectl get pods
输出示例:
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 3m50s
4 - 加固工作负载
现在你已经部署了一个简单的 Confidential Containers 工作负载, 接下来可以进一步了解如何将其加固到适用于生产环境的水平。 本页重点介绍你需要做出的几个关键决策:
- 为你的硬件选择合适的 RuntimeClass
- 理解并配置用于保护工作负载的各类策略
- 利用额外的安全特性进一步提升防护能力
选择合适的 RuntimeClass
在前面的示例中,我们使用的是 kata-qemu-coco-dev,
它主要用于测试场景,不依赖机密计算硬件支持。
如果是在生产环境中部署,则必须选择与实际 TEE 硬件相匹配的 RuntimeClass。
RuntimeClass 选择指南
用于开发与测试:
kata-qemu-coco-dev- 不依赖 TEE 硬件的测试运行时(⚠️ 不提供安全保证)
用于 x86_64 裸金属生产环境:
kata-qemu-tdx- Intel TDX(Trust Domain Extensions)kata-qemu-snp- AMD SEV-SNP(Secure Encrypted Virtualization)kata-qemu-sev- AMD SEV(较早一代)kata-qemu-nvidia-gpu-tdx- NVIDIA GPU 加 Intel TDX 组合kata-qemu-nvidia-gpu-snp- NVIDIA GPU 加 AMD SNP 组合
用于 s390x 生产环境:
kata-qemu-se- IBM Secure Execution
用于云上部署(Peer Pods):
kata-remote- 面向 AWS、Azure、GCP 等平台的 Cloud API Adaptor
示例:迁移到生产环境配置
下面展示如何将 Pod 更新为使用真实的 TEE 硬件。
以 Intel TDX 为例:
apiVersion: v1
kind: Pod
metadata:
name: nginx-production
spec:
runtimeClassName: kata-qemu-tdx
containers:
- image: bitnami/nginx:1.22.0
name: nginx
设置 runtimeClassName 字段通常已经足够。
有些示例为了兼容较旧配置,还会保留 io.containerd.cri.runtime-handler 注解(annotation),
但在使用 RuntimeClass 时,这个注解通常是冗余的。
使用Intel TDX 加 NVIDIA Hopper GPU:
apiVersion: v1
kind: Pod
metadata:
name: cuda-vectoradd-kata
namespace: default
spec:
runtimeClassName: kata-qemu-nvidia-gpu-tdx
restartPolicy: Never
containers:
- name: cuda-vectoradd
image: "nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda12.5.0-ubuntu22.04"
resources:
limits:
nvidia.com/pgpu: "1"
memory: 16Gi
关于 Hopper、Blackwell 多 GPU 示例,以及 Hopper PPCIE 标签配置,请参见 NVIDIA GPU 示例。
所选 RuntimeClass 必须与你的硬件能力匹配。
如果 RuntimeClass 与实际硬件不一致(例如在 AMD 硬件上使用 kata-qemu-tdx),
Pod 创建将会失败。
理解 CoCo 策略体系
Confidential Containers 使用三类策略(policy),分别在不同层面保护工作负载。 若要加固生产环境部署,理解这三类策略至关重要。
三类策略
| 策略类型 | 执行位置 | 控制内容 | 配置方式 |
|---|---|---|---|
| Kata Agent 策略 (Kata Agent Policy) | TEE 内部,由 Kata Agent 执行 | 控制 Agent 可执行的操作(如创建容器、对 Pod 执行 exec 等) |
通过包含 init-data 的 Pod 注解配置 |
| KBS 资源策略 (KBS Resource Policy) | 由 Trustee KBS 执行 | 控制哪些机密信息可以释放给哪些工作负载 | 通过 KBS Client 或 Trustee Operator 配置 |
| 远程证明策略 | 由 Trustee AS 执行 | 控制如何评估硬件证据(例如接受哪些 TCB 状态) | 通过 KBS Client 或 Trustee Operator 配置 |
图中展示的 Rego 文件名仅为示例。
这些名称本身没有特殊含义。
实际配置时,策略始终是通过命令行参数(例如 kbs-client ... set-resource-policy --policy-file <path>)
或配置项按路径传入,服务实际使用的是文件内容,而不是文件名。
1. Kata Agent 策略(TEE 内)
Kata Agent 策略决定了 Kata Agent 在 TEE 内允许执行哪些操作。 这是防御恶意或已被入侵的 Kubernetes 控制平面的第一道防线。
典型用途包括:
- 禁止对生产 Pod 执行
kubectl exec - 限制允许启动的容器镜像
- 控制允许执行的命令
下面是一个较为严格的 Kata Agent 策略示例:
package agent_policy
import rego.v1
default CreateContainerRequest := false
default ExecProcessRequest := false
# Only allow specific image digests
CreateContainerRequest if {
input.storages[0].source == "docker.io/library/nginx@sha256:abc123..."
}
Kata Agent 策略会嵌入到 Init-Data 配置文件中。 该文件还可提供其他配置,例如 Trustee 的地址信息。
2. KBS 资源策略(KBS 侧)
KBS 资源策略用于控制在何种条件下释放哪些机密信息。 它会检查工作负载提交的证明令牌,并据此做出决策。
典型用途包括:
- 验证工作负载是否使用了特定的 Kata Agent 策略(通过 Init-Data 哈希)
- 仅向通过 TDX 远程证明的 TDVM 实例释放数据库凭据
- 要求特定的信任级别(例如
affirming或contraindicated) - 为不同平台(TDX 或 SNP)下发不同的机密信息
示例:校验 Init-Data 哈希
当你在 Pod 中提供 Init-Data(其中包含 Kata Agent 策略)时, 证明服务(Attestation Service)会对其进行校验,并将相应哈希写入令牌。 你的 KBS 资源策略可以进一步验证这个特定的 Init-Data 哈希, 从而确保实际使用的是期望的 Kata Agent 策略与配置。
package policy
import rego.v1
default allow = false
# Only release secrets to workloads with the expected Init-Data hash
allow if {
input["submods"]["cpu0"]["ear.status"] == "affirming"
# Verify the specific Init-Data hash (includes kata agent policy + config)
input["submods"]["cpu0"]["ear.veraison.annotated-evidence"]["init_data"] == "expected-hash-here"
}
请使用你在 initdata.toml 中指定的哈希算法计算期望值。
例如,对 TDX 场景,通常会使用 sha384,此时可在命令行中执行:
sha384sum initdata.toml
延伸阅读:KBS 资源策略
3. 远程证明策略(Attestation Service 侧)
远程证明策略定义了如何评估硬件证据,包括: 接受哪些测量值、与哪些参考值进行比对,以及如何计算信任向量。
典型用途包括:
- 定义可接受的固件版本
- 为不同工作负载指定所需的安全级别
- 将硬件测量值映射为可信声明(trust claims)
延伸阅读:Attestation Service Policies
CoCo 已为 TDX、SNP 实例以及 NVIDIA 机密计算 GPU 提供了合理的默认证明策略。 对大多数用户而言,只需补充参考值即可,策略本身通常已具备合适配置。
额外的安全特性
完成基础配置后,可以进一步了解以下功能以增强整体安全性: 功能概览
生产环境快速检查清单
在部署到生产环境之前,请确认已完成以下事项:
- 已根据实际硬件选择正确的 RuntimeClass
- 已生成并嵌入适合当前工作负载的 Kata Agent 策略
- 已在 KBS 中配置 KBS 资源策略
- 已向证明服务预置参考值
后续步骤
- 部署 Trustee: 参见Trustee 安装,以启用远程证明
- 深入策略体系: 参见各类策略说明
- 云上部署: 参见AWS、Azure、GCP 云平台示例