From 3924f01c9b61b8f34f98c4952032a0dc0a8df54a Mon Sep 17 00:00:00 2001 From: panpinghseng Date: Thu, 20 Mar 2025 20:44:30 +0800 Subject: [PATCH] Optimized the documentation and added the FAQ for the kbs and kata runtime connection failure --- ...00\346\234\257\344\273\213\347\273\215.md" | 2 +- ...30\345\231\250\345\212\240\345\257\206.md" | 4 +- ...17\345\271\266\351\203\250\347\275\262.md" | 4 + ...13\350\275\275\351\225\234\345\203\217.md" | 2 + ...50\345\220\204\347\273\204\344\273\266.md" | 4 + ...06\350\231\232\346\213\237\346\234\272.md" | 2 +- ...72\345\257\206\345\256\271\345\231\250.md" | 89 ++++++++++++++++++- 7 files changed, 102 insertions(+), 5 deletions(-) diff --git "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/10-\346\212\200\346\234\257\344\273\213\347\273\215/3-CSV\347\247\230\351\222\245\345\260\201\345\215\260\346\212\200\346\234\257\344\273\213\347\273\215.md" "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/10-\346\212\200\346\234\257\344\273\213\347\273\215/3-CSV\347\247\230\351\222\245\345\260\201\345\215\260\346\212\200\346\234\257\344\273\213\347\273\215.md" index dcc2cff5..b1636ad1 100644 --- "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/10-\346\212\200\346\234\257\344\273\213\347\273\215/3-CSV\347\247\230\351\222\245\345\260\201\345\215\260\346\212\200\346\234\257\344\273\213\347\273\215.md" +++ "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/10-\346\212\200\346\234\257\344\273\213\347\273\215/3-CSV\347\247\230\351\222\245\345\260\201\345\215\260\346\212\200\346\234\257\344\273\213\347\273\215.md" @@ -54,7 +54,7 @@ launch_blob.bin作为qemu启动参数传入,launch_blob.bin内容对应为SESS |40h | 255:0| In | WRAP_MAC |使用KIK作为key 对WRAP_TK,WRAP_IV 进行hmac计算生成WRAP_MAC进行完整性保护,KIK 由主密钥派生出来| |60h | 255:0| In | SESSION_MAC |使用TIK对policy\|\|session data(0x124 - 0x2C3)进行hmac计算生成SESSION_MAC对数据进行完整性保护| |80h | 1311:0| In | - |保留字段,0| -|124h | 2047:0| In | Menc |主密钥,用户随机生成,被PDH公钥加密后为Menc,KEKKIK 由主密钥派生,海光安全固件中使用PDH私钥对Menc进行解密得到主密钥,使用主密钥派生出KEKKIK,使用KIK对WRAP_TK、WRAP_IV 进行完整性验证,KEK解密WRAP_TK 得到TEKTIK,使用KIK对policy\|\|session data(0x124 - 0x2C3)重新进行hmac计算和SESSION_MAC进行对比,实现数据完整性保护| +|124h | 2047:0| In | Menc |主密钥,用户随机生成,被PDH公钥加密后为Menc,KEKKIK 由主密钥派生,海光安全固件中使用PDH私钥对Menc进行解密得到主密钥,使用主密钥派生出KEKKIK,使用KIK对WRAP_TK、WRAP_IV 进行完整性验证,KEK解密WRAP_TK 得到TEKTIK,使用TIK对policy\|\|session data(0x124 - 0x2C3)重新进行hmac计算和SESSION_MAC进行对比,实现数据完整性保护| |224h | 255:0| In | DIGEST |虚拟机摘要,使用虚拟机组件计算生成,虚拟机组件如 OVMF.fd、 vmlinuz 、initramfs.img,安全固件中会对其进行重新计算和用户计算出的DIGEST进行对比,从而实现可信度量启动| |244h | 255:0| In | - |保留字段,0| |264h | 127:0| In | VM_ID |虚拟机id,用户自己定义,hag csv generate_launch_blob --help 中 通过-id 参数传入| diff --git "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/8-\346\265\213\350\257\225CSV2\345\257\204\345\255\230\345\231\250\345\212\240\345\257\206.md" "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/8-\346\265\213\350\257\225CSV2\345\257\204\345\255\230\345\231\250\345\212\240\345\257\206.md" index 6bc11c5b..50e65e5b 100644 --- "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/8-\346\265\213\350\257\225CSV2\345\257\204\345\255\230\345\231\250\345\212\240\345\257\206.md" +++ "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/3-\350\231\232\346\213\237\346\234\272/8-\346\265\213\350\257\225CSV2\345\257\204\345\255\230\345\231\250\345\212\240\345\257\206.md" @@ -18,7 +18,7 @@ $ sudo /opt/hygon/csv/build_csv2_kernel.sh  运行普通虚拟机。 ``` -$ sudo qemu-system-x86_64 -name normal-vm --enable-kvm -cpu host -m 2048 -hda /opt/hygon/csv/vm.qcow2 -drive if=pflash,format=raw,unit=0,file=/opt/hygon/csv/OVMF_CODE.fd,readonly=on -qmp tcp:127.0.0.1:1111,server,nowait -vnc 0.0.0.0:0 -netdev bridge,br=virbr0,id=net0 -device virtio-net-pci,netdev=net0,romfile= -nopraghic +$ sudo qemu-system-x86_64 -name normal-vm --enable-kvm -cpu host -m 2048 -hda /opt/hygon/csv/vm.qcow2 -drive if=pflash,format=raw,unit=0,file=/opt/hygon/csv/OVMF_CODE.fd,readonly=on -qmp tcp:127.0.0.1:1111,server,nowait -vnc 0.0.0.0:0 -netdev bridge,br=virbr0,id=net0 -device virtio-net-pci,netdev=net0,romfile= -nographic ``` 虚拟机启动后,登陆虚拟机,用户名为root,密码为root。 @@ -66,7 +66,7 @@ $ sudo -s ### 运行CSV2虚拟机 ``` -$ sudo qemu-system-x86_64 -name csv2-vm --enable-kvm -cpu host -m 2048 -hda /opt/hygon/csv/vm.qcow2 -drive if=pflash,format=raw,unit=0,file=/opt/hygon/csv/OVMF_CODE.fd,readonly=on -qmp tcp:127.0.0.1:2222,server,nowait -vnc 0.0.0.0:1 -object sev-guest,id=sev0,policy=0x5,cbitpos=47,reduced-phys-bits=5 -machine memory-encryption=sev0 -nopraghic +$ sudo qemu-system-x86_64 -name csv2-vm --enable-kvm -cpu host -m 2048 -hda /opt/hygon/csv/vm.qcow2 -drive if=pflash,format=raw,unit=0,file=/opt/hygon/csv/OVMF_CODE.fd,readonly=on -qmp tcp:127.0.0.1:2222,server,nowait -vnc 0.0.0.0:1 -object sev-guest,id=sev0,policy=0x5,cbitpos=47,reduced-phys-bits=5 -machine memory-encryption=sev0 -nographic ``` 虚拟机启动后,登陆虚拟机。 diff --git "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/10-\345\210\266\344\275\234\344\270\200\344\270\252\346\226\260\347\232\204\347\255\276\345\220\215\351\225\234\345\203\217\345\271\266\351\203\250\347\275\262.md" "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/10-\345\210\266\344\275\234\344\270\200\344\270\252\346\226\260\347\232\204\347\255\276\345\220\215\351\225\234\345\203\217\345\271\266\351\203\250\347\275\262.md" index e71397cb..74ede582 100755 --- "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/10-\345\210\266\344\275\234\344\270\200\344\270\252\346\226\260\347\232\204\347\255\276\345\220\215\351\225\234\345\203\217\345\271\266\351\203\250\347\275\262.md" +++ "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/10-\345\210\266\344\275\234\344\270\200\344\270\252\346\226\260\347\232\204\347\255\276\345\220\215\351\225\234\345\203\217\345\271\266\351\203\250\347\275\262.md" @@ -97,9 +97,12 @@ sudo cosign sign --key cosign.key docker.io/YOUR_USER/YOUR_IMAGE ### offline_fs_kbc +**注:下面操作必须使用root权限进行操作** + - 解压initrd image ``` +sudo su root cp /opt/confidential-containers/share/kata-containers/kata-containers-initrd-csv-hygon-gpu.img.offline_fs_kbc ./initrd.img.gz gunzip initrd.img.gz mkdir initrd @@ -120,6 +123,7 @@ cat /path/to/cosign.pub | base64 --wrap=0 - 打包initrd ```sh +sudo su root cd initrd/ find . | cpio -o -H newc > ../initrd.new.img gzip ../initrd.new.img diff --git "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/11-\344\275\277\347\224\250\350\272\253\344\273\275\351\252\214\350\257\201\344\277\241\346\201\257\344\270\213\350\275\275\351\225\234\345\203\217.md" "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/11-\344\275\277\347\224\250\350\272\253\344\273\275\351\252\214\350\257\201\344\277\241\346\201\257\344\270\213\350\275\275\351\225\234\345\203\217.md" index 3dc0abc2..45033fe9 100755 --- "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/11-\344\275\277\347\224\250\350\272\253\344\273\275\351\252\214\350\257\201\344\277\241\346\201\257\344\270\213\350\275\275\351\225\234\345\203\217.md" +++ "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/11-\344\275\277\347\224\250\350\272\253\344\273\275\351\252\214\350\257\201\344\277\241\346\201\257\344\270\213\350\275\275\351\225\234\345\203\217.md" @@ -57,6 +57,8 @@ sudo docker cp docker_auth_config.json ${KBS_CID}:/usr/local/bin/resources/docke #### offline_fs_kbc +**注:下面操作必须使用root权限进行操作** + - 解包initrd ``` diff --git "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/5-\346\272\220\347\240\201\347\274\226\350\257\221\346\234\272\345\257\206\345\256\271\345\231\250\345\220\204\347\273\204\344\273\266.md" "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/5-\346\272\220\347\240\201\347\274\226\350\257\221\346\234\272\345\257\206\345\256\271\345\231\250\345\220\204\347\273\204\344\273\266.md" index f332e290..a71da74d 100755 --- "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/5-\346\272\220\347\240\201\347\274\226\350\257\221\346\234\272\345\257\206\345\256\271\345\231\250\345\220\204\347\273\204\344\273\266.md" +++ "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/4-KATA-3/5-\346\272\220\347\240\201\347\274\226\350\257\221\346\234\272\345\257\206\345\256\271\345\231\250\345\220\204\347\273\204\344\273\266.md" @@ -88,9 +88,12 @@ cd $HOME/kata-containers/release > 如果只是修改initrd中的文件,或者添加文件到initrd中,我们推荐解包再打包的方式。 +**注:下面操作必须使用root权限进行操作** + #### 解包initrd ``` +sudo su root cp /opt/confidential-containers/share/kata-containers/kata-containers-initrd-csv-hygon-gpu.img.offline_fs_kbc ./initrd.img.gz gunzip initrd.img.gz mkdir initrd @@ -103,6 +106,7 @@ cpio -ivmd < ../initrd.img #### 打包initrd ``` +sudo su root cd initrd/ find . | cpio -o -H newc > ../initrd.new.img gzip ../initrd.new.img diff --git "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/9-FAQ/2-\346\234\272\345\257\206\350\231\232\346\213\237\346\234\272.md" "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/9-FAQ/2-\346\234\272\345\257\206\350\231\232\346\213\237\346\234\272.md" index f099bba1..06c9f066 100644 --- "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/9-FAQ/2-\346\234\272\345\257\206\350\231\232\346\213\237\346\234\272.md" +++ "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/9-FAQ/2-\346\234\272\345\257\206\350\231\232\346\213\237\346\234\272.md" @@ -74,7 +74,7 @@ A: 可能是已经生成过对应的文件,将文件删除重新尝试 - 查看主机内核参数 ``` $ cat /proc/cmdline - 内容必须包含kvm-amd.sev=1 kvm-amd.sev_es=1 ,如果是启动csv3虚拟机还必须包含csv_mem_percentage=50 如果没有在/etc/default/grub 中设置使其生效 + 内容必须包含mem_encrypt=on kvm-amd.sev=1 kvm-amd.sev_es=1 ,如果是启动csv3虚拟机还必须包含csv_mem_percentage=50 如果没有在/etc/default/grub 中设置使其生效 ``` **csv_mem_percentage=50** 中**50** 表示cma内存占用整个内存的百分比,可以根据需要调整 - 检查通用安全证书是否导入 diff --git "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/9-FAQ/3-\346\234\272\345\257\206\345\256\271\345\231\250.md" "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/9-FAQ/3-\346\234\272\345\257\206\345\256\271\345\231\250.md" index d9516398..0913141a 100644 --- "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/9-FAQ/3-\346\234\272\345\257\206\345\256\271\345\231\250.md" +++ "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/9-FAQ/3-\346\234\272\345\257\206\345\256\271\345\231\250.md" @@ -238,9 +238,22 @@ EOF [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.xx.cn:5005"] endpoint = ["https://docker.xx.cn:5005/"] ``` + 4、docker客户端访问docker服务器绕过自签名证书验证的方法,公网证书不需要该步骤 + 在 /etc/docker/daemon.json 中配置如下内容 + ``` + "insecure-registries": ["docker.xx.cn:5005"] + ``` + 配置后重启docker,命令sudo systemctl restart docker + + push 一个容器镜像到仓库示例: + ``` + # docker pull busybox + # docker tag busybox docker.xx.cn:5005/busybox + # docker push docker.xx.cn:5005/busybox + ``` - 4、请参考[2-4-2-测试CSV机密容器](https://openanolis.cn/sig/Hygon-Arch/doc/896792319448421882)获取启动机密容器,私有仓库不需要在**kernel_params 中添加代理操作**,将其中的dockerhub 仓库中对的镜像地址换成自己的私有仓库地址 + 5、请参考[2-4-2-测试CSV机密容器](https://openanolis.cn/sig/Hygon-Arch/doc/896792319448421882)获取启动机密容器,私有仓库不需要在**kernel_params 中添加代理操作**,将其中的dockerhub 仓库中对的镜像地址换成自己的私有仓库地址 启动私有仓库容器示例 ``` @@ -261,6 +274,40 @@ EOF runtimeClassName: kata-qemu-csv EOF ``` +#### Q:私有仓库not authorized 问题排查 +> offline 模式排查 + +登录到虚拟机中 查看etc/aa-offline_fs_kbc-resources.json的default/credential/test字段,将其恢复成原来的格式 + +``` +# echo "ewogICAgImF1dGhzIjogewogICAgICAgICJkb2NrZXIuaW8iOiB7CiAgICAgICAgICAgCJhdXRoIjogImJHbDFaR0ZzYVdKcU9sQmhjM04zTUhKa0lYRmhlZ289IgogICAgICAgIH0sCiAgICAgICAgInF1YXkuaW8iOiB7CiAgICAgICAgICAgICJhdXRoIjogImJHbDFaR0ZzYVdKcU9sQmhjM04zTUhKa0lYRmhlZ289IgogICAgICAgIH0sCiAgICAgICAgImRvY2tlci54eC5jbjo1MDA1IjogewogICAgICAgICAgICAiYXV0aCI6ICJkWE5sY2pwd1lYTnpkMjl5WkFvPSIKICAgICAgICB9CiAgICB9Cn0=" |base64 -d + +{ + "auths": { + "docker.io": { + "auth": "bGl1ZGFsaWJqOlBhc3N3MHJkIXFhego=" + }, + "quay.io": { + "auth": "bGl1ZGFsaWJqOlBhc3N3MHJkIXFhego=" + }, + "docker.xx.cn:5005": { + "auth": "dXNlcjpwYXNzd29yZAo=" + } + } +} +``` +**注意格式是否正确,格式必须是上述格式** + +恢复账号密码,对比是否正确 +``` +# echo "dXNlcjpwYXNzd29yZAo=" |base64 -d +user:password +``` +查看/opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml 配置文件中 kernel_params 参数配置,参数中必须要有**agent.aa_kbc_params=offline_fs_kbc::null** 配置 +> online 模式排查 + +直接查看/opt/simple-kbs/resources/docker_auth_config.json 文件内容是否正确 + #### Q: kubelet inotify_add_watch : no space left on device 问题 修复方法 @@ -287,3 +334,43 @@ EOF 注:**如果机器不能联网**,需要将hag csv export_cert_chain 步骤使用[2-3-5-测试CSV虚拟机迁移](https://openanolis.cn/sig/Hygon-Arch/doc/944532750000611833) 中 **离线导出证书** 章节步骤进行替换制作证书 修复后重新行测试 + +#### Q: kbs 通信排查 + +1、查看/etc/containerd/config.toml 文件和/etc/systemd/system/containerd.service.d/ 目录下文件是否配置了网络代理,代理可能对kbs 通信产生影响,删除代理后重新尝试 + +2、/sys/kernel/security 文件系统检查 + +进入kata 虚拟机后执行下面命令 +``` +# mount |grep sec +securityfs on /sys/kernel/security type securityfs (rw,relatime) +``` +如果没有,检查系统文件权限 + +文件系统的权限正常情况如下: + +``` +# ls -ld / +drwxr-xr-x 22 root root 460 Mar 3 09:13 / +``` +异常情况类似如下: +``` +# ls -ld / +drwxrwxr-x 22 1000 1000 460 Mar 3 08:46 / +``` +造成异常情况可能的原因是解压打包initrd 时候没有使用root 权限,必须使用root 权限进行操作。 + +3、efl_secret 驱动检查 + +进入kata 虚拟机中,执行 +``` +# modprobe efi_secret +# lsmod |grep efi_secret +efi_secret 16384 0 +# ls /sys/kernel/security/secrets/ +coco +``` +正常情况,驱动能够加载,/sys/kernel/security/secrets/coco/ 路径存在,驱动和路径必须要存在,否则不能正常通信 + +进入虚拟机的方法参考上面 **Q: CSV 机密容器pull镜像 网络失败排查流程** 章节 \ No newline at end of file -- Gitee