| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 8 个月前 | ||
| 6 个月前 | ||
| 6 个月前 | ||
| 6 个月前 | ||
| 6 个月前 | ||
| 6 个月前 | ||
| 6 个月前 | ||
| 6 个月前 | ||
| 6 个月前 |
构建机密容器运行时组件
更新历史
- 2026-2-4:创建文档
1. 组件架构概览
运行机密容器涉及三类关键组件,如下图所示,分别部署在宿主机、机密虚拟机以及可信认证服务环境中。

1.1 宿主机侧组件
- kubelet:Kubernetes 节点上的核心代理,负责与 API Server 通信,接收 Pod 调度指令,并通过容器运行时接口(CRI)管理容器生命周期。
- containerd:符合 OCI(Open Container Initiative)标准的工业级容器运行时,作为 kubelet 与底层安全运行时(如 Kata Containers)之间的桥梁。它通过 CRI 接收来自 kubelet 的请求,管理镜像拉取、容器生命周期,并通过 shim 机制与 Kata 运行时交互。
- nydus-snapshotter:辅助机密容器跳过主机端的镜像拉取步骤。
- containerd-shim-kata-v2:Kata Containers 专用的 containerd shim,负责建立 containerd 与 Kata 运行时之间的通信通道。它管理轻量级虚拟机(VM)的生命周期,并将容器操作(如 start、stop、exec)转换为对 kata-agent 的 gRPC 调用,确保每个 Pod 在独立的隔离 VM 中运行。
- 主机内核:宿主机操作系统内核,需启用对机密计算(如海光 CSV)的支持。
- hypervisor:负责创建和管理虚拟机实例,默认使用 QEMU。
1.2 机密虚拟机内部组件
- OVMF:UEFI 固件实现,提供标准化引导环境,用于加载虚拟机内核与 initrd。
- 虚拟机内核:需支持 CSV 等机密计算特性。
- 虚拟机 initrd:初始内存文件系统,包含以下核心服务:
- kata-agent:接收来自主机 containerd(经由 shim)的容器管理指令。其内置的 image-rs 模块支持在 TEE 内直接从远程仓库拉取并解包容器镜像。
- attestation-agent(AA):作为 RATS(Remote ATtestation architecture for Secure Systems)架构中的 Attester,负责收集当前 TEE 环境的运行时证据,并与外部 KBS 服务通信完成远程证明。
- confidential-data-hub(CDH):统一的机密资源访问代理,通过 gRPC 或 ttRPC 向容器应用或内部组件提供加密密钥、证书、配置等敏感数据。CDH 本身不存储机密,而是作为客户端向 KBS 等可信资源提供者请求资源。所有请求必须先通过 AA 完成身份与环境证明,确保“仅在合法 TEE 中才可获取机密”。
- api-server-rest:以 RESTful API 封装 CDH 与 AA 的核心功能,为容器内应用提供标准化、易集成的接口。
1.3 可信认证服务组件
运行在可信环境中的 TEE 认证服务组件:
- KBS(Key Broker Service):在 RATS 架构中扮演 Relying Party 角色,接收来自 Attester 的证据,提交给 Verifier 验证,并根据策略决定是否返回请求的机密资源。
- AS(Attestation Service):即 RATS 中的 Verifier,负责验证 TEE 证据的真实性,需结合 RVPS 提供的参考值进行策略评估。
- RVPS(Reference Value Provider Service):管理可信参考值,为 AS 的验证过程提供必要依据。
2. 构建流程
本文仅关注于构建运行在机密虚拟机中的组件,因为这是在实际使用中需要更多定制和开发的组件。
从源代码出发,构建可部署的机密容器运行时组件(最终用于生成 CoCo Operator 所需的镜像和配置),主要步骤如下:
- 构建 kata-agent;
- 构建 Guest Components,包括:attestation-agent、confidential-data-hub、api-server-rest;
- 构建 Guest Kernel;
- 构建 initrd 镜像,集成上述 kata-agent、Guest Components 及内核模块;
- 构建 Kata Artifacts,打包 guest kernel 与 initrd;
- 构建 Kata Deploy Payload 镜像,使用 Kata Artifacts 更新关键组件;
- 生成用于部署 CoCo Operator 的 YAML 配置文件。
其中,initrd 支持两种构建方式: (1)Update 模式(默认)
- 基于海光提供的基础 initrd 镜像
- 仅更新已构建的 kata-agent、Guest Components 和内核模块
- 重新打包生成新 initrd
- 适用场景:开发与调试,快速迭代
(2)Full 模式
- 使用 Kata 官方脚本从零构建 rootfs
- 基于完整 rootfs 生成 initrd 镜像
- 适用场景:生产环境,确保镜像完整性和一致性
3. 使用脚本构建
本项目提供了构建脚本,以 build.sh 为入口。同时提供了 Makefile 进行快捷操作。
3.1 前置要求
- 系统环境:需要在基于 RHEL 的发行版(例如 BCLinux、openEuler)上运行,并支持 yum 包管理器;
- 网络环境:需要访问公网以下载源码和依赖;
- 权限要求:必须以 root 用户权限执行;
- 配置文件:根据需要修改
build.conf文件。
3.2 使用 Makefile 构建
Makefile 提供了便捷的模块化构建接口,支持分步构建或完整构建。
可用构建目标
| 目标 | 功能说明 |
|---|---|
all |
根据 build.conf 配置构建所有组件(默认目标) |
kata-agent |
构建 kata-agent 二进制文件 |
initrd-update |
快速构建 initrd 镜像(update 模式) |
initrd-full |
完整构建 initrd 镜像(full 模式) |
payload-images |
构建 payload 相关容器镜像 |
coco-operator |
定制化 coco-operator 部署清单 |
clean |
清理构建结果(output、logs、source 目录) |
help |
显示帮助信息 |
3.3 使用 build.sh 脚本
build.sh 是主构建脚本,提供了更灵活的命令行控制选项。
基本用法
# 使用默认配置构建
sudo ./build.sh
# 使用自定义配置文件
sudo ./build.sh --config custom.conf
高级选项
| 选项 | 说明 | 示例 |
|---|---|---|
--config FILE |
指定配置文件路径 | --config my_config.conf |
--only-steps STEPS |
仅执行指定步骤(逗号分隔) | --only-steps "01_setup_build_env.sh,02_build_kata_agent.sh" |
--skip-steps STEPS |
跳过指定步骤(逗号分隔) | --skip-steps "04_build_guest_kernel.sh" |
--help |
显示帮助信息 | --help |
构建步骤说明
构建过程包含以下 12 个步骤,可通过 build.conf 中的 RUN_* 变量控制:
- 01_setup_build_env.sh - 初始化构建环境;
- 02_build_kata_agent.sh - 构建 kata-agent;
- 03_build_guest_components.sh - 构建 guest-components 各组件;
- 04_build_guest_kernel.sh - 构建 guest kernel;
- 05_build_pause_bundle.sh - 构建 pause bundle;
- 06_build_initrd.sh - 制作定制 initrd 镜像;
- 07_package_kata_artifacts.sh - 打包 kata artifacts;
- 08_build_reqs_payload_image.sh - 构建 pre-install reqs-payload 镜像;
- 09_build_kata_deploy_image.sh - 构建定制的 kata-deploy-csv 镜像;
- 10_customize_coco_operator.sh - 生成定制化 coco-operator 部署清单;
- 11_build_kbs_images.sh - 构建 KBS 相关镜像;
- 12_customize_trustee_operator.sh - 生成定制化 trustee-operator 部署清单。