《云原生机密计算最佳实践白皮书》——06运行时底座——海光CSV机密容器——基于runtime-attestation使用机密容器(4) https://developer.aliyun.com/article/1231357?groupCode=aliyun_linux
步骤六:制作加密镜像
1. 制作加密镜像
可参考Generate encrypted container image制作加密镜像。 在本例中以 docker.io/zhouliang121/alpine-84688df7-2c0c-40fa-956b-29d8e74d16c1-gcm:latest 为例进行测试。
注意事项:在机密计算场景中,加密镜像是在guest VM中由imgae-rs 组件负责拉取,而不是在host进行拉取。 如果您出于研究的目的,想查看加密镜像的内容。请注意由于镜像是加密的,用常规的 docker ,ctr 和 crictl 都无法正常拉取。请使用skopeo工具进行镜像的拉取。参考命令如下:
skopeo --insecure-policy copy docker://docker.io/zhouliang121/alpine-84688df7-2c0c-40 fa-956b-29d8e74d16c1-gcm:latest oci:test
2. 部署镜像密钥
mkdir -p /opt/verdictd/keys/ && echo 1111111111111111111111111111111 > /opt/ verdictd/keys/84688df7-2c0c-40fa-956b-29d8e74d16c1
3. 修改镜像policy
以docker.io/zhouliang121/alpine-84688df7-2c0c-40fa-956b-29d8e74d16c1-gcm:latest 为例:
cat <<EOF | sudo tee /opt/verdictd/image/policy.json { "default": [{"type": "insecureAcceptAnything"}], "transports": { "docker": { "docker.io/zhouliang121/": [{"type": "insecureAcceptAnything"}] } } } EOF
4. 启动verdictd
verdictd --listen 0.0.0.0:20002 --verififier csv --attester nullattester --client-api 127.0.0.1:20001 --mutual
当Verdictd启动后,Verdictd在端口监听地址0.0.0.0:20002监听来自attestation agent的远程证明请求。
注意:verdictd 启动的时候有一个报错。原因是在注册SGX相关的 instance时出错,在CSV平台上可以忽
略。
[ERROR] failed on dlopen(): libsgx_dcap_quoteverify.so.1: cannot open shared object fifile: No such fifile or directory
步骤七:部署加密镜像
1. 创建RuntimeClass对象kata
用户可以使用RuntimeClass为pod指定不同的运行时,这里使用kata作为验证时使用的运行时。
在集群中执行以下命令,创建RuntimeClass对象kata。
cat <<-EOF | kubectl apply -f - apiVersion: node.k8s.io/v1 kind: RuntimeClass metadata: name: kata handler: kata EOF
2. 部署pod
如果 pod 的 runtimeClassName 设置为 kata,CRI 插件会使用 Kata Containers 运行时运行 pod。 执行
以下命令,部署名称为alpine的pod。
cat <<-EOF | kubectl apply -f - apiVersion: v1 kind: Pod metadata: name: nginx-sandbox spec: runtimeClassName: kata containers: - image: docker.io/zhouliang121/alpine-84688df7-2c0c-40fa-956b-29d8e74d16c1-gcm:latest command: - top imagePullPolicy: IfNotPresent name: alpine restartPolicy: Never EOF
3. 测试加密镜像是否部署成功
执行以下命令,查看加密镜像是否部署成功:
kubectl get pods
预期输出:
NAME READY STATUS RESTARTS AGE nginx-sandbox 1/1 Running 0 30s