在CCE中容器化使用QingTian Enclave
QingTian Enclave是一种在现有的QingTian架构ECS中引入的新型安全结构。它是一个完全隔离的虚拟机,无持久化存储、交互式访问或外部网络连接,能够确保数据的临时性和安全性,提供高度安全和隔离的执行环境,可运行敏感任务和应用程序。关于QingTian Enclave的更多详情请参见什么是QingTian Enclave。
QingTian Enclave的核心功能如下:
- 完全独立的虚拟机:QingTian Enclave是一个在ECS内部构建的独立虚拟机,拥有自己的操作系统和资源,在逻辑上和外部ECS完全隔离,确保了高安全性。
- 无持久化存储:QingTian Enclave虚拟机不包含持久化存储,所有数据在虚拟机关闭后都会丢失。这种设计确保了数据的临时性和安全性,避免了数据泄露的风险。
- 无交互式访问或外部网络连接:QingTian Enclave虚拟机不支持交互式访问,如SSH连接。它也不具备外部网络连接能力,只能通过内部安全通道与外部ECS通信。
- 高度隔离和访问控制:即使是外部ECS上的root用户,也不能直接访问QingTian Enclave。外部ECS上的任何用户或进程都必须通过安全的本地通道(Vsock)与QingTian Enclave进行通信。这个通道确保了数据传输的安全性和完整性,防止了中间人攻击和数据泄露。
QingTian Enclave的适用场景如下:
- 敏感数据处理:QingTian Enclave可以用于处理敏感数据,如加密密钥、个人身份信息等,确保这些数据在处理过程中不会被泄露。
- 安全计算:在需要执行高度安全的计算任务时,QingTian Enclave可以提供一个隔离的环境,防止恶意软件或攻击者的干扰。
- 隐私保护:QingTian Enclave可用于保护用户的隐私数据,确保敏感信息在传输和处理过程中保持安全。
一般情况下,您可以在QingTian架构的虚拟机中直接创建Enclave实例,但是该运行方式难以支持实例的动态扩缩容,不能方便地按照业务量动态调整。本文将指导您如何在CCE集群中容器化使用QingTian Enclave,通过Kubernetes调度和扩缩容能力,更好地实现业务弹性。
方案架构
在CCE集群中容器化使用QingTian Enclave时,您需要在节点上安装支持容器化运行QingTian Enclave的插件,然后将QingTian Enclave镜像文件(eif)打包成容器镜像,就可以在CCE集群中容器化创建Enclave实例。kubelet会通过Enclave生命周期管理接口(/dev/qtbox_service0)进行分配和调度。
与直接在虚拟机运行QingTian Enclave实例相比,容器化运行Enclave时,业务会被划分为不可信部分和可信部分。其中不可信部分包括应用的对外服务组件和Enclave管理相关组件(如qt-enclave工具),而可信部分则是涉及加解密或敏感信息保护的业务,运行在Enclave实例中。
运行Enclave容器时,会使用qt-enclave工具通过安全的本地通道(Vsock)创建QingTian Enclave虚拟机,用于运行加解密或敏感信息保护的业务。

前提条件
已创建一个CCE Standard或Turbo集群。
纳管Enclave节点至CCE集群
- 登录ECS控制台,创建支持Enclave的虚拟机,如c7t类型,且规格为4核8GiB及以上。您需要选择Linux作为系统镜像,建议使用Huawei Cloud EulerOS 2.0,并在“可信系统”中勾选Enclave。
- 由于该ECS随后需要被CCE纳管,因此创建时需要注意以下配置:
- 登录CCE控制台,单击集群名称进入集群,在左侧导航栏中选择“节点管理”,切换至“节点”页签并单击右上角的“纳管节点”。
- 使用“添加已有服务器”,并选择已经创建的ECS服务器。
- 在节点上通过执行脚本安装支持QingTian Enclave的组件。在“高级配置 > 安装后执行脚本”中,填写以下内容:
curl -k https://cce-statics.ap-southeast-3.obs.ap-southeast-3.myhuaweicloud.com/job-platform-package/cce-addons/addons-qt-enclave-20250417103811268.zip -o /tmp/addons-qt-enclave.zip cd /tmp unzip addons-qt-enclave.zip cd addons bash post_install.sh
- 按需填写其他参数,完成节点纳管。关于参数说明详情可参见纳管节点。
等待节点纳管成功后,单击该节点所在行的“更多 > 查看YAML”,查看节点的YAML,可以看到已经有可调度的QingTian Enclave资源。
准备使用QingTian Enclave的容器镜像
- 准备一台支持QingTian Enclave特性的ECS虚拟机实例,操作系统为Huawei Cloud EulerOS 2.0,构建QingTian Enclave镜像hello-enclave.eif,步骤详情请参见QingTian Enclave快速入门。
- 登录ECS虚拟机,安装Docker用于构建镜像。
- 确认repo源配置正常。
请检查默认的/etc/yum.repos.d/hce.repo配置文件中参数是否正确,正确的配置如下。
[base] name=HCE $releasever base baseurl=https://repo.huaweicloud.com/hce/$releasever/os/$basearch/ enabled=1 gpgcheck=1 gpgkey=https://repo.huaweicloud.com/hce/$releasever/os/RPM-GPG-KEY-HCE-2 [updates] name=HCE $releasever updates baseurl=https://repo.huaweicloud.com/hce/$releasever/updates/$basearch/ ......
- 安装docker软件包。
yum install docker -y
- 确认repo源配置正常。
- 安装qt CLI工具,并在配置文件中按需设置资源隔离参数,然后启动资源隔离服务。使用qt CLI工具需要安装必要的python库,详情请参见QingTian CLI(qt CLI)。
yum install qt-enclave-bootstrap yum install virtio-qtbox yum install qingtian-tool
安装必要的python库:
pip3 install docker knack
- 在配置文件中按需配置隔离参数,本教程内使用默认1G内存,2个vCPU。然后启动隔离服务:
systemctl start qt-enclave-env
-
构建QingTian Enclave镜像。本教程中,使用以下hello_enclave.sh脚本作为QingTian Enclave应用程序。
vi hello_enclave.sh
内容如下:
#!/bin/bash while true do echo "hello enclave!" sleep 2 done
创建Dockerfile:
vi Dockerfile
内容如下:
FROM ubuntu:latest COPY hello_enclave.sh /root/hello_enclave.sh CMD ["/root/hello_enclave.sh"]
- 确认脚本有可执行权限:
chmod +x hello_enclave.sh
- 构建一个名为hello-enclave的Docker镜像:
docker build -f Dockerfile -t hello-enclave .
- 使用qt enclave make-img命令将Docker镜像转换为名为hello-enclave.eif的QingTian Enclave镜像:
qt enclave make-img --docker-uri hello-enclave --eif hello-enclave.eif
输出为:
{ "digest": "SHA384", "PCR0": "63bf78ece7d2388ff773d0cad2ebc9a3070359db46d567ba271ff8adfb8b0b091be4ff4d5dda3f1c83109096e3656f3b", "PCR8": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" }
- 登录ECS虚拟机,安装Docker用于构建镜像。
- 使用QingTian Enclave镜像hello-enclave.eif构建容器镜像,构建完成的容器镜像将具备Enclave特性。
- 准备容器构建环境。
mkdir container cd container cp /usr/local/bin/qt . cp /etc/qingtian/enclave/qt-enclave-env.conf . cp /root/hello-enclave.eif .
- 在container目录下创建Dockerfile。
vi Dockerfile
内容如下:FROM ubuntu RUN apt update && \ apt install -y python3 && \ apt install -y python3-pip && \ apt install -y python3-docker && \ apt install -y python3-knack && \ apt install -y libcjson-dev && \ apt install -y libglib2.0-dev && \ ln -s /usr/bin/python3 /usr/bin/python && \ mkdir -p /etc/qingtian/enclave && \ mkdir -p /var/log/qingtian_enclaves && \ mkdir -p /var/log/qlog COPY qt-enclave-env.conf /etc/qingtian/enclave/ COPY qt /usr/bin COPY hello-enclave.eif / COPY entrypoint.sh / ENTRYPOINT /entrypoint.sh
- 在container目录下创建entrypoint.sh。
vi entrypoint.sh
内容如下:#!/bin/bash qt enclave start --mem 4096 --cpus 2 --eif hello-enclave.eif --cid 4--debug-mode qt enclave console --enclave-id 0
- 构建具备Enclave特性的容器镜像。
docker build -f Dockerfile -t enclave-demo .
- 您可以将构建完成的容器镜像上传到SWR中,在Kubernetes集群中部署使用。步骤详情请参见上传镜像。
- 准备容器构建环境。
在CCE中部署Enclave容器
- 创建enclave-deployment.yaml文件,部署工作负载。
示例如下,其中镜像地址请替换为制作镜像时上传到SWR的镜像地址:
kind: Deployment apiVersion: apps/v1 metadata: name: hello-enclave namespace: default spec: replicas: 1 selector: matchLabels: app: hello-enclave version: v1 template: metadata: labels: app: hello-enclave version: v1 spec: containers: - name: container-1 image: swr.ap-southeast-3.myhuaweicloud.com/container/enclave-demo:latest resources: limits: cpu: 250m huawei.com/qt_enclaves: '1' hugepages-1Gi: 4Gi memory: 512Mi requests: cpu: 250m huawei.com/qt_enclaves: '1' hugepages-1Gi: 4Gi memory: 512Mi imagePullPolicy: IfNotPresent securityContext: seccompProfile: type: Unconfined
- 创建工作负载。
kubectl create -f enclave-deployment.yaml
回显如下:
deployment.apps/hello-enclave created
- 查看Pod运行状态。
kubectl get pod | grep hello-enclave
回显如下:
hello-enclave-587b9f6d49-bvq22 1/1 Running 0 38s
- 查看Pod日志。
kubectl logs hello-enclave-587b9f6d49-bvq22 --tail=10
日志中应该显示如下内容,说明Enclave容器已经成功运行。
hello enclave! hello enclave! hello enclave! hello enclave! ...