---
title: K8s TEE设备插件支持
description: "为了使能K8s对TEE资源的感知和管理，TrustZone提供了TEE设备插件，以便K8s能够将CA/TA容器调度到合适的节点上。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengcctrustzone/trustzone/fg/kunpengtrustzone_20_0063.html
sourcePath: /source/zh/kunpengcctrustzone/trustzone/fg/kunpengtrustzone_20_0063.html
indexId: ace473d4f88abf8c5b02d85eee22dec66756ff4853f72e1bc494f0c08204546072
---
# K8s TEE设备插件支持

为了使能K8s对TEE资源的感知和管理，TrustZone提供了TEE设备插件，以便K8s能够将CA/TA容器调度到合适的节点上。

- 插件仅上报TEE侧的内存资源。并通过虚拟设备数量的方式实现多Pod对TEE内存的共享。
- 插件运行需要TEE环境为机密OS，TEE OS升级为机密OS的方式可参考  升级TEE OS
。
- 支持最小内存分配精度和健康检查周期可配，最小分配精度默认512KB，可配范围需>=512（单位KB），健康检查周期默认60s，配置0表示不进行健康检查。两者可在启动插件时通过参数“-precision xx”和“-interval xx”配置。
- 对于每个TA容器，用户可根据配置的最小分配精度和TA资源配置文件“configs.xml”中的堆内存设置合适的值。设置大了会导致内存浪费，设置小了会导致TA应用因内存不足而异常退出。
- 申请插件的TA开发者证书时，建议将TA应用设为常驻TA，即将instanceKeepAlive设为true。
- 编译TA应用需要在Arm服务器上执行。
- openEuler系统上K8s环境搭建可参考《  Kubernetes 1.18.20 部署指南(https://www.hikunpeng.com/document/detail/zh/kunpengcpfs/ecosystemEnable/Kubernetes/kunpengk8s_04_0004.html)
》中“配置部署环境”相关内容。

1. 安装编译环境，其中go的版本需要大于等于1.15。
  1 2 3 4 5 yum install make gcc wget https://go.dev/dl/go1.15.15.linux-arm64.tar.gz tar xzvf go1.15.15.linux-arm64.tar.gz export PATH=$PWD/go/bin/:$PATH go version

2. 获取设备插件源码，以及itrustee_sdk用于编译插件TA部分。itrustee_sdk与kunpengsecl在同一层目录下。

```
git clone -b tee-device-plugin https://gitcode.com/openeuler/kunpengsecl.git
git clone https://gitcode.com/openeuler/itrustee_sdk.git
```


3. 配置TA编译资源。

  a. 参考    调测环境TA应用开发者证书申请
获取TA证书（config和private_key.pem），并放到“kunpengsecl/tee-device-plugin/cmd/TA”对应目录下。
    1 2 mkdir -p kunpengsecl/tee-device-plugin/cmd/TA/TA_cert mkdir -p kunpengsecl/tee-device-plugin/cmd/TA/signed_config

    拷贝后的目录结构如下：

  b. 修改“manifest.txt”

    1. 打开“manifest.txt”文件。
      1 vim kunpengsecl/tee-device-plugin/cmd/TA/manifest.txt

    2. 按“i”键进入编辑模式，根据申请TA证书时configs.xml的配置修改里面对应的值，可参考      表1
。
    3. 按“Esc”键退出编辑模式，输入:wq!并按“Enter”键保存退出文件。
  c. 修改CA代码。

    1. 打开“tee_mem_ca.c”文件。
      1 vim kunpengsecl/tee-device-plugin/cmd/CA/libteememca/tee_mem_ca.c

    2. 按“i”键进入编辑模式，将TA应用代码的UUID修改为实际值。
    3. 按“Esc”键退出编辑模式，输入:wq!并按“Enter”键保存退出文件。
4. 编译设备插件。
  1 2 cd kunpengsecl/tee-device-plugin make

  编译完成后，将在“pkg”目录下生成如下文件。

  若直接在宿主机上部署插件，可通过如下命令部署和启动。

  1 2 3 4 cp pkg/libteememca.so /usr/lib64/ cp pkg/tee-device-plugin /vendor/bin cp pkg/*.sec /data/ /vendor/bin/tee-device-plugin

5. 基于设备插件应用构建Docker镜像。

  a. 拷贝设备插件应用和依赖到“docker”目录，依赖文件可从支持TrustZone的服务器上获取。
    为避免系统差异导致应用或库无法使用，建议从和基础镜像一致的系统上拷贝。

    1 2 3 4 cp pkg/* docker/ cp /usr/bin/tlogcat docker/ cp /usr/lib64/libteec.so docker/ cp /usr/lib64/libboundscheck.so docker/

  b. 构建镜像。
    1 2 cd docker docker build -t tee-device-plugin .

6. 将镜像上传到镜像仓库，以便部署时计算节点可从仓库拉取到镜像，用户可将仓库名改为自己的私有仓库。
  1 2 docker tag tee-device-plugin:latest <repository>/tee-device-plugin:latest docker push <repository>/tee-device-plugin:latest

7. 为支持TrustZone的服务器打上标签，以便以DaemonSet模式部署的插件可以自动部署到对应节点上。
  1 kubectl label nodes <node-name> teetype=trustzone

8. 以DaemonSet模式部署插件。

  a. 根据实际情况修改镜像仓库名。
    1 2 cd ../deploy vim tee-device-plugin.yml

  b. 部署插件。
    1 2 kubectl create -f tee-device-plugin.yml kubectl get pods -A -o wide

    至此，插件已成功部署至支持TrustZone的计算节点。

9. 构建CA/TA应用镜像，并创建Pod配置文件。可参考容器部署支持完成镜像构建，并上传到镜像仓库，参考test-pod.yml编写yml配置文件。
  1 vim test-pod.yml

10. 部署Pod应用。部署成功后，可以看到Pod被部署到对应的节点，并占用配置的资源数量。
  1 2 kubectl create -f test-pod.yml kubectl describe node <node-name>

  1 kubectl get pods -A -o wide

11. 查看插件和TA应用的日志。

  a. 查看插件日志。
    1 kubectl logs -f k8s-tee-device-plugin-ds-<xxxxx> -n kube-system

    其中xxxxx为随机字符串，可根据插件Pod的实际命名进行修改。

  b. 查看TA应用日志。
    1 kubectl logs -f test-pod-ta
