From a50a149d9a0ce4af17ac62faa0f11aee443be5bf Mon Sep 17 00:00:00 2001 From: yutt Date: Fri, 5 Jul 2024 14:06:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B8=85=E7=A9=BAgitee=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/docs.iml | 8 - .../inspectionProfiles/profiles_settings.xml | 6 - .idea/misc.xml | 4 - .idea/modules.xml | 8 - .idea/vcs.xml | 6 - DEVELOPER_DOCS/maintainers.yaml | 24 - DEVELOPER_DOCS/menu.yaml | 10 - ...72\345\257\206\345\256\271\345\231\250.md" | 19 - ...72\345\257\206\345\256\271\345\231\250.md" | 650 ------ ...72\345\257\206\345\256\271\345\231\250.md" | 260 --- ...345\256\271\345\231\250\347\232\204k8s.md" | 444 ---- ...th\347\232\204\351\225\234\345\203\217.md" | 66 - .../photo1.jpg" | Bin 5436 -> 0 bytes ...76\345\220\215\345\256\271\345\231\250.md" | 48 - ...40\345\257\206\345\256\271\345\231\250.md" | 45 - ...17\345\271\266\351\203\250\347\275\262.md" | 193 -- ...17\345\271\266\351\203\250\347\275\262.md" | 161 -- ...44\271\211simple-kbs\347\232\204policy.md" | 83 - INFRA_DOCS/maintainers.yaml | 0 INFRA_DOCS/menu.yaml | 0 OPERATIONS_DOCS/maintainers.yaml | 24 - OPERATIONS_DOCS/menu.yaml | 12 - .../docsTest.md" | 13 - .../nothing.jpg" | Bin 5436 -> 0 bytes .../windows\345\271\263\345\217\260.md" | 78 - ...55\345\273\272\346\225\231\347\250\213.md" | 268 --- ...13\350\257\225\346\212\245\345\221\212.md" | 1001 --------- ...03\347\233\212\347\273\206\345\210\231.md" | 142 -- .../641.jpg" | Bin 62880 -> 0 bytes ...71\347\233\256\344\273\213\347\273\215.md" | 3 - .../migration_solution.md" | 67 - ...60\345\242\236\346\226\207\346\241\243.md" | 20 - .../CVE\346\274\217\346\264\236.md" | 16 - ...63\351\224\256\347\211\271\346\200\247.md" | 13 - ...77\347\224\250\346\214\207\345\215\227.md" | 66 - ...02\344\270\216\350\264\241\347\214\256.md" | 11 - ...53\351\200\237\345\205\245\351\227\250.md" | 8 - ...73\347\273\237\345\256\211\350\243\205.md" | 8 - .../\350\207\264\350\260\242.md" | 9 - .../202301.md" | 47 - .../test.md" | 2 - PRODUCT_DOCS/assets/datop1.png | Bin 113460 -> 0 bytes PRODUCT_DOCS/assets/datop2.png | Bin 73016 -> 0 bytes PRODUCT_DOCS/assets/datop3.png | Bin 156799 -> 0 bytes PRODUCT_DOCS/maintainers.yaml | 20 - PRODUCT_DOCS/menu.yaml | 68 - ...07\345\215\227\350\257\264\346\230\216.md" | 123 - PRODUCT_DOCS/test/test1.md | 966 -------- PRODUCT_DOCS/test/test2.md | 40 - PRODUCT_DOCS/test/test3.md | 120 - PRODUCT_DOCS/test/test4.md | 118 - PRODUCT_DOCS/test1/test1.md | 6 - PRODUCT_DOCS/test2/test | 2 - PRODUCT_DOCS/zhongjie/test/test1.md | 1 - .../GITEE/302-join-os-package-build.md | 1 - .../GITEE/303-join-kernel-developing.md | 1 - ...-introduction-and-management-principles.md | 275 --- .../GITEE/305-module-and-checklist-of-spec.md | 335 --- .../306-instruction-manual-of-rpmbuild.md | 1235 ---------- .../GITEE/307-build-a-new-project.md | 0 .../308-example-of-epao-nonfree-package.md | 327 --- TECHNOLOGY_DOCS/group.yml | 0 TECHNOLOGY_DOCS/menu.yaml | 20 - ...64\346\230\216\346\226\207\346\241\243.md" | 1984 ----------------- ...346\215\256API\346\226\207\346\241\243.md" | 92 - 65 files changed, 9577 deletions(-) delete mode 100644 .idea/docs.iml delete mode 100644 .idea/inspectionProfiles/profiles_settings.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/modules.xml delete mode 100644 .idea/vcs.xml delete mode 100644 DEVELOPER_DOCS/maintainers.yaml delete mode 100644 DEVELOPER_DOCS/menu.yaml delete mode 100644 "DEVELOPER_DOCS/\346\265\267\345\205\211\345\256\211\345\205\250\350\231\232\346\213\237\345\214\226\346\212\200\346\234\257CSV/CSV\346\234\272\345\257\206\345\256\271\345\231\250-0.1.0/\345\234\250kata CSV\350\231\232\346\213\237\346\234\272\344\270\255\344\275\277\347\224\250\346\234\272\345\257\206\345\256\271\345\231\250.md" delete mode 100644 "DEVELOPER_DOCS/\346\265\267\345\205\211\345\256\211\345\205\250\350\231\232\346\213\237\345\214\226\346\212\200\346\234\257CSV/CSV\346\234\272\345\257\206\345\256\271\345\231\250-0.1.0/\345\237\272\344\272\216 runtime attestation \344\275\277\347\224\250\346\234\272\345\257\206\345\256\271\345\231\250.md" delete mode 100644 "DEVELOPER_DOCS/\346\265\267\345\205\211\345\256\211\345\205\250\350\231\232\346\213\237\345\214\226\346\212\200\346\234\257CSV/CSV\346\234\272\345\257\206\345\256\271\345\231\250-0.5.0/Anolis OS 8.6\346\220\255\345\273\272\345\271\266\346\265\213\350\257\225CSV\346\234\272\345\257\206\345\256\271\345\231\250.md" delete mode 100644 "DEVELOPER_DOCS/\346\265\267\345\205\211\345\256\211\345\205\250\350\231\232\346\213\237\345\214\226\346\212\200\346\234\257CSV/CSV\346\234\272\345\257\206\345\256\271\345\231\250-0.5.0/Anolis OS 8.6\351\203\250\347\275\262\346\224\257\346\214\201CSV\346\234\272\345\257\206\345\256\271\345\231\250\347\232\204k8s.md" delete mode 100644 "DEVELOPER_DOCS/\346\265\267\345\205\211\345\256\211\345\205\250\350\231\232\346\213\237\345\214\226\346\212\200\346\234\257CSV/CSV\346\234\272\345\257\206\345\256\271\345\231\250-0.5.0/CC\345\234\272\346\231\257\345\246\202\344\275\225\344\270\213\350\275\275\351\234\200\350\246\201auth\347\232\204\351\225\234\345\203\217.md" delete mode 100644 "DEVELOPER_DOCS/\346\265\267\345\205\211\345\256\211\345\205\250\350\231\232\346\213\237\345\214\226\346\212\200\346\234\257CSV/CSV\346\234\272\345\257\206\345\256\271\345\231\250-0.5.0/photo1.jpg" delete mode 100644 "DEVELOPER_DOCS/\346\265\267\345\205\211\345\256\211\345\205\250\350\231\232\346\213\237\345\214\226\346\212\200\346\234\257CSV/CSV\346\234\272\345\257\206\345\256\271\345\231\250-0.5.0/\344\275\277\347\224\250offline_fs_kbc\346\250\241\345\274\217\350\277\220\350\241\214\347\255\276\345\220\215\345\256\271\345\231\250.md" delete mode 100644 "DEVELOPER_DOCS/\346\265\267\345\205\211\345\256\211\345\205\250\350\231\232\346\213\237\345\214\226\346\212\200\346\234\257CSV/CSV\346\234\272\345\257\206\345\256\271\345\231\250-0.5.0/\344\275\277\347\224\250offline_sev_kbc\346\250\241\345\274\217\350\277\220\350\241\214\345\212\240\345\257\206\345\256\271\345\231\250.md" delete mode 100644 "DEVELOPER_DOCS/\346\265\267\345\205\211\345\256\211\345\205\250\350\231\232\346\213\237\345\214\226\346\212\200\346\234\257CSV/CSV\346\234\272\345\257\206\345\256\271\345\231\250-0.5.0/\345\210\266\344\275\234\344\270\200\344\270\252\346\226\260\347\232\204\345\212\240\345\257\206\351\225\234\345\203\217\345\271\266\351\203\250\347\275\262.md" delete mode 100644 "DEVELOPER_DOCS/\346\265\267\345\205\211\345\256\211\345\205\250\350\231\232\346\213\237\345\214\226\346\212\200\346\234\257CSV/CSV\346\234\272\345\257\206\345\256\271\345\231\250-0.5.0/\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" delete mode 100644 "DEVELOPER_DOCS/\346\265\267\345\205\211\345\256\211\345\205\250\350\231\232\346\213\237\345\214\226\346\212\200\346\234\257CSV/CSV\346\234\272\345\257\206\345\256\271\345\231\250-0.5.0/\350\207\252\345\256\232\344\271\211simple-kbs\347\232\204policy.md" delete mode 100644 INFRA_DOCS/maintainers.yaml delete mode 100644 INFRA_DOCS/menu.yaml delete mode 100644 OPERATIONS_DOCS/maintainers.yaml delete mode 100644 OPERATIONS_DOCS/menu.yaml delete mode 100644 "OPERATIONS_DOCS/\344\272\272\344\272\272\351\203\275\345\217\257\344\273\245\345\217\202\344\270\216\345\274\200\346\272\220/\346\223\215\344\275\234\345\271\263\345\217\260/docsTest.md" delete mode 100644 "OPERATIONS_DOCS/\344\272\272\344\272\272\351\203\275\345\217\257\344\273\245\345\217\202\344\270\216\345\274\200\346\272\220/\346\223\215\344\275\234\345\271\263\345\217\260/nothing.jpg" delete mode 100644 "OPERATIONS_DOCS/\344\272\272\344\272\272\351\203\275\345\217\257\344\273\245\345\217\202\344\270\216\345\274\200\346\272\220/\346\223\215\344\275\234\345\271\263\345\217\260/windows\345\271\263\345\217\260.md" delete mode 100644 "OPERATIONS_DOCS/\344\272\272\344\272\272\351\203\275\345\217\257\344\273\245\345\217\202\344\270\216\345\274\200\346\272\220/\351\276\231\350\234\245\344\270\200\345\210\273/\344\272\214\345\210\206\346\263\225/Anolis OS\347\216\257\345\242\203\346\220\255\345\273\272\346\225\231\347\250\213.md" delete mode 100644 "OPERATIONS_DOCS/\344\272\272\344\272\272\351\203\275\345\217\257\344\273\245\345\217\202\344\270\216\345\274\200\346\272\220/\351\276\231\350\234\245\344\270\200\345\210\273/\344\272\214\345\210\206\346\263\225/\351\276\231\350\234\245 ANCK 5.10 \345\200\232\345\244\251\345\271\263\345\217\260 MPAM \346\265\213\350\257\225\346\212\245\345\221\212.md" delete mode 100644 "OPERATIONS_DOCS/\344\272\272\344\272\272\351\203\275\345\217\257\344\273\245\345\217\202\344\270\216\345\274\200\346\272\220/\351\276\231\350\234\245\344\270\200\345\210\273/\345\206\222\346\263\241\346\216\222\345\272\217/\346\235\203\347\233\212\347\273\206\345\210\231.md" delete mode 100644 "PRODUCT_DOCS/anolisos/23/\347\224\250\346\210\267\346\214\207\345\215\227/\350\247\243\345\206\263\346\226\271\346\241\210/641.jpg" delete mode 100644 "PRODUCT_DOCS/anolisos/23/\347\224\250\346\210\267\346\214\207\345\215\227/\350\247\243\345\206\263\346\226\271\346\241\210/LMP\351\241\271\347\233\256\344\273\213\347\273\215.md" delete mode 100644 "PRODUCT_DOCS/anolisos/23/\347\224\250\346\210\267\346\214\207\345\215\227/\350\247\243\345\206\263\346\226\271\346\241\210/migration_solution.md" delete mode 100644 "PRODUCT_DOCS/anolisos/23/\347\224\250\346\210\267\346\214\207\345\215\227/\350\247\243\345\206\263\346\226\271\346\241\210/\346\226\260\345\242\236\346\226\207\346\241\243.md" delete mode 100644 "PRODUCT_DOCS/anolisos/8.8/\345\217\221\350\241\214\350\257\264\346\230\216/CVE\346\274\217\346\264\236.md" delete mode 100644 "PRODUCT_DOCS/anolisos/8.8/\345\217\221\350\241\214\350\257\264\346\230\216/\345\205\263\351\224\256\347\211\271\346\200\247.md" delete mode 100644 "PRODUCT_DOCS/anolisos/8.8/\345\217\221\350\241\214\350\257\264\346\230\216/\345\206\205\346\240\270\344\273\243\347\240\201\351\227\250\347\246\201\347\263\273\347\273\237\344\275\277\347\224\250\346\214\207\345\215\227.md" delete mode 100644 "PRODUCT_DOCS/anolisos/8.8/\345\217\221\350\241\214\350\257\264\346\230\216/\345\217\202\344\270\216\350\264\241\347\214\256.md" delete mode 100644 "PRODUCT_DOCS/anolisos/8.8/\345\217\221\350\241\214\350\257\264\346\230\216/\345\277\253\351\200\237\345\205\245\351\227\250.md" delete mode 100644 "PRODUCT_DOCS/anolisos/8.8/\345\217\221\350\241\214\350\257\264\346\230\216/\347\263\273\347\273\237\345\256\211\350\243\205.md" delete mode 100644 "PRODUCT_DOCS/anolisos/8.8/\345\217\221\350\241\214\350\257\264\346\230\216/\350\207\264\350\260\242.md" delete mode 100644 "PRODUCT_DOCS/anolisos/8.8/\345\237\272\346\234\254\350\246\201\346\261\202/202301.md" delete mode 100644 "PRODUCT_DOCS/anolisos/test\351\207\215\345\244\215\347\233\256\345\275\225/test.md" delete mode 100644 PRODUCT_DOCS/assets/datop1.png delete mode 100644 PRODUCT_DOCS/assets/datop2.png delete mode 100644 PRODUCT_DOCS/assets/datop3.png delete mode 100644 PRODUCT_DOCS/maintainers.yaml delete mode 100644 PRODUCT_DOCS/menu.yaml delete mode 100644 "PRODUCT_DOCS/test/1-HML\347\224\250\346\210\267\346\214\207\345\215\227\350\257\264\346\230\216.md" delete mode 100644 PRODUCT_DOCS/test/test1.md delete mode 100644 PRODUCT_DOCS/test/test2.md delete mode 100644 PRODUCT_DOCS/test/test3.md delete mode 100644 PRODUCT_DOCS/test/test4.md delete mode 100644 PRODUCT_DOCS/test1/test1.md delete mode 100644 PRODUCT_DOCS/test2/test delete mode 100644 PRODUCT_DOCS/zhongjie/test/test1.md delete mode 100644 TECHNOLOGY_DOCS/GITEE/302-join-os-package-build.md delete mode 100644 TECHNOLOGY_DOCS/GITEE/303-join-kernel-developing.md delete mode 100644 TECHNOLOGY_DOCS/GITEE/304-package-introduction-and-management-principles.md delete mode 100644 TECHNOLOGY_DOCS/GITEE/305-module-and-checklist-of-spec.md delete mode 100644 TECHNOLOGY_DOCS/GITEE/306-instruction-manual-of-rpmbuild.md delete mode 100644 TECHNOLOGY_DOCS/GITEE/307-build-a-new-project.md delete mode 100644 TECHNOLOGY_DOCS/GITEE/308-example-of-epao-nonfree-package.md delete mode 100644 TECHNOLOGY_DOCS/group.yml delete mode 100644 TECHNOLOGY_DOCS/menu.yaml delete mode 100644 "TECHNOLOGY_DOCS/\345\256\211\345\205\250\347\256\241\347\220\206\347\263\273\347\273\237/ANA\347\224\250\346\210\267API\350\257\264\346\230\216\346\226\207\346\241\243.md" delete mode 100644 "TECHNOLOGY_DOCS/\345\256\211\345\205\250\347\256\241\347\220\206\347\263\273\347\273\237/OpenAnolis\345\256\211\345\205\250\346\225\260\346\215\256API\346\226\207\346\241\243.md" diff --git a/.idea/docs.iml b/.idea/docs.iml deleted file mode 100644 index d0876a7..0000000 --- a/.idea/docs.iml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml deleted file mode 100644 index 105ce2d..0000000 --- a/.idea/inspectionProfiles/profiles_settings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 65531ca..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 6049cfe..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 94a25f7..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/DEVELOPER_DOCS/maintainers.yaml b/DEVELOPER_DOCS/maintainers.yaml deleted file mode 100644 index 539cce6..0000000 --- a/DEVELOPER_DOCS/maintainers.yaml +++ /dev/null @@ -1,24 +0,0 @@ -# 指定所有 maintainers -maintainers: - - default_group: &default_group - - openanolis_id: xx - gitee_id: xxxx - - network_group: &network_group - - openanolis_id: yankai - gitee_id: just-sososo - - openanolis_id: yankai - gitee_id: just-sososo - - io_group: &io_group - - openanolis_id: lisi - gitee_id: lisi - - openanolis_id: xxx - gitee_id: just-sososo - - other_group: &other_group - - openanolis_id: yankai - gitee_id: just-sososo -# 指定文档目录对应的用户组 -paths: - - /*: *default_group - - ./network/*: *network_group - - ./DEVELOPER_DOCS/*: *other_group - - path3: *other_group \ No newline at end of file diff --git a/DEVELOPER_DOCS/menu.yaml b/DEVELOPER_DOCS/menu.yaml deleted file mode 100644 index 74a2565..0000000 --- a/DEVELOPER_DOCS/menu.yaml +++ /dev/null @@ -1,10 +0,0 @@ -DEVELOPER_DOCS: - menu: menu.yml - maintainers: maintainers.yml - 海光安全虚拟化技术CSV: - CSV机密容器-0.1.0: - 虚拟机中使用机密容器: ../海光安全虚拟化技术CSV/CSV机密容器-0.1.0/在kata CSV虚拟机中使用机密容器.md - 使用机密容器: ../海光安全虚拟化技术CSV/CSV机密容器-0.1.0/基于 runtime attestation 使用机密容器.md - CSV机密容器-0.5.0: - Anolis OS 8.6搭建并测试CSV机密容器: ../海光安全虚拟化技术CSV/CSV机密容器-0.5.0/Anolis OS 8.6搭建并测试CSV机密容器.md - CC场景如何下载需要auth的镜像: ../海光安全虚拟化技术CSV/CSV机密容器-0.5.0/CC场景如何下载需要auth的镜像.md \ No newline at end of file diff --git "a/DEVELOPER_DOCS/\346\265\267\345\205\211\345\256\211\345\205\250\350\231\232\346\213\237\345\214\226\346\212\200\346\234\257CSV/CSV\346\234\272\345\257\206\345\256\271\345\231\250-0.1.0/\345\234\250kata CSV\350\231\232\346\213\237\346\234\272\344\270\255\344\275\277\347\224\250\346\234\272\345\257\206\345\256\271\345\231\250.md" "b/DEVELOPER_DOCS/\346\265\267\345\205\211\345\256\211\345\205\250\350\231\232\346\213\237\345\214\226\346\212\200\346\234\257CSV/CSV\346\234\272\345\257\206\345\256\271\345\231\250-0.1.0/\345\234\250kata CSV\350\231\232\346\213\237\346\234\272\344\270\255\344\275\277\347\224\250\346\234\272\345\257\206\345\256\271\345\231\250.md" deleted file mode 100644 index 278d112..0000000 --- "a/DEVELOPER_DOCS/\346\265\267\345\205\211\345\256\211\345\205\250\350\231\232\346\213\237\345\214\226\346\212\200\346\234\257CSV/CSV\346\234\272\345\257\206\345\256\271\345\231\250-0.1.0/\345\234\250kata CSV\350\231\232\346\213\237\346\234\272\344\270\255\344\275\277\347\224\250\346\234\272\345\257\206\345\256\271\345\231\250.md" +++ /dev/null @@ -1,19 +0,0 @@ -# 介绍 - -[Kata Containers ](https://github.com/confidential-containers/kata-containers-CCv0)是一个使用虚拟化来提供隔离层的开源安全容器项目。Kata支持机密计算硬件技术,通过利用可信执行环境(Trusted Execution Environments)来保护客户的高度敏感的工作负载,以防止不受信任的实体(例如:云服务商)访问租客的敏感数据。 - -在kata container中,您能够在在机密虚拟机中运行POD和容器,将主机/owner/管理员/CSP软件栈从kata 的TCB中移除,从而构建一个更强大的云原生多租户架构。具体做法是:在为每个租户使用的容器加密镜像远程Provisioning解密密钥前,先认证pod或容器是否已经运行在了经过认证的环境中。 - -海光CPU支持安全虚拟化技术CSV(China Secure Virtualization),CSV的设计目标是通过CSV虚拟机提供可信执行环境,适用的场景包括云计算、机密计算等。海光2号支持CSV1技术,提供虚拟机内存加密能力,采用国密SM4算法,不同的CSV虚拟机使用不同的加密密钥,密钥由海光安全处理器管理,主机无法解密虚拟机的加密内存。 - -海光CSV加密虚拟机支持两种远程认证方式: - -- pre-attestation指需要在启动TEE之前能够执⾏行行attestation过程。在云上的CSV虚拟机启动的时候,对加载的ovmf,kernel,initrd,cmdline进行静态度量,生成measurement。线下的远程证明验证者对measurement进行验证,确保启动的CSV虚拟机是符合预期的。 -- runtime-attestation:在云上的CSV虚拟机运行的时候,产生带有硬件可执行环境的Quote的TLS证书。线下的远程证明验证者对TLS证书进行验证,确保CSV虚拟机运行在TEE中。 - -基于以上两种远程证明,我们提供了一下两篇最佳实践文档: - -1. 在kata CSV虚拟机中基于pre-attestation使用机密容器的指南,请参考[文档](https://openanolis.cn/sig/coco/doc/533510702679267994)。 -1. 在kata CSV虚拟机中基于runtime-attestation使用机密容器的指南,请参考[文档](https://openanolis.cn/sig/coco/doc/533511548301020780?)。 -修改文档内容 - diff --git "a/DEVELOPER_DOCS/\346\265\267\345\205\211\345\256\211\345\205\250\350\231\232\346\213\237\345\214\226\346\212\200\346\234\257CSV/CSV\346\234\272\345\257\206\345\256\271\345\231\250-0.1.0/\345\237\272\344\272\216 runtime attestation \344\275\277\347\224\250\346\234\272\345\257\206\345\256\271\345\231\250.md" "b/DEVELOPER_DOCS/\346\265\267\345\205\211\345\256\211\345\205\250\350\231\232\346\213\237\345\214\226\346\212\200\346\234\257CSV/CSV\346\234\272\345\257\206\345\256\271\345\231\250-0.1.0/\345\237\272\344\272\216 runtime attestation \344\275\277\347\224\250\346\234\272\345\257\206\345\256\271\345\231\250.md" deleted file mode 100644 index 5123730..0000000 --- "a/DEVELOPER_DOCS/\346\265\267\345\205\211\345\256\211\345\205\250\350\231\232\346\213\237\345\214\226\346\212\200\346\234\257CSV/CSV\346\234\272\345\257\206\345\256\271\345\231\250-0.1.0/\345\237\272\344\272\216 runtime attestation \344\275\277\347\224\250\346\234\272\345\257\206\345\256\271\345\231\250.md" +++ /dev/null @@ -1,650 +0,0 @@ -本文主要为您介绍如何在kata环境中基于海光安全加密虚拟化功能CSV(China Secure Virtualization)技术,通过runtime-attestaion 认证方式,启动一个租户的加密容器镜像。 - -# 前提条件 - -请使用安装Hygon CPU的硬件设备,硬件信息参考如下: - -- CPU型号:Hygon C86 7291 32-core Processor -- 固件版本:1600及以上 -- BIOS设置:开启SME - -BIOS选项SMEE用来控制是否打开内存加密功能,SMEE=Enable表示在BIOS中打开内存加密功能,SMEE=Disable表示在BIOS中关闭内存加密功能。 - -## 1. 安装Anolis 8.4 操作系统 - -请参考[Anolis 8.4 GA说明文档](https://mirrors.openanolis.cn/anolis/8.4/isos/GA/ReadMe.txt)安装anolis 8.4 GA。 - -## 2. 升级kernel到5.10 - -Anlois 8.4 的默认内核版本是4.19,5.10的内核上支持[CSV远程证明功能](https://gitee.com/anolis/cloud-kernel/pulls/14)。请升级kernel 到5.10版本。 - -1. 请参考以下命令,添加Anolis的Experimental repo,并将kernel升级至5.10。 -``` -yum-config-manager --add-repo https://mirrors.openanolis.cn/anolis/8/Experimental/x86_64/os/ && \ - yum update kernel -``` -2. 配置bootloader。 -``` -grubby --update-kernel=ALL --args="mem_encrypt=on kvm_amd.sev=1" -``` -3. 重启机器,请输入以下命令查看内核版本。 -```shell -uname -r -``` -预期输出: -```shell -5.10.134-12.an8.x86_64 -``` - -**注意!!** - -如果您使用的是Anolis 8.6 GA镜像,可能会碰到使能SEV之后,机器Hang住无法进入系统的情况。请参考以下步骤降级grub2-efi之后,可以正常启动这个特性 - -```sh -yum downgrade grub2-efi -``` - -## 3. 检查CSV使能状态 - -1. 在操作系统内执行: -``` -dmesg | grep -i sev -``` - -下图表示CSV已经使能。 - -![](https://oss.openanolis.cn/sig/jyxnkmbnxviifztgmeep) - -2. 检查kvm_amd和ccp模块是否成功安装。 -``` -lsmod | grep kvm -``` -下图表示成功安装。 - -![](https://oss.openanolis.cn/sig/ffhuletbduwrkhkkgaih) - -## 4. 使用hag检查固件版本信息 - -1. 安装hag - -```sh -yum-config-manager --add-repo https://mirrors.openanolis.org/inclavare-containers/anolis8.4 && \ - rpm --import https://mirrors.openanolis.org/inclavare-containers/anolis8.4/RPM-GPG-KEY-rpm-sign && \ - yum install -y hag -``` - -2. 通过hag获得平台状态 - -```sh -sudo hag --platform_status -api_major: 1 -api_minor: 3 -platform_state: CSV_STATE_WORKING -owner: PLATFORM_STATE_SELF_OWN -chip_secure: SECURE -fw_enc: ENCRYPTED -fw_sign: SIGNED -es: CSV ES -build id: 1644 -bootloader version: 0.0.0 -guest_count: 1 -supported csv guest:11 -platform_status command successful - -``` - -注意:固件 build id 要大于等于 1600 才可以支持远程证明。 - -## 5. 执行CSV 检查脚本,检查环境是否满足 (可选) -```sh -./check_csv_env.sh -``` - -脚本内容见附录 - -# 背景信息 - -![](https://oss.openanolis.cn/sig/mftnpcpuvawveyodvhtn) - -1. CSV VM启动; - -2. 下载加密镜像时才会通过attestation-agent将通过vm-attestation hypercall获取的包括attestation-report 、chip-id等内容的CSV VM evidence发送给verdictd server校验; - -3. 校验通过后virdictd才与attestation-agent建立基于rats-tls的可信硬件环境的安全通道、并将加密镜像的解密key通过该安全通道发送给attestation-agent; - -4. CSV VM利用步骤3获得的解密key解密镜像,运行工作负载 - -# 步骤一:配置权限 -### 1. 关闭firewall - Linux系统下面自带了防火墙iptables,iptables可以设置很多安全规则。但是如果配置错误很容易导致各种网络问题。此处建议关闭firewall。 -执行如下操作: -``` -sudo service firewalld stop -``` -执行完毕后结果应类似如下: - -![](https://oss.openanolis.cn/sig/eiaokzmkrqohrzcldbyh) - -### 2. 关闭selinux - Security-Enhanced Linux(SELinux)是一个在內核中实施的强制存取控制(MAC)安全性机制。 -为避免出现权限控制导致的虚拟机启动、访问失败等问题,此处建议关闭selinux。 -执行如下操作: -``` -sudo setenforce 0 -sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config -``` -执行成功后: -使用getenforce检查,结果应类似如下: - -![](https://oss.openanolis.cn/sig/wgkycimdpbhbeewmiqld) - -# 步骤二:安装kata 环境 - -Kata Containers是一个开源的、致力于用轻量级虚拟机构建一个安全的容器运行时的实现,这些虚拟机在感觉和执行上与容器类似,但使用硬件虚拟化技术作为第二层防御,提供了更强的工作负载隔离。 - -关于项目的更多信息,请参见[kata-container](https://github.com/confidential-containers/kata-containers-CCv0)。 - -## 1. 安装kata-containers - -1. 请执行以下命令,安装kata-containers。 -```shell -yum install -y kata-static -``` - -2. 运行以下命令,查看kata-containers是否安装成功。 -```shell -tree /opt/kata/ -``` - -返回结果示例如下,表示已安装成功。 - -![](https://oss.openanolis.cn/sig/bdpavhcztunbimlzvnuz) - -## 2. 安装qemu -此处使用的qemu基于6.2.0构建。 -```shell -yum install -y qemu-system-x86_64 -``` -## 3. 安装guest kernel,initrd,ovmf -ccv0-guest中包含kata运行CSV VM所需的guest kernel、initrd、OVMF、cmdline等文件。 -其中: -guest的rootfs和kernel,需使用efi_secret的内核模块以支持向文件系统中注入secret,加入AA并修改AA设置,自行构建请参考[guest Rootfs and Kernel](https://github.com/confidential-containers/documentation/blob/main/demos/sev-demo/README.md#rootfs-and-kernel) ; -这里提供的OVMF是基于f0f3f5aae7c4d346ea5e24970936d80dc5b60657 进行构建的,也可以使用[edk2-stable202108](https://github.com/tianocore/edk2/releases/tag/edk2-stable202108)后的版本自行构建,以支持CSV。 - -```shell -yum install -y ccv0-guest -``` - -cmdline中记录了CSV VM启动时所需的参数信息,需根据实际使用情况进行修改。可参考以下命令: -```sh -cat < -- 预期结果如下: - -```shell -SME is enabled! -CSV is enabled! -``` - - - -## 背景信息 - -![cncc](../../../../assets/csv_overview.png) - -CSV Pod 级机密容器架构基于 Kata Containers 项目,最大区别是将基于普通虚拟化技术实现的轻量级 Sandbox Pod替换为基于机密计算技术实现的轻量级 TEE Pod,目的是将特定租户的整个 Pod 以及其中的容器运行在受 CPU TEE 保护的执行环境中。除此之外,TEE Pod 内部还额外集成了 image-rs 和 attestation-agent 等组件,它们负责实现容器镜像的拉取、授权、验签、解密、远程证明以及秘密注入等安全特性。 -机密容器的基本运行过程为: - -- 用户使用标准工具制作一个签名和/或加密的受保护的容器镜像,并上传到容器镜像仓库中。 -- 用户命令 Kubernetes 启动这个受保护的容器镜像。kubelet 会向 containerd 发起创建 Pod 的 CRI 请求,containerd 则把请求转发给 kata-runtime。 -- kata runtime 与 Key broker service(simple kbs)建立安全会话,并进行基于CPU TEE 硬件的身份认证与授权。KBS基于安全可信信道发送敏感数据给kata runtime。kata runtime 调用QEMU 将秘密信息注入到guest userland中。之后再调用 QEMU 启动 Pod。 -- CPU TEE 执行初始化,最终启动 kata-agent 监听后续请求。 -- kubelet 向 containerd 发起 Image Pulling 的 CRI 请求,containerd 则把请求转发给 kata-runtime,最终 kata-agent 收到请求并通过 image-rs 子模块提供的容器镜像管理功能,在 TEE 内安全地执行拉取、验签、解密、unpack 以及挂载容器镜像的操作。 - -## 步骤一:部署测试集群 - -### 运行一键部署脚本 - -``` -sudo su root -cd hygon-devkit/csv/confidential-containers -./deploy-confidential_containers-0.5.0.sh -``` - -> 部署相关的详细内容请参考[Anolis OS 8.6部署支持CSV机密容器的k8s](./Anolis OS 8.6部署支持CSV机密容器的k8s.md)。 - -## 步骤二:启动Simple KBS - -[simple kbs](https://github.com/confidential-containers/simple-kbs#readme)是一个密钥代理服务,可以存储并向 workload 提供 secret 。对于 CSV 加密容器示例来说,需要从simple kbs 中获取 secret ,并用于解密已加密的容器。 -在步骤三的示例二中,本文提供了一个简单的加密镜像( docker.io/pawsonfang/busybox:encrypted ),该镜像使用 simple kbs 已经存在的密钥来解密,同时对 policy 不进行校验。此加密镜像只作为测试使用,如您想用于自己的生产用例中,请参考文档[制作一个新的加密镜像并部署](./制作一个新的加密镜像并部署.md)。 - -要了解有关创建 policy 的更多信息,请参考[自定义simple-kbs的policy](./自定义simple-kbs的policy.md)。 - -```shell -cd /opt/simple-kbs -sudo docker compose up -d -``` - -## 步骤三:运行workload - -attestation agent 支持三种CSV平台相关的KBC:[offline_fs_kbc](https://github.com/confidential-containers/attestation-agent/tree/main/kbc/src/offline_fs_kbc), [offline_sev_kbc](https://github.com/confidential-containers/attestation-agent/tree/main/kbc/src/offline_sev_kbc) 和 [online_sev_kbc](https://github.com/confidential-containers/attestation-agent/tree/main/kbc/src/online_sev_kbc)。 - -- offline fs KBC 事先把密钥放置在initrd中,用于验签容器镜像。缺点是每次更新密钥或policy,需要重新制作initrd。 -- offline sev KBC 在**运行时**不会与 Simple KBS 进行通信,而是使用在**VM Boot时期**通过QEMU注入的secret。该机制的缺点是对注入的 secret 长度有限制。 -- online sev KBC 在offline sev KBC的基础上,支持在**运行时**发出请求。online sev KBC 在VM Boot时期通过QEMU注入connection。注入的connection包含一个对称密钥,用于加密和验证 KBC 发出的在线请求。 该连接受 CSV秘密注入过程保护,该过程提供机密性、完整性并防止重放攻击。 simple-kbs 为每个连接生成一个新的对称密钥。 KBC 要求每个在线secret都带有随机 guid 以防止重放攻击。 - -> 本文以online_sev_kbc为主,oflline_sev_kbc 请参考[使用offline_sev_kbc模式运行加密容器](./使用offline_sev_kbc模式运行加密容器.md),offline_fs_kbc 请参考[使用offline_fs_kbc模式运行签名容器](./使用offline_fs_kbc模式运行签名容器.md) - -### 示例一:运行一个未加密的容器镜像 - -为了验证主机上不存在容器镜像,应该登录到 k8s 节点并确保以下命令返回空结果: - -```shell -sudo crictl -r unix:///run/containerd/containerd.sock image ls | grep bitnami/nginx -``` - -启动POD - -```shell -cat <<-EOF | kubectl apply -f - -apiVersion: v1 -kind: Pod -metadata: - labels: - run: nginx - name: nginx -spec: - containers: - - image: bitnami/nginx:1.22.0 - name: nginx - dnsPolicy: ClusterFirst - runtimeClassName: kata -EOF -``` - -预期结果: - -```shell -pod/nginx created -``` - -查看 pod 状态: - -```shell -kubectl get pods -``` - -预期结果如下,注意, STATUS 要是 Running 。 - -```shell -NAME READY STATUS RESTARTS AGE -nginx 1/1 Running 0 3m50s -``` - -### 示例二:运行一个加密容器 - -#### 基于online sev KBC运行加密容器 - -- 编辑 kata 配置文件(kata 的配置文件路径:/opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml): - - - 设置simple-kbs的ip地址 - - ``` - kbs_ip="$(ip -o route get to 8.8.8.8 | sed -n 's/.*src \([0-9.]\+\).*/\1/p')" - sudo sed -i 's#^guest_pre_attestation_kbs_uri = .*#guest_pre_attestation_kbs_uri = "'$kbs_ip':44444"#' /opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml - ``` - - - 设置kbs_mod为online模式,initrd指向支持online_sev_kbc的 - - ``` - initrd = "/opt/confidential-containers/share/kata-containers/kata-ubuntu-20.04-csv-online_sev_kbc.initrd" - guest_pre_attestation_kbs_mode="online" - ``` - - -- 启动POD - -```shell -cat <<-EOF | kubectl apply -f - -apiVersion: v1 -kind: Pod -metadata: - labels: - run: test-en-online - name: test-en-online -spec: - containers: - - image: docker.io/pawsonfang/busybox:encrypted - name: test-en-online - imagePullPolicy: Always - dnsPolicy: ClusterFirst - restartPolicy: Never - runtimeClassName: kata-qemu-csv -EOF -``` - -- 查看 pod 是否启动成功: - -```shell -kubectl get pods -``` - -- 预期结果如下: - -```shell -NAME READY STATUS RESTARTS AGE -test-en-online 1/1 Running 0 146m -``` - -#### 基于offline sev KBC运行加密容器 - -请参考[使用offline_sev_kbc模式运行加密容器](./使用offline_sev_kbc模式运行加密容器.md) - -### 示例三:运行一个签名容器 - -> 示例采用已存在的签名镜像,想要制作新的签名镜像,请参考[制作一个新的签名镜像并部署](./制作一个新的签名镜像并部署.md)。 - -#### 基于online sev KBC运行签名容器 - -- 编辑kata配置文件(kata 的配置文件路径:/opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml) - -修改kata为online_sev_kbc模式,同时使能镜像验签功能: - -``` -initrd = "/opt/confidential-containers/share/kata-containers/kata-ubuntu-20.04-csv-online_sev_kbc.initrd" -guest_pre_attestation_kbs_mode="online" -kernel_params = "agent.config_file=/etc/agent-config.toml agent.enable_signature_verification=true " -``` - -- 启动 Pod - -```shell -cat <<-EOF | kubectl apply -f - -apiVersion: v1 -kind: Pod -metadata: - labels: - run: test-sign-online - name: test-sign-online -spec: - containers: - - image: docker.io/pawsonfang/mybusybox - name: test-sign-online - imagePullPolicy: Always - dnsPolicy: ClusterFirst - restartPolicy: Never - runtimeClassName: kata-qemu-csv -EOF -``` - -- 查看 pod 是否启动成功: - -```shell -kubectl get pods -``` - -- 预期结果如下: - -```shell -NAME READY STATUS RESTARTS AGE -test-sign-online 1/1 Running 0 31h -``` - -#### 基于offline fs KBC运行签名容器 - -请参考[使用offline_fs_kbc模式运行加密容器](./使用offline_fs_kbc模式运行签名容器.md) - - - -## 附录 - -> 对于一些私人仓库,需要登录,才能下载镜像,具体方法请参考[CC场景如何下载需要auth的镜像](./CC场景如何下载需要auth的镜像.md)。 diff --git "a/DEVELOPER_DOCS/\346\265\267\345\205\211\345\256\211\345\205\250\350\231\232\346\213\237\345\214\226\346\212\200\346\234\257CSV/CSV\346\234\272\345\257\206\345\256\271\345\231\250-0.5.0/Anolis OS 8.6\351\203\250\347\275\262\346\224\257\346\214\201CSV\346\234\272\345\257\206\345\256\271\345\231\250\347\232\204k8s.md" "b/DEVELOPER_DOCS/\346\265\267\345\205\211\345\256\211\345\205\250\350\231\232\346\213\237\345\214\226\346\212\200\346\234\257CSV/CSV\346\234\272\345\257\206\345\256\271\345\231\250-0.5.0/Anolis OS 8.6\351\203\250\347\275\262\346\224\257\346\214\201CSV\346\234\272\345\257\206\345\256\271\345\231\250\347\232\204k8s.md" deleted file mode 100644 index 08f07c5..0000000 --- "a/DEVELOPER_DOCS/\346\265\267\345\205\211\345\256\211\345\205\250\350\231\232\346\213\237\345\214\226\346\212\200\346\234\257CSV/CSV\346\234\272\345\257\206\345\256\271\345\231\250-0.5.0/Anolis OS 8.6\351\203\250\347\275\262\346\224\257\346\214\201CSV\346\234\272\345\257\206\345\256\271\345\231\250\347\232\204k8s.md" +++ /dev/null @@ -1,444 +0,0 @@ -# Anolis OS 8.6部署支持CSV机密容器的k8s - -本文主要为您介绍如何基于安全加密虚拟化CSV技术,部署k8s环境。 - -## 前提条件 - -### 1. 下载依赖 - -[hygon-devkit]([anolis/hygon-devkit - 码云 - 开源中国 (gitee.com)](https://gitee.com/anolis/hygon-devkit/tree/master))中包含了部署CSV机密容器需要的脚本和相关组件的rpm包 - -``` -git clone https://gitee.com/anolis/hygon-devkit.git -``` - -### 2. 使能安全功能 - -#### 安装安全工具hag - -hag 是 CSV 平台的命令行管理工具,请按照以下步骤安装 hag: - -```shell -cd hygon-devkit/csv/confidential-containers/ -sudo rpm -ivh --nodeps RPMs/hag-1.0.1868-1.x86_64.rpm -``` - -#### 导入通用安全证书 - -只有导入通用安全证书,才能开启安全功能,如CSV、TPM等 - -``` -sudo /opt/hygon/bin/hag general hgsc_import -``` - - - -## 步骤一:部署测试集群 - -本步骤为您提供快速部署**单节点测试集群**的步骤。您可以根据您的需求,灵活部署集群。 - -### 配置权限 - -#### 启用br_netfilter - -``` -# 临时启用 -sudo modprobe br_netfilter -# 永久启用 -echo "br_netfilter" > /etc/modules-load.d/br_netfilter.conf -``` - -#### 启用vhost-vsock/vhost-net - -``` -# 临时启用 -modprobe vhost-vsock -modprobe vhost-net -# 永久启用 -echo "vhost-vsock vhost-net" > /etc/modules-load.d/vhost.conf -``` - -#### 关闭firewall - -Linux系统下面自带了防火墙iptables,iptables可以设置很多安全规则。但是如果配置错误很容易导致各种网络问题。此处建议关闭firewall。 执行如下操作: - -``` -# 临时关闭 -sudo service firewalld stop -# 关闭自启动 -systemctl disable firewalld.service -``` - -检查 firewall 状态: - -```shell -service firewalld status -``` - -预期结果如下: - -```shell -Redirecting to /bin/systemctl status firewalld.service -● firewalld.service - firewalld - dynamic firewall daemon - Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) - Active: inactive (dead) - Docs: man:firewalld(1) -``` - -#### 关闭selinux - -Security-Enhanced Linux(SELinux)是一个在内核中实施的强制存取控制(MAC)安全性机制。为避免出现权限控制导致的虚拟机启动、访问失败等问题,此处建议关闭selinux。执行如下操作: - -```shell -# 临时关闭,重启失效 -setenforce 0 -# 永久关闭 -sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config -``` - -预期结果如下: - -```shell -setenforce: SELinux is disabled -``` - -#### 允许 iptables 检查桥接流量 - -``` -cat < /etc/containerd/config.toml -``` - -由于默认的 config.toml 使用的是国外的镜像,国内有可能无法访问。请参考以下命令修改为国内镜像。 - -```shell -sed -i 's#registry.k8s.io/pause:3.6#registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6#g' /etc/containerd/config.toml -``` - -启动 containerd - -```shell -systemctl daemon-reload -systemctl enable --now containerd -systemctl status containerd -``` - -### 部署单节点的Kubernetes cluster - -- 请参考[kubernetes](https://github.com/kubernetes/kubernetes)官方指南安装Kubernetes cluster。最低 Kubernetes 版本应为 1.24。 - -``` -cat < configuration-qemu.toml - ├── kata-containers - │ ├── config-5.19.2 - │ ├── kata-containers.img -> kata-ubuntu-latest.image - │ ├── kata-containers-initrd-csv.img -> kata-ubuntu-20.04-csv-online_sev_kbc.initrd - │ ├── kata-ubuntu-20.04-csv-offline_fs_kbc.initrd - │ ├── kata-ubuntu-20.04-csv-offline_sev_kbc.initrd - │ ├── kata-ubuntu-20.04-csv-online_sev_kbc.initrd - │ ├── kata-ubuntu-latest.image - │ ├── vmlinux-5.19.2-102cc - │ ├── vmlinux-5.19.2-102cc-csv - │ ├── vmlinux.container -> vmlinux-5.19.2-102cc - │ ├── vmlinux-csv.container -> vmlinux-5.19.2-102cc-csv - │ ├── vmlinuz-5.19.2-102cc - │ ├── vmlinuz-5.19.2-102cc-csv - │ ├── vmlinuz.container -> vmlinuz-5.19.2-102cc - │ └── vmlinuz-csv.container -> vmlinuz-5.19.2-102cc-csv - ├── kata-qemu - │ └── qemu - │ ├── bios-256k.bin - │ ├── bios.bin - │ ├── bios-microvm.bin - │ ├── edk2-aarch64-code.fd - │ ├── edk2-arm-code.fd - │ ├── edk2-arm-vars.fd - │ ├── edk2-i386-code.fd - │ ├── edk2-i386-secure-code.fd - │ ├── edk2-i386-vars.fd - │ ├── edk2-licenses.txt - │ ├── edk2-x86_64-code.fd - │ ├── edk2-x86_64-secure-code.fd - │ ├── efi-virtio.rom - │ ├── firmware - │ │ ├── 50-edk2-i386-secure.json - │ │ ├── 50-edk2-x86_64-secure.json - │ │ ├── 60-edk2-aarch64.json - │ │ ├── 60-edk2-arm.json - │ │ ├── 60-edk2-i386.json - │ │ └── 60-edk2-x86_64.json - │ ├── hppa-firmware.img - │ ├── kvmvapic.bin - │ ├── linuxboot.bin - │ ├── linuxboot_dma.bin - │ ├── multiboot_dma.bin - │ ├── pvh.bin - │ ├── qboot.rom - │ ├── qemu-nsis.bmp - │ ├── s390-ccw.img - │ ├── s390-netboot.img - │ ├── vof.bin - │ └── vof-nvram.bin - └── ovmf - ├── HYGONCSV.fd - └── OVMF.fd -``` - -### containerd配置文件中添加kata - -``` -vim /etc/containerd/config.toml -``` - -打开配置文件,末尾添加下面的内容 - -``` -[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata] - cri_handler = "" - runtime_type = "io.containerd.kata.v2" - privileged_without_host_devices = true - pod_annotations = ["io.katacontainers.*"] - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata.options] - ConfigPath = "/opt/confidential-containers/share/defaults/kata-containers/configuration.toml" -[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata-qemu] - cri_handler = "cc" - runtime_type = "io.containerd.kata.v2" - privileged_without_host_devices = true - pod_annotations = ["io.katacontainers.*"] - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata-qemu.options] - ConfigPath = "/opt/confidential-containers/share/defaults/kata-containers/configuration-qemu.toml" -[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata-qemu-csv] - cri_handler = "cc" - runtime_type = "io.containerd.kata.v2" - privileged_without_host_devices = true - pod_annotations = ["io.katacontainers.*"] - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata-qemu-csv.options] - ConfigPath = "/opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml" -``` - -### 重启containerd - -``` -sudo systemctl daemon-reload -sudo systemctl restart containerd -``` - -### 为k8s创建对应的RuntimeClass - -``` -cat <<-EOF | kubectl apply -f - -apiVersion: node.k8s.io/v1 -kind: RuntimeClass -metadata: - name: kata -handler: kata -EOF - -cat <<-EOF | kubectl apply -f - -apiVersion: node.k8s.io/v1 -kind: RuntimeClass -metadata: - name: kata-qemu -handler: kata-qemu -EOF - -cat <<-EOF | kubectl apply -f - -apiVersion: node.k8s.io/v1 -kind: RuntimeClass -metadata: - name: kata-qemu-csv -handler: kata-qemu-csv -EOF -``` - -检查创建的 RuntimeClasses。 - -```shell -kubectl get runtimeclass -``` - -预期结果如下: - -```shell -NAME HANDLER AGE -kata kata 23s -kata-qemu kata-qemu 11s -kata-qemu-csv kata-qemu-csv 5s -``` - -### 安装simple-kbs - -``` -cd hygon-devkit/csv/confidential-containers/ -sudo rpm -ivh --nodeps RPMs/simple-kbs-0.5.0-1.x86_64.rpm -``` - -#### 导出CSV证书链 - -Kata 机密容器需要 CSV 证书链从而与guest owner建立安全会话。CSV 证书链必须放在 /opt/csv 中,使用以下命令导出 CSV 证书链: - -```shell -sudo su -mkdir -p /opt/csv -/opt/hygon/bin/hag csv export_cert_chain -cat pdh.cert pek.cert oca.cert cek.cert hsk.cert hrk.cert > /opt/csv/cert_chain.cert -``` - diff --git "a/DEVELOPER_DOCS/\346\265\267\345\205\211\345\256\211\345\205\250\350\231\232\346\213\237\345\214\226\346\212\200\346\234\257CSV/CSV\346\234\272\345\257\206\345\256\271\345\231\250-0.5.0/CC\345\234\272\346\231\257\345\246\202\344\275\225\344\270\213\350\275\275\351\234\200\350\246\201auth\347\232\204\351\225\234\345\203\217.md" "b/DEVELOPER_DOCS/\346\265\267\345\205\211\345\256\211\345\205\250\350\231\232\346\213\237\345\214\226\346\212\200\346\234\257CSV/CSV\346\234\272\345\257\206\345\256\271\345\231\250-0.5.0/CC\345\234\272\346\231\257\345\246\202\344\275\225\344\270\213\350\275\275\351\234\200\350\246\201auth\347\232\204\351\225\234\345\203\217.md" deleted file mode 100644 index f8b2230..0000000 --- "a/DEVELOPER_DOCS/\346\265\267\345\205\211\345\256\211\345\205\250\350\231\232\346\213\237\345\214\226\346\212\200\346\234\257CSV/CSV\346\234\272\345\257\206\345\256\271\345\231\250-0.5.0/CC\345\234\272\346\231\257\345\246\202\344\275\225\344\270\213\350\275\275\351\234\200\350\246\201auth\347\232\204\351\225\234\345\203\217.md" +++ /dev/null @@ -1,66 +0,0 @@ -# CC场景如何下载需要auth的镜像 - -> 对于一些私人仓库,需要登录,才能下载镜像,所以需要添加账号的credential信息到kbs或initrd中。 - -## 添加您的账号信息到docker_auth_config.json - -``` -# 首先获取账户名密码的base64 encode,比如: -$ echo "pawsonfang:Passw0rd123" | base64 -cGF3c29uZmFuZzpQYXNzdzByZDEyMwo= -``` - -## 更新到docker_auth_config.json - -``` -{ - "https://index.docker.io/v1/": { - "auth": "bGl1ZGFsaWJqOlBhc3N3MHJkIXFhego=" - }, - "quay.io": { - "auth": "bGl1ZGFsaWJqOlBhc3N3MHJkIXFhego=" - }, - "docker.io": { - "auth": "cGF3c29uZmFuZzpQYXNzdzByZDEyMwo=" - } -} -``` - -## 更新信息到kbs或initrd - -> 对于online_sev_kbc/offline_fs_kbc,更新信息到kbs中; -> -> 对于offline_fs_kbc,更新信息到initrd; - -### online_sev_kbc/offline_fs_kbc - -- 获取simple-kbs的container id - - ``` - KBS_CID=$(sudo docker ps -aqf "name=^simple-kbs-server") - ``` - - - -- 更新json文件到simple-kbs - - ``` - cd /opt/simple-kbs/resources - sudo docker cp docker_auth_config.json ${KBS_CID}:/usr/local/bin/resources/docker_auth_config.json - ``` - - - -### offline_fs_kbc - -- 解包initrd - -- 将新的json文件的base64更新到resource.json - - ``` - cat /path/to/docker_auth_config.json | base64 --wrap=0 - # 把输出更新到etc/aa-offline_fs_kbc-resources.json的default/credential/test字段 - ``` - -- 打包initrd - diff --git "a/DEVELOPER_DOCS/\346\265\267\345\205\211\345\256\211\345\205\250\350\231\232\346\213\237\345\214\226\346\212\200\346\234\257CSV/CSV\346\234\272\345\257\206\345\256\271\345\231\250-0.5.0/photo1.jpg" "b/DEVELOPER_DOCS/\346\265\267\345\205\211\345\256\211\345\205\250\350\231\232\346\213\237\345\214\226\346\212\200\346\234\257CSV/CSV\346\234\272\345\257\206\345\256\271\345\231\250-0.5.0/photo1.jpg" deleted file mode 100644 index a81c13c4e470a8e7b189c11f37d22b25181bcff8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5436 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 offline_fs_kbc模式,是把验签公钥放在initrd中,不需要借助于simple-kbs,相应的,也就不支持pre_attestation - -- 编辑kata配置文件(kata 的配置文件路径:/opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml。) - -设置kbc_mode,initrd指向offline_fs_kbc模式的initrd,关闭pre_attestation功能,使能镜像验签功能: - -``` -initrd = "/opt/confidential-containers/share/kata-containers/kata-ubuntu-20.04-csv-offline_fs_kbc.initrd" -guest_pre_attestation = false -kernel_params = "agent.aa_kbc_params=offline_fs_kbc::null agent.enable_signature_verification=true " -``` - -- 启动 Pod - -```shell -cat <<-EOF | kubectl apply -f - -apiVersion: v1 -kind: Pod -metadata: - labels: - run: test-sign-offline - name: test-sign-offline -spec: - containers: - - image: docker.io/pawsonfang/mybusybox - name: test-sign-offline - imagePullPolicy: Always - dnsPolicy: ClusterFirst - restartPolicy: Never - runtimeClassName: kata-qemu-csv -EOF -``` - -- 查看 pod 是否启动成功: - -```shell -kubectl get pods -``` - -- 预期结果如下: - -```shell -NAME READY STATUS RESTARTS AGE -test-sign-offline 1/1 Running 0 31h -``` - diff --git "a/DEVELOPER_DOCS/\346\265\267\345\205\211\345\256\211\345\205\250\350\231\232\346\213\237\345\214\226\346\212\200\346\234\257CSV/CSV\346\234\272\345\257\206\345\256\271\345\231\250-0.5.0/\344\275\277\347\224\250offline_sev_kbc\346\250\241\345\274\217\350\277\220\350\241\214\345\212\240\345\257\206\345\256\271\345\231\250.md" "b/DEVELOPER_DOCS/\346\265\267\345\205\211\345\256\211\345\205\250\350\231\232\346\213\237\345\214\226\346\212\200\346\234\257CSV/CSV\346\234\272\345\257\206\345\256\271\345\231\250-0.5.0/\344\275\277\347\224\250offline_sev_kbc\346\250\241\345\274\217\350\277\220\350\241\214\345\212\240\345\257\206\345\256\271\345\231\250.md" deleted file mode 100644 index fe6a282..0000000 --- "a/DEVELOPER_DOCS/\346\265\267\345\205\211\345\256\211\345\205\250\350\231\232\346\213\237\345\214\226\346\212\200\346\234\257CSV/CSV\346\234\272\345\257\206\345\256\271\345\231\250-0.5.0/\344\275\277\347\224\250offline_sev_kbc\346\250\241\345\274\217\350\277\220\350\241\214\345\212\240\345\257\206\345\256\271\345\231\250.md" +++ /dev/null @@ -1,45 +0,0 @@ -# 使用offline_sev_kbc模式运行加密容器.md - -- kata配置文件默认配置为online模式,请修改为下面的字段,使其为offline模式: - - ``` - initrd = "/opt/confidential-containers/share/kata-containers/kata-ubuntu-20.04-csv-offline_sev_kbc.initrd" - guest_pre_attestation_kbs_mode="offline" - ``` - -- 自定义 policy ,请参考[自定义simple-kbs的policy](./自定义simple-kbs的policy.md)。 - - -- 启动 Pod - -```shell -cat <<-EOF | kubectl apply -f - -apiVersion: v1 -kind: Pod -metadata: - labels: - run: test-en-offline - name: test-en-offline -spec: - containers: - - image: docker.io/pawsonfang/busybox:encrypted - name: test-en-offline - imagePullPolicy: Always - dnsPolicy: ClusterFirst - restartPolicy: Never - runtimeClassName: kata-qemu-csv -EOF -``` - -- 查看 pod 是否启动成功: - -```shell -kubectl get po -``` - -- 预期结果如下: - -```shell -NAME READY STATUS RESTARTS AGE -test-en-offline 1/1 Running 0 31h -``` diff --git "a/DEVELOPER_DOCS/\346\265\267\345\205\211\345\256\211\345\205\250\350\231\232\346\213\237\345\214\226\346\212\200\346\234\257CSV/CSV\346\234\272\345\257\206\345\256\271\345\231\250-0.5.0/\345\210\266\344\275\234\344\270\200\344\270\252\346\226\260\347\232\204\345\212\240\345\257\206\351\225\234\345\203\217\345\271\266\351\203\250\347\275\262.md" "b/DEVELOPER_DOCS/\346\265\267\345\205\211\345\256\211\345\205\250\350\231\232\346\213\237\345\214\226\346\212\200\346\234\257CSV/CSV\346\234\272\345\257\206\345\256\271\345\231\250-0.5.0/\345\210\266\344\275\234\344\270\200\344\270\252\346\226\260\347\232\204\345\212\240\345\257\206\351\225\234\345\203\217\345\271\266\351\203\250\347\275\262.md" deleted file mode 100644 index 8d0139a..0000000 --- "a/DEVELOPER_DOCS/\346\265\267\345\205\211\345\256\211\345\205\250\350\231\232\346\213\237\345\214\226\346\212\200\346\234\257CSV/CSV\346\234\272\345\257\206\345\256\271\345\231\250-0.5.0/\345\210\266\344\275\234\344\270\200\344\270\252\346\226\260\347\232\204\345\212\240\345\257\206\351\225\234\345\203\217\345\271\266\351\203\250\347\275\262.md" +++ /dev/null @@ -1,193 +0,0 @@ -# 制作一个新的加密镜像并部署 - -本文主要为您介绍如何制作一个新的加密镜像,并部署pod。 - -#### 安装依赖 - -需要借助[skopeo](https://github.com/containers/skopeo)加密容器镜像,安装步骤如下: - -``` -# 安装go,用于编译 -sudo yum install go -y -# 安装git、make等依赖 -sudo yum install git make gcc gpgme-devel libassuan-devel device-mapper-devel -y -# 源码安装skopeo -git clone https://github.com/containers/skopeo $(go env GOPATH)/src/github.com/containers/skopeo -cd $(go env GOPATH)/src/github.com/containers/skopeo -DISABLE_DOCS=1 make bin/skopeo -sudo DISABLE_DOCS=1 make install -# 检查命令可用 -skopeo -v -``` - -#### 加密镜像 - -Attestation Agent可以启动一个grpc服务来支持对映像进行加密。克隆仓库: - -``` -attestation_agent_tag="v0.5.0" -git clone https://github.com/confidential-containers/attestation-agent.git -(cd attestation-agent && git checkout -b "branch_${attestation_agent_tag}" "${attestation_agent_tag}") -``` - -编译并启动CoCo Keyprovider: - -``` -# 安装依赖 -curl https://sh.rustup.rs -sSf | sh -source "$HOME/.cargo/env" -sudo yum install openssl-devel -y -# 编译并启动 -cd attestation-agent/coco_keyprovider -RUST_LOG=coco_keyprovider cargo run --release -- --socket 127.0.0.1:50000 -``` - -创建 Attestation Agent keyprovider: - -``` -cat > ocicrypt.conf < key1 -``` - -把你想要加密的镜像加密并拷贝到当前目录,本例中使用的是`busybox`镜像。其中密钥使用`keypath`指定,`keyid`此处设置为`kbs:///default/key/key_id2`,密钥算法设置为`A256GCM`,`——insecure-policy`标志用于连接到认证代理,不会影响项目的安全性。 - -``` -OCICRYPT_KEYPROVIDER_CONFIG=ocicrypt.conf skopeo copy --insecure-policy --encryption-key provider:attestation-agent:keypath=$(pwd)/key1::keyid=kbs:///default/key/key_id2::algorithm=A256GCM docker://busybox oci:busybox:encrypted -``` - -加密后,可以看到在当前目录下生成了`busybox`目录。 - -确认镜像确实已经被加密: - -``` -cat ./busybox/index.json | python3 -m json.tool -``` - -xxxxxxxxxx NAME               READY   STATUS   RESTARTS   AGEtest-en-offline     1/1     Running   0         31hshell - -``` -{ - "schemaVersion": 2, - "manifests": [ - { - "mediaType": "application/vnd.oci.image.manifest.v1+json", - "digest": "sha256:f594fcb13ca12e4ebf400b5e8ab715cb4f30adb335b8e31366d61f5350029e6e", - "size": 1195, - "annotations": { - "org.opencontainers.image.ref.name": "encrypted" - } - } - ] -} -``` - -根据digest找到对应的manifest:`./busybox/blocs/sha256/73135775766027c5006e7744fa8007e812afec905064743c68b780dd49c1eeaf` - -``` -cat ./busybox/blobs/sha256/f594fcb13ca12e4ebf400b5e8ab715cb4f30adb335b8e31366d61f5350029e6e | python3 -m json.tool -``` - -期望结果: - -``` -{ - "schemaVersion": 2, - "mediaType": "application/vnd.oci.image.manifest.v1+json", - "config": { - "mediaType": "application/vnd.oci.image.config.v1+json", - "digest": "sha256:3488e6e2e41e62fc51be840cd61d806d5b45defdb84a2e6c99ea8a0edb4b6cc7", - "size": 575 - }, - "layers": [ - { - "mediaType": "application/vnd.oci.image.layer.v1.tar+gzip+encrypted", - "digest": "sha256:0dfdc90a4529ca0b38e575945748d6f8258ad2ea2cce8755b8a9f0e1566e447f", - "size": 2592227, - "annotations": { - "org.opencontainers.image.enc.keys.provider.attestation-agent": "eyJraWQiOiJrYnM6Ly8vZGVmYXVsdC90ZXN0LWtleS8xIiwid3JhcHBlZF9kYXRhIjoiLzNMeWhsdVE1aG42MVVjN0ZDM1BWTlNDUlV0YitLc1h5ZWhGTERtaUJlcUE4cStrcGgxbFpwckR4cjh0ck5RUFpxRDB2UlFobVFFWTM1YnV3R05VeGRINXdyeWtCa0x2OTFkSHFHMEJOY1FETVNhNTBBZFpqb00xTHQ0SUdIUDlZeEpGL3hmcWk4RFFBUmdXNjhpV3hlcWgxTFRMQ01hcUg5TzUxeXduYmcxTmJ3aFM0aXdkRSttMGRhOWwyTXpqeklrbjRtN3pWZUl6cFRVVHJuS0gyM1RmWmVWZUZsZVMxY0VscWhGdGw4bnZDYmphNlZyQlFYTzRFVVZUdjkvemxzS2xnRnl3aEhnL1VvUHBmMXMvY2RJPSIsIml2IjoiQUFBQUFBQUFBQUFBQUFBQSIsIndyYXBfdHlwZSI6IkEyNTZHQ00ifQ==", - "org.opencontainers.image.enc.pubopts": "eyJjaXBoZXIiOiJBRVNfMjU2X0NUUl9ITUFDX1NIQTI1NiIsImhtYWMiOiJqWHhYMGVWWGR2RHAxbVpxSHVXYzFJWGFwazhicmhKMHdpbDl5K3JLUXc4PSIsImNpcGhlcm9wdGlvbnMiOnt9fQ==" - } - } - ] -} -``` - -其中`mediaType`为`application/vnd.oci.image.layer.v1.tar+gzip+encrypted`,表示该layer已被加密。 - -#### 上传镜像到远程的image registry - -记得把docker.io/myrepo替换为自己的仓库地址: - -``` -# 登录您的image registry,比如登录docker.io -skopeo login docker.io -# 上传镜像 -skopeo copy --insecure-policy oci:busybox:encrypted docker://docker.io/myrepo/busybox:encrypted -``` - -#### 更新密钥到kbs - -- 设置数据库参数 - - ``` - KBS_DB_USER="kbsuser" - KBS_DB_PW="kbspassword" - KBS_DB="simple_kbs" - KBS_DB_TYPE="mysql" - KBS_DB_HOST=$(sudo docker network inspect simple-kbs_default \ - | jq -r '.[].Containers[] | select(.Name | test("simple-kbs[_-]db.*")).IPv4Address' \ - | sed "s|/.*$||g") - ``` - -- 获取加密密钥的base64 encode - -```shell -enc_key=$(cat key1 | base64) -echo $enc_key -``` - -- 将 加密密钥 注入 mysql 中。 - -```shell -mysql -u${KBS_DB_USER} -p${KBS_DB_PW} -h ${KBS_DB_HOST} -D ${KBS_DB} < 注意:`default/key/key_id2`要与skopeo参数相同;使用offline_sev_kbc时,要设置`configuration-qemu-csv.toml`中`guest_pre_attestation_keyset`的值为`KEYSET-2` - -#### 使用新的加密镜像启动pod - -> myrepo替换为自己的仓库地址 - -``` -cat <<-EOF | kubectl apply -f - -apiVersion: v1 -kind: Pod -metadata: - labels: - run: test-en-online2 - name: test-en-online2 -spec: - containers: - - image: docker.io/myrepo/busybox:encrypted - name: test-en-online2 - imagePullPolicy: Always - dnsPolicy: ClusterFirst - restartPolicy: Never - runtimeClassName: kata-qemu-csv -EOF -``` - diff --git "a/DEVELOPER_DOCS/\346\265\267\345\205\211\345\256\211\345\205\250\350\231\232\346\213\237\345\214\226\346\212\200\346\234\257CSV/CSV\346\234\272\345\257\206\345\256\271\345\231\250-0.5.0/\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/DEVELOPER_DOCS/\346\265\267\345\205\211\345\256\211\345\205\250\350\231\232\346\213\237\345\214\226\346\212\200\346\234\257CSV/CSV\346\234\272\345\257\206\345\256\271\345\231\250-0.5.0/\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" deleted file mode 100644 index 195b4af..0000000 --- "a/DEVELOPER_DOCS/\346\265\267\345\205\211\345\256\211\345\205\250\350\231\232\346\213\237\345\214\226\346\212\200\346\234\257CSV/CSV\346\234\272\345\257\206\345\256\271\345\231\250-0.5.0/\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" +++ /dev/null @@ -1,161 +0,0 @@ -# 制作一个新的签名镜像并部署 - -本文主要为您介绍如何制作一个新的签名镜像,并部署pod。 - -## 安装cosign - -``` -git clone https://github.com/sigstore/cosign -cd cosign -go install ./cmd/cosign -$(go env GOPATH)/bin/cosign -``` - -## 准备镜像 - -> 示例中使用docker.io存放签名镜像 - -``` -# 使用自己的账号、密码登录 -sudo docker login -# 以busybox为例 -sudo docker pull busybox -# YOUR_USER替换为自己的用户名,YOUR_IMAGE替换为自己想要命名的image name -sudo docker image tag busybox docker.io/YOUR_USER/YOUR_IMAGE -sudo docker push docker.io/YOUR_USER/YOUR_IMAGE -``` - -## 使用cosign签名镜像 - -``` -$(go env GOPATH)/bin/cosign generate-key-pair -# 输入密码,密码是用来加密私钥的 -$(go env GOPATH)/bin/cosign login docker.io --username YOUR_USER -sudo $(go env GOPATH)/bin/cosign sign --key cosign.key docker.io/YOUR_USER/YOUR_IMAGE -``` - -## 自定义policy.json - -> 创建一个新的policy.json,自定义image的pull规则,如下面示例所示,注意keyPath对应的位置用于索引公钥。 - -``` -{ - "default": [{"type": "insecureAcceptAnything"}], - "transports": { - "docker": { - "docker.io/pawsonfang/mybusybox": [ - { - "type": "sigstoreSigned", - "keyPath": "kbs:///default/cosign-public-key/test" - } - ], - "docker.io/pawsonfang/busybox_signed": [ - { - "type": "sigstoreSigned", - "keyPath": "kbs:///default/cosign-public-key/test2" - } - ] - } - } -} -``` - -## 根据kbc_mod更新公钥和policy - -> 对于online_sev_kbc,将公钥和policy添加到数据库; -> -> 对于offline_fs_kbc,将公钥和policy更新到initrd中。 - -### online_sev_kbc - -- 获取simple-kbs的container id - - ``` - KBS_CID=$(sudo docker ps -aqf "name=^simple-kbs-server") - ``` - - - -- 更新policy文件和公钥文件到simple-kbs - - ``` - cd /opt/simple-kbs/resources - sudo docker cp /path/to/policy.json ${KBS_CID}:/usr/local/bin/resources/image_pull_policy.json - sudo docker cp /path/to/cosign.pub ${KBS_CID}:/usr/local/bin/resources/cosign2.pub - ``` - -- 设置数据库参数 - - ``` - KBS_DB_USER="kbsuser" - KBS_DB_PW="kbspassword" - KBS_DB="simple_kbs" - KBS_DB_TYPE="mysql" - KBS_DB_HOST=$(sudo docker network inspect simple-kbs_default \ - | jq -r '.[].Containers[] | select(.Name | test("simple-kbs[_-]db.*")).IPv4Address' \ - | sed "s|/.*$||g") - ``` - - 插入新的公钥keyid:resource_path信息到数据库中 - - ``` - mysql -u${KBS_DB_USER} -p${KBS_DB_PW} -h ${KBS_DB_HOST} -D ${KBS_DB} < ../initrd.new.img -gzip ../initrd.new.img -cd ../ && mv initrd.new.img.gz initrd.new.img -cp initrd.new.img /opt/confidential-containers/share/kata-containers/kata-ubuntu-20.04-csv-offline_fs_kbc.initrd -``` - -#### 使用新的image启动pod,此处以online_sev_kbc为例 - -> YOUR_USER/YOUR_IMAGE替换为自己的镜像地址 - -``` -cat <<-EOF | kubectl apply -f - -apiVersion: v1 -kind: Pod -metadata: - labels: - run: test-sign-online2 - name: test-sign-online2 -spec: - containers: - - image: docker.io/YOUR_USER/YOUR_IMAGE - name: test-sign-online2 - imagePullPolicy: Always - dnsPolicy: ClusterFirst - restartPolicy: Never - runtimeClassName: kata-qemu-csv -EOF -``` - diff --git "a/DEVELOPER_DOCS/\346\265\267\345\205\211\345\256\211\345\205\250\350\231\232\346\213\237\345\214\226\346\212\200\346\234\257CSV/CSV\346\234\272\345\257\206\345\256\271\345\231\250-0.5.0/\350\207\252\345\256\232\344\271\211simple-kbs\347\232\204policy.md" "b/DEVELOPER_DOCS/\346\265\267\345\205\211\345\256\211\345\205\250\350\231\232\346\213\237\345\214\226\346\212\200\346\234\257CSV/CSV\346\234\272\345\257\206\345\256\271\345\231\250-0.5.0/\350\207\252\345\256\232\344\271\211simple-kbs\347\232\204policy.md" deleted file mode 100644 index def57a8..0000000 --- "a/DEVELOPER_DOCS/\346\265\267\345\205\211\345\256\211\345\205\250\350\231\232\346\213\237\345\214\226\346\212\200\346\234\257CSV/CSV\346\234\272\345\257\206\345\256\271\345\231\250-0.5.0/\350\207\252\345\256\232\344\271\211simple-kbs\347\232\204policy.md" +++ /dev/null @@ -1,83 +0,0 @@ -# 自定义simple KBS 的policy - -- /opt/confidential-containers/bin/csv-measure.py是一个实用程序,用于使用提供的 ovmf、initrd、kernel、cmdline等作为参数来计算 CSV guest固件测量值。 - -- 计算内核的append值(需要先启动一个offline_sev_kbc或online_sev_kbc的pod) - -```shell -duration=$((SECONDS+30)) -set append - -while [ $SECONDS -lt $duration ]; do - qemu_process=$(ps aux | grep qemu | grep append || true) - if [ -n "${qemu_process}" ]; then - append=$(echo ${qemu_process} \ - | sed "s|.*-append \(.*$\)|\1|g" \ - | sed "s| -.*$||") - break - fi - sleep 1 -done - -echo "${append}" > cmdline_file -``` - -- 根据ovmf、kernel、initrd_path和cmdline_file的地址设置参数。 - - ovmf、kernel和initrd_path的地址请参考kata 的配置文件 - - kata 的配置文件路径:/opt/confidential-containers/share/defaults/kata-containers/configuration-qemu-csv.toml。 - -```shell -ovmf_path="/opt/confidential-containers/share/ovmf/HYGONCSV.fd" -kernel_path="/opt/confidential-containers/share/kata-containers/vmlinuz-csv.container" -initrd_path="/opt/confidential-containers/share/kata-containers/kata-ubuntu-20.04-csv-online_sev_kbc.initrd" -cmdline_path=${PWD}/cmdline_file -``` - -- 使用csv-measure.py 来计算 CSV guest 的Launch digest。 - -```shell - #安装依赖 - sudo pip3 install snowland-smx - #计算digest - measurement=$(/opt/confidential-containers/bin/csv-measure.py \ - --ovmf "${ovmf_path}" \ - --kernel "${kernel_path}" \ - --initrd "${initrd_path}" \ - --cmdline "${cmdline_path}" \ -) -# 确认measurement计算成功 -echo $measurement -``` - -- 设置simple kbs 数据库参数 - -```shell -KBS_DB_USER="kbsuser" -KBS_DB_PW="kbspassword" -KBS_DB="simple_kbs" -KBS_DB_TYPE="mysql" -KBS_DB_HOST=$(sudo docker network inspect simple-kbs_default \ - | jq -r '.[].Containers[] | select(.Name | test("simple-kbs[_-]db.*")).IPv4Address' \ - | sed "s|/.*$||g") -``` - -- 由于本文使用的加密镜像( docker.io/pawsonfang/busybox:encrypted ),是采用 simple kbs 已经存在的密钥来解密,该镜像的 enc_key 值如下。用户需要根据加密镜像按需设置enc_key。 - -```shell -enc_key=C1z522QYM9YZDcz+7nstjYD2HNX1/2/okVStRA2ChDo= -``` - -- 将 自定义policy 注入 mysql 中。 - - policy的组成包括:digests、policies、api_major、api_minor、build_ids等信息。详情请参考[链接](https://github.com/confidential-containers/simple-kbs/blob/main/db/db-mysql.sql#L73)。 - - 我们以digests为例子,向用户展示如何注入自定义policy 。用户可以根据需求自定义Policy。 - -```shell -# 安装依赖 -yum install mysql -y -mysql -u${KBS_DB_USER} -p${KBS_DB_PW} -h ${KBS_DB_HOST} -D ${KBS_DB} <New/File a Bug->Select a classification->Select a product->Bug创建页面。具体如下:首先,在首页点击New或File a Bug按钮,进行创建Bug。 - 然后会提示让选择一个classification, classification是Bug的一级分类。 \ No newline at end of file diff --git "a/OPERATIONS_DOCS/\344\272\272\344\272\272\351\203\275\345\217\257\344\273\245\345\217\202\344\270\216\345\274\200\346\272\220/\346\223\215\344\275\234\345\271\263\345\217\260/nothing.jpg" "b/OPERATIONS_DOCS/\344\272\272\344\272\272\351\203\275\345\217\257\344\273\245\345\217\202\344\270\216\345\274\200\346\272\220/\346\223\215\344\275\234\345\271\263\345\217\260/nothing.jpg" deleted file mode 100644 index a81c13c4e470a8e7b189c11f37d22b25181bcff8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5436 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 - -*** -图片3 - ---- - -*斜体文字* - -_斜体文字_ - -**粗体文字** - -__粗体文字__ - -***粗斜体文字*** - -___粗斜体文字___ - - -*** -* * * -****** -- - - ------- - -baidu.com -sina.com -~~tencent.com~~ - - - -* 第一项 -* 第二项 -* 第三项 - -+ 第一项 -+ 第二项 -+ 第三项 - -- 第一项 -- 第二项 -- 第三项 - -1. 第一项: - - 第一项嵌套的第一个元素 - - 第一项嵌套的第二个元素 -2. 第二项: - - 第二项嵌套的第一个元素 - - 第二项嵌套的第二个元素 - -> 区块引用 -> Markdown教程 -> 学的不仅是技术更是梦想 \ No newline at end of file diff --git "a/OPERATIONS_DOCS/\344\272\272\344\272\272\351\203\275\345\217\257\344\273\245\345\217\202\344\270\216\345\274\200\346\272\220/\351\276\231\350\234\245\344\270\200\345\210\273/\344\272\214\345\210\206\346\263\225/Anolis OS\347\216\257\345\242\203\346\220\255\345\273\272\346\225\231\347\250\213.md" "b/OPERATIONS_DOCS/\344\272\272\344\272\272\351\203\275\345\217\257\344\273\245\345\217\202\344\270\216\345\274\200\346\272\220/\351\276\231\350\234\245\344\270\200\345\210\273/\344\272\214\345\210\206\346\263\225/Anolis OS\347\216\257\345\242\203\346\220\255\345\273\272\346\225\231\347\250\213.md" deleted file mode 100644 index a9f7ecb..0000000 --- "a/OPERATIONS_DOCS/\344\272\272\344\272\272\351\203\275\345\217\257\344\273\245\345\217\202\344\270\216\345\274\200\346\272\220/\351\276\231\350\234\245\344\270\200\345\210\273/\344\272\214\345\210\206\346\263\225/Anolis OS\347\216\257\345\242\203\346\220\255\345\273\272\346\225\231\347\250\213.md" +++ /dev/null @@ -1,268 +0,0 @@ -# 写在前面 - -Anolis OS 是 OpenAnolis 社区推出的完全开源、中立、开放的发行版,它支持多计算架构,也面向云端场景优化。 - -在您使用Anolis OS之前,我们提供了一个预装Anolis OS的在线机器资源服务。我们**强烈建议**您访问[**龙蜥实验室**](https://lab.openanolis.cn/#/apply/home),使用Web页面及机器人等形式自动创建和管理机器资源,以此来对Anolis OS进行体验。 - -您可以访问[龙蜥实验室使用指南](https://www.yuque.com/anolis-docs/community/peng85),来进行**一键申请**和 **免费试用** 。 - -![](https://intranetproxy.alipay.com/skylark/lark/0/2022/png/63156315/1656644119956-01a1cabe-eb42-4c64-82d8-902d01afb26d.png) - -我们提供两种方式安装Anolis OS: - -* ISO镜像安装 -* qcow虚拟机镜像安装 - -## 一、通过ISO进行安装 - -### 1.1 ISO镜像下载 - -登陆下载界面获取Anolis OS最新iso镜像文件 - -[https://openanolis.cn/download](https://openanolis.cn/download) - -![](https://intranetproxy.alipay.com/skylark/lark/0/2022/png/63156315/1656504756808-2cdce132-2ff8-4d66-a96d-18cd6525601a.png) - -### 1.2 镜像安装 - -参考该文档,通过图形化安装接口部署Anolis8/7至目标平台: - -[https://www.yuque.com/anolis-docs/manual/installation](https://www.yuque.com/anolis-docs/manual/installation) - -## 二、 通过qcow虚拟机镜像安装 - -首先,验证CPU是否支持KVM; - -`egrep '(vmx|svm)' /proc/cpuinfo` - -如果结果中有vmx(Intel)或svm(AMD)字样,就说明CPU是支持的。 - -如果您是买的ECS,或者已经开了虚拟机,那大概率没办法再通过KVM的方式进行安装。 - -### 2.1 虚拟机镜像下载 - -登陆下载界面获取Anolis OS最新qcow2镜像文件 - -[https://openanolis.cn/download](https://openanolis.cn/download) - -这里以7.9为例:点击网址中的下载按钮后,选择相应架构的文件夹进入,既可以看到对应的下载列表,请选择**AnolisOS-7.9-GA-x86_64-ANCK.qcow2**文件进行下载。 - -![](https://intranetproxy.alipay.com/skylark/lark/0/2022/png/63156315/1656574325523-958feb42-fbbf-4974-9bd9-9d6827dd99db.png) - -### 2.2 安装依赖包 - -`sudo yum install -y qemu-kvm libvirt virt-install bridge-utils` - -### 2.3 启动前配置 - -#### 2.3.1 libvirt服务 - -开启libvirt服务 - -`systemctl start libvirtd` - -设置开机启动 - -`systemctl enable libvirtd` - -查看状态操作结果 - -`systemctl status libvirtd` - -![](https://intranetproxy.alipay.com/skylark/lark/0/2022/png/63156315/1656557798218-65ab7a31-63e2-4200-bca5-2ed9f65a169e.png) - -`systemctl is-enabled libvirtd` - -![](https://intranetproxy.alipay.com/skylark/lark/0/2022/png/63156315/1656557863822-cec7389f-3748-43c9-8878-e03fe5906f4f.png) - -#### 2.3.2 打开虚拟化的网络支持 - -`sudo virsh net-autostart default` - -`sudo virsh net-start default` - -`sudo sysctl -w net.ipv4.ip_forward=1` # 也可以写到配置文件里持久化 - -**TIPS:** - -`sudo virsh net-autostart default` 执行过程中可能会卡住,此时将 `/etc/modprobe.d/blacklist.conf` 文件中的 "blacklist nf_conntrack_ipv4" 语句注释掉,例如 - -``` -... -#blacklist nf_conntrack_ipv4 -``` - -之后再执行 `sudo virsh net-autostart default` - -#### 2.3.3 修改kvm权限 - -直接设置成root启动 - -``` -cat >> /etc/libvirt/qemu.conf << EOF -user = "root" -group = "root" -EOF -systemctl restart libvirtd.service -``` - -#### 2.3.4 建立链接 - -查看qemu-kvm路径 - -`whereis qemu-kvm` - -``` -qemu-kvm: /etc/qemu-kvm /usr/libexec/qemu-kvm /usr/share/qemu-kvm /usr/share/man/man1/qemu-kvm.1.gz -``` - -建立软连接 - -`ln -s /usr/libexec/qemu-kvm /usr/bin/qemu-kvm` - -#### 2.3.5 创建xml配置文件 - -示例文件的名称为anolis.xml,请根据提示修改您的镜像路径 - -您可以按照注释自己酌情修改。 - -``` - - anolis - 16777216 - 8 - - - - - hvm - - - - - - - - - - - - destroy - restart - restart - - - /usr/bin/qemu-kvm - - - - - - - - - - - - - - - - - - - - - - - - - - - -``` - -### 2.4 虚拟机的启动与管理 - -#### 2.4.1 使用virsh命令启动虚拟机 - -新机器执行virsh命令可能会有setlocale: No such file or directory的警告,可安装语言包 - -`yum install -y glibc-langpack-zh` - -`sudo virsh define 虚拟机名.xml` - -`sudo virsh start 虚拟机名` # 请修改为KVM虚拟机的真实名称。 - -vm 默认的账户和密码为: - -* 用户名:`anuser` -* 密码:`anolisos` - -#### 2.4.2 切换root用户并允许ssh root登录 - -1. `sudo su` -2. 输入密码`anolisos` -3. 修改root密码:`passwd root` -4. 修改`/etc/ssh/sshd_config`: - -``` -PasswordAuthentication yes - -PermitRootLogin yes -``` - -#### 2.4.3 虚拟机的访问 - -可以通过下列方式访问VM: - -* 通过 vnc 访问宿主机的 IP,登录VM,查看 IP -* 通过 `sudo virsh console 虚拟机名` 登录 VM(请注意可能会有一段时间的黑屏,VM启动过程没有输出到屏幕),查看 IP -* 获取到 Guest IP 之后,通过 `ssh root@` 登录 VM. - -#### 2.4.3 查询虚拟机在宿主机对应串口设备 - -`virsh ttyconsole 虚拟机名` - -#### 2.4.4 其余virsh命令 - -`virsh list` #显示本地活动虚拟机 - -`virsh list –-all ` #显示本地所有的虚拟机(活动的+不活动的) - -`virsh define 虚拟机名.xml` #通过配置文件定义一个虚拟机(这个虚拟机还不是活动的) - -`virsh undefine 虚拟机名.xml` #删除虚拟机配置 - -`virsh start 虚拟机名` #启动名字为ubuntu的非活动虚拟机 - -`virsh create 虚拟机名.xml ` # 创建虚拟机(创建后,虚拟机立即执行,成为活动主机) - -`virsh suspend 虚拟机名` # 暂停虚拟机 - -`virsh resume 虚拟机名 ` # 启动暂停的虚拟机 - -`virsh shutdown 虚拟机名` # 正常关闭虚拟机 - -`virsh destroy 虚拟机名` # 强制关闭虚拟机 - -`virsh dominfo 虚拟机名` #显示虚拟机的基本信息 - -`virsh domname 2` # 显示id号为2的虚拟机名 - -`virsh domid 虚拟机名` # 显示虚拟机id号 - -`virsh domuuid 虚拟机名` # 显示虚拟机的uuid - -`virsh domstate 虚拟机名` # 显示虚拟机的当前状态 - -`virsh dumpxml 虚拟机名` # 显示虚拟机的当前配置文件(可能和定义虚拟机时的配置不同,因为当虚拟机启动时,需要给虚拟机分配id号、uuid、vnc端口号等等) - -`virsh setmem 虚拟机名 512000` #给不活动虚拟机设置内存大小 - -`virsh setvcpus 虚拟机名 4` # 给不活动虚拟机设置cpu个数 - -`virsh edit 虚拟机名` # 编辑配置文件(一般是在刚定义完虚拟机之后) diff --git "a/OPERATIONS_DOCS/\344\272\272\344\272\272\351\203\275\345\217\257\344\273\245\345\217\202\344\270\216\345\274\200\346\272\220/\351\276\231\350\234\245\344\270\200\345\210\273/\344\272\214\345\210\206\346\263\225/\351\276\231\350\234\245 ANCK 5.10 \345\200\232\345\244\251\345\271\263\345\217\260 MPAM \346\265\213\350\257\225\346\212\245\345\221\212.md" "b/OPERATIONS_DOCS/\344\272\272\344\272\272\351\203\275\345\217\257\344\273\245\345\217\202\344\270\216\345\274\200\346\272\220/\351\276\231\350\234\245\344\270\200\345\210\273/\344\272\214\345\210\206\346\263\225/\351\276\231\350\234\245 ANCK 5.10 \345\200\232\345\244\251\345\271\263\345\217\260 MPAM \346\265\213\350\257\225\346\212\245\345\221\212.md" deleted file mode 100644 index b3230c2..0000000 --- "a/OPERATIONS_DOCS/\344\272\272\344\272\272\351\203\275\345\217\257\344\273\245\345\217\202\344\270\216\345\274\200\346\272\220/\351\276\231\350\234\245\344\270\200\345\210\273/\344\272\214\345\210\206\346\263\225/\351\276\231\350\234\245 ANCK 5.10 \345\200\232\345\244\251\345\271\263\345\217\260 MPAM \346\265\213\350\257\225\346\212\245\345\221\212.md" +++ /dev/null @@ -1,1001 +0,0 @@ -from arm-sig: https://openanolis.cn/sig/ARM_ARCH_SIG/doc/657742613244594693 - -一、测试总结 - -针对龙蜥 OS MPAM 特性的整体测试情况如下: - -经过对 MPAM 的功能性验证,目前 L3 cache 资源隔离和监控功能均正常,内存带宽隔离效果甚微,监控功能可用。 -测试用例覆盖 MPAM 接口读写测试、并发压力测试等多种类型,测试结果未发现问题。 -针对 MPAM ESR 中断,验证了 PARTID、PMG、monitor 相关异常能否触发中断、告知错误类型,中断监测功能正常可用。 -二、MPAM 功能验证 -2.1 cache 隔离功能验证 -2.1.1 不同配置对实际 cache 占有量的影响 - -L3 cache 资源隔离以 ways 的方式进行配置。倚天机器共有 16 ways,测试对不同 ways 的隔离效果进行了验证。 - -numactl -m 0 -C 16 memhog -r10000000 100000m > /mnt/log - -程序和资源隔离 group 绑定分别采用了 pid 绑定(tasks)和 cpu 绑定(cpus)两种方式。通过 schemata 接口设置程序所能够使用的 ways 数目,通过 mon_data/mon_L3_0*/llc_occupancy 接口读取程序的 L3 cache 占用。多次读取取平均值,并与理想的 cache ways 大小进行对比。 - -测试结果显示,L3 cache 隔离功能效果显著,无论是通过 tasks 绑定还是 cpus 绑定,均可以得到与理想值相接近的隔离效果。 - -2.1.2 不同配置对 mem latency 的影响 - -latency 作为一个重要的性能指标,在一些对时延敏感的场景来说,有很重要的参考作用,此处使用 lat_mem_rd 测试 cache 在不同的 ways 下,内存 latency 的分布情况,也从侧面验证 MPAM 对 cache 的隔离功能。 - -#设置步长为512字节 -numactl -C 10 -m 0 ./lat_mem_rd -N 1 -P 1 145M 512 - -测试结果显示,随着 cache way 数目的增加,加载相同内存的 latency 逐渐减小。 - -2.1.3 L3 cache 抗干扰测试 -# workload -numactl -m 1 -C 64-127 memhog -r10000000 100000m > /mnt/log -# distractor -numactl -m 1 -C 64-127 memhog -r10000000 100000m > /mnt/log - -workload:保持 L3:1=fff0 配置无变化 - -distractor: 测试 L3:1=,mask 值分别为 0-f(无干扰)、0010-fff0(有干扰) - -测试结果显示: - -在无干扰情况下,workload 的 L3 cache 占用量基本无变化; - -随着干扰 way 数逐渐变多,workload 和 distractor 两者的 L3 cache占比逐渐趋同,总量不变。 - -2.1.4 模拟混部 L3 cache 隔离测试 - -分别以 SPECjbb 2015 和 stress-ng 程序模拟在线环境和离线环境,对L3 cache隔离功能进行测试。两个环境均运行在 NUMA node 1 上。 - -在前 40s 的时间内,两个程序共享 L3 cache 资源。在约 40s 后,开始隔离在线和离线L3 cache资源的使用,在离线任务 L3 cache 的配比分别为 0xffff 和 0xf。 - -通过实验结果可以看到,在 L3 cache 资源共享的情况下,离线资源对在线资源干扰和压制明显,L3 cache 竞争激烈,波动幅度很大;在对 L3 cache 资源进行隔离后,一方面离线得到了持续有效的压制,L3 cache 占有率大幅下降,另一方面在线性能提升明显,而且波动幅度变小。 - -2.2 MB 隔离功能验证 -2.2.1 不同配置对内存带宽的影响 -gcc -O3 -fopenmp -DSTREAM_ARRAY_SIZE=100000000 -DNTIMES=1000 stream.c -o stream -# 单node测试 -numactl -m 1 -C 64-127 ./stream -# 单CPU测试 -numactl -m 1 -C 72 ./stream - -MB 资源隔离以百分比的方式进行配置。测试以 5% 为粒度,通过设置 schemata 接口让内存带宽从 5% 逐次递增到 100%,通过读取 mon_data/mon_MB_0*/mbm_local_bytes 接口读取带宽值,最终取多次测量的平均值。 - -通过测试结果可以发现,不同百分比下的测试MB带宽值和100%带宽下的MB带宽值基本相等,倚天机器的 MB 带宽隔离效果甚微。 - -单 node(64 CPU) MB 配置结果 - -percent - - - -stream测试值[Copy] (MB/s) - - - -mbm_local_bytes接口值 (MB/s) - - - - -5 - - - -104808.5 - - - -104800.0 - - - - -10 - - - -105028.3 - - - -105730.5 - - - - -20 - - - -104459.3 - - - -104915.1 - - - - -40 - - - -105077.6 - - - -105852.0 - - - - -60 - - - -104980.6 - - - -105178.7 - - - - -80 - - - -104924.8 - - - -105182.8 - - - - -100 - - - -104828.1 - - - -105855.8 - -单 CPU MB 配置结果 - -percent - - - -stream测试值[Copy] (MB/s) - - - -mbm_local_bytes接口值 (MB/s) - - - - -5 - - - -25948.7 - - - -24147.7 - - - - -10 - - - -25934.0 - - - -24433.1 - - - - -20 - - - -25913.5 - - - -22771.2 - - - - -40 - - - -25897.9 - - - -24559.4 - - - - -60 - - - -25952.9 - - - -24079.7 - - - - -80 - - - -25866.5 - - - -24246.4 - - - - -100 - - - -25952.1 - - - -24171.9 - -三、MPAM稳定性测试 -3.1 resctrl mount/umount - -测试方法 - -挂载 resctrl 文件系统,设置 schemata 资源隔离接口,随机写 cpus/cpus_list、tasks 接口,读取mon_data 资源监控接口,最后卸载 resctrl 文件系统。重复 1000000 次。 - -测试结果 - -resctrl 文件系统相关接口仍可正常使用。 - -3.2 接口写入测试 -3.2.1 schemata 写入 - -测试方法 - -创建两个 group,生成随机 L3 cache mask 和 MB 内存带宽值,并分别写入两个 group 的 schemata 接口,之后读取 schemata 接口,验证当前值是否与写入值相同。重复测试 1000000 次。 - -测试结果 - -schemata 均可正常写入。 - -3.2.2 schemata 错误写入 - -对 schemata 接口写入多种错误参数,验证 schemata 是否可以正确识别处理。 - -验证的错误类型及验证结果如下: - -错误写入示例 - - - -last_cmd_status输出 - - - -测试结果 - - - - -L3:0=10000 - - - -Mask out of range - - - -PASS - - - - -L3:2=ff;3=ff - - - -Unknown domain - - - -PASS - - - - -L3 - - - -Missing ':' - - - -PASS - - - - -L3: - - - -Missing 'L3' value - - - -PASS - - - - -L3:0 - - - -Missing '=' or non-numeric domain - - - -PASS - - - - -L30:0=fff - - - -Unknown or unsupported resource name 'L30' - - - -PASS - - - - -L3:0=fghi - - - -Non-hex character in the mask fghi - - - -PASS - - - - -L3:1=ff;1=f4 - - - -Duplicate domain 1 - - - -PASS - - - - -MB:0=150 - - - -MB value 150 out of range 5-100 - - - -PASS - - - - -MB:0=4 - - - -MB value 4 out of range 5-100 - - - -PASS - - - - -MB:0=FOO - - - -Non-decimal digit in MB - - - -PASS - - - - -MB - - - -Missing ':' - - - -PASS - - - - -MB:0 - - - -Missing 'MB' value - - - -PASS - - - - -MB:2=55 - - - -Unknown domain - - - -PASS - - - - -MB:1=23;1=56 - - - -Duplicate domain 1 - - - -PASS - - - - -L3:0=ff (with cdp) - - - -Unknown or unsupported resource name 'L3' - - - -PASS - -3.2.3 cpus/cpus_list 写入 - -测试方法 - -随机写入 cpus/cpus_list 接口 1000000 次,验证是否写入成功,并且 cpus 接口和 cpus_list 接口的值是否相对应。 - -测试结果 - -cpus/cpus_list 均可正常写入,并保持值的相等。 - -3.2.4 cpus/cpus_list 错误写入 - -错误写入示例 - - - -last_cmd_status输出 - - - -测试结果 - - - - -echo 156 > cpus_list - - - -Can only assign online CPUs - - - -PASS - - - - -echo 4096 > cpus_list - - - -Bad CPU list/mask - - - -PASS - - - - -echo ffff > cpus_list - - - -Bad CPU list/mask - - - -PASS - - - - -echo 3-12 > cpus - - - -Bad CPU list/mask - - - -PASS - -3.2.5 tasks 写入 - -测试方法 - -创建 500 个进程,并将其 pid 写入 tasks 接口,验证进程对应 pid 是否存在。之后 kill 掉所有进程,验证其 pid 是否已从 tasks 文件中移除。重复 1000000 次。 - -测试结果 - -tasks 接口均可正常写入和移除。 - -3.2.6 tasks 错误写入 - -错误示例 - - - -stderr - - - -测试结果 - - - - -将不存在pid写入tasks - - - -echo: write error: No such process - - - -PASS - - - - -echo hello > tasks - - - -echo: write error: Invalid argument - - - -PASS - -3.2.7 mode 写入 - -mode 接口默认值为 shareable,当前MPAM接口暂不支持 mode 接口值的修改。 - -Mode - - - -支持情况 - - - - -shareable - - - -支持 - - - - -exclusive - - - -不支持 - - - - -pseudo-locksetup - - - -不支持 - - - - -pseudo-locked - - - -不支持 - -3.3 group mkdir/rmdir 测试 -3.3.1 max group 创建 - -测试方法 - -以 info/*/num_closids 为基准,创建所能达到的最多 group。重复 1000000 次。 - -测试结果 - -倚天 PARTID 数目为 64 个,因此除了 default group 外,最多能够创建 63 个 group。一般情况下均可达到最大值。但在部分 group 被使用过的情况下,由于其对应的 PARTID 在 L3 cache中占用量可能超过 /sys/fs/resctrl/info/L3_MON/max_threshold_occupancy,从而导致该 PARTID 在一定时间内不可用。 - -3.3.2 group 随机创建/删除 - -测试方法 - -随机创建/删除 group 共计 2000*(num_closids-1),验证 group 分配和回收功能是否正常。 - -测试结果 - -group 随机创建和删除,group 分配/回收接口仍可正常运作。 - -3.3.3 mon_group 创建/删除 - -当前社区版本MPAM代码下 num_rmids 均为 1,暂不支持 mon_groups 目录下 mon group 的创建和删除。 - -3.4 并发读写测试 -3.4.1 L3 cache 监控接口并发读取 - -测试方法 - -创建 5 个 group,每个 group 中写入 10 个进程:memhog -r1000000000 1m > /mnt/log - -同时 10 个进程并发读 mon_data/L3_MON/llc_occupancy,持续时间 60 min。 - -测试结果 - -测试过程中未出现resctrl接口崩溃或不可用问题。 - -3.4.2 MB 监控接口并发读取 - -测试方法 - -创建 5 个 group,每个 group 中写入 10 个进程:memhog -r1000000000 1m > /mnt/log - -同时 10 个进程并发读 mon_data/mon_MB_*/mbm_local_bytes,持续时间 60 min。 - -测试结果 - -测试过程中未出现 resctrl 接口崩溃或不可用问题。 - -3.4.3 schemata 接口并发写入 - -测试方法 - -创建 5 个 group,每个 group 中写入 10 个进程:memhog -r1000000000 1m > /mnt/log - -同时 10 个进程并发随机写入 schemata,持续时间 60 min。 - -测试结果 - -测试过程中未出现 resctrl 接口崩溃或不可用问题。 - -3.4.4 cpus/cpus_list 接口并发写入 - -测试方法 - -创建 1 个 group,10 个进程并发写入随机 cpus/cpus_list,持续时间 60 min。 - -测试结果 - -测试过程未出现接口崩溃或不可用问题。 - -3.4.5 tasks 接口并发写入 - -测试方法 - -创建 1 个 group,10 个进程并发创建 300 个 task 并写入 tasks 接口。 - -测试结果 - -测试过程未出现接口崩溃或不可用问题。 - -四、MPAM 错误中断验证 -4.1 L3 cache 资源错误中断验证 - -错误码 - - - -描述 - - - -结果 - - - -备注 - - - - -0 - - - -No error captured in MPAMF_ESR - - - -无 - - - -非异常情况 - - - - -1 - - - -MPAMCFG_PART_SEL out of range - - - -可触发 - - - - - - - - - -2 - - - -Request PARTID out of range - - - -可触发 - - - - - - - - - -3 - - - -MSMON out of range PARTID/PMG - - - -可触发 - - - - - - - - - -4 - - - -Request PMG out of range - - - -不可触发 - - - -PMG>1时无法写入 - - - - -5 - - - -MSMON_CFG_MON_SEL out of range - - - -可触发 - - - - - - - - - -6 - - - -MPAMCFG_INTPARTID out of range - - - -未测试 - - - -暂不支持PARTID narrowing - - - - -7 - - - -INTERNAL unexpected - - - -未测试 - - - -暂不支持PARTID narrowing - - - - -8 - - - -MPAMCFG_PART_SEL.RIS unimplemented - - - -不可触发 - - - -RIS>1时无法写入 - - - - -9 - - - -MPAMCFG_PART_SEL.RIS no control - - - -不可触发 - - - -RIS>1时无法写入 - - - - -10 - - - -MSMON_CFG_MON_SEL.RIS unimplemented - - - -不可触发 - - - -RIS>1时无法写入 - - - - -11 - - - -MSMON_CFG_MON_SEL.RIS no monitor - - - -不可触发 - - - -RIS>1时无法写入 - - - - -12:18 - - - -Reserved \ No newline at end of file diff --git "a/OPERATIONS_DOCS/\344\272\272\344\272\272\351\203\275\345\217\257\344\273\245\345\217\202\344\270\216\345\274\200\346\272\220/\351\276\231\350\234\245\344\270\200\345\210\273/\345\206\222\346\263\241\346\216\222\345\272\217/\346\235\203\347\233\212\347\273\206\345\210\231.md" "b/OPERATIONS_DOCS/\344\272\272\344\272\272\351\203\275\345\217\257\344\273\245\345\217\202\344\270\216\345\274\200\346\272\220/\351\276\231\350\234\245\344\270\200\345\210\273/\345\206\222\346\263\241\346\216\222\345\272\217/\346\235\203\347\233\212\347\273\206\345\210\231.md" deleted file mode 100644 index b151f17..0000000 --- "a/OPERATIONS_DOCS/\344\272\272\344\272\272\351\203\275\345\217\257\344\273\245\345\217\202\344\270\216\345\274\200\346\272\220/\351\276\231\350\234\245\344\270\200\345\210\273/\345\206\222\346\263\241\346\216\222\345\272\217/\346\235\203\347\233\212\347\273\206\345\210\231.md" +++ /dev/null @@ -1,142 +0,0 @@ -什么是贡献值? -龙蜥社区是一个操作系统开源社区,欢迎开发者们一起为社区做贡献,感受开源魅力。 - -近期,社区上线了【贡献值】功能。贡献值是根据你在社区的参与程度而发放的分值。例如,提升了社区文档的质量、分享你的开发者故事、给某一个SIG贡献了代码,等等,这些都是帮助社区成长,将会被赠与不同的贡献值。 - -你可以在社区的个人中心查看贡献值。其中: - -“总贡献值”是你在社区的历年贡献值的总数,见证你与社区的共同成长。 -“可兑换贡献值”是用于兑换权益的,它的初始分值等同于“总贡献值”,但会随着兑换而扣除相应分值。 -贡献值能做什么? -贡献值可以兑换社区的权益。详细的兑换分值,请参见本文“如何获得贡献值?”一节。 - -用途一:申请实习证明或实践证明 -如果你是在校大学生、研究生,可申请实习证明 (贡献值需达到100分及以上)。实习证明由社区颁发,记录你在社区的贡献信息。 -如果你是在校中学生,可以申请实践证明 (贡献值需达到100分及以上)。实践证明由社区颁发,记录你在社区的贡献信息。 -实习证明/实践证明将于9月初开放申请 。根据贡献值的多少,证书分为“高级”、“中级”、“初级”。申请后,该证明会发放到你的个人中心,你也可通过编号在社区查询。 - -在200+社区生态企业(如阿里云、统信等单位)招聘期 ,参与龙蜥社区贡献是加分项 。如果你是应届生,持有实习证明,还有机会获得内推机会 ,为你寻找最合适的岗位。 - - -用途二:兑换社区的定制礼品 -龙蜥社区为开发者们准备了丰富的礼品,不同的分值可兑换不同价值的礼品。兑换礼品后, “可兑换贡献值”会相应减少,但“总贡献值”不会减少。 - -例如,你原有200积分,使用50分兑换了礼品,则“可兑换贡献值”变为150分,但“总贡献值”依旧是200分。 - - -用途三:参与年度评奖 -龙蜥社区将会围绕代码和非代码贡献评选出年度突出贡献奖,贡献值(“总贡献值”)将会是入围奖项的重要考核因素之一。 - - -更多权益,敬请期待。 - -如何获得贡献值? -参与活动越多,贡献值越高,实习证明或礼品的等级越高。你可以通过以下参与方式来获得贡献值。 - -方式一:开启龙蜥社区之旅 -方式 获得标准 贡献值 -首次注册社区 注册龙蜥社区的账号。 5 -首次绑定Gitee账号 首次成功绑定龙蜥社区账号与Gitee账号。 5 -首次登录社区 首次登录龙蜥社区。 1 -首次浏览SIG详情 你的龙蜥社区账号,首次浏览≥3个SIG详情页面。 1 -首次阅读博客文章 你的龙蜥社区账号,首次阅读≥3篇博客文章。 1 -首次浏览新闻动态 你的龙蜥社区账号,首次阅读≥3篇新闻。 1 -首次学习视频 你的龙蜥社区账号,首次观看学习≥1个视频。 1 -首次了解龙蜥操作系统(Anolis OS) 你的龙蜥社区账号,首次浏览Anolis OS 产品页面,关注产品动态。 1 -首次阅读CentOS停服专区 你的龙蜥社区账号,首次阅读CentOS停服专区的内容,了解详情。 1 -首次下载龙蜥操作系统(Anolis OS) 你的龙蜥社区账号,首次下载Anolis OS到本地使用。 3 -首次了解龙蜥软硬件兼容能力 你的龙蜥社区账号,首次浏览软硬件兼容适配列表。 1 -首次了解龙蜥安全更新 你的龙蜥社区账号,首次浏览安全公告,查看Errata和CVEs。 1 -方式二:参与专项开发者活动,走进开源 -1. 推荐新人参与此活动 -推荐方式:在「人人都可以参与开源」活动页面的右侧,找到 分享 按钮,复制链接发送。被分享人完成任务后,你可以获得贡献值。 -分享按钮 - -2. 字字珠玑:文档捉虫 -目标:提交文档缺陷,优化文档质量。针对准确性、合规性、可读性、规范性等问题提交issue。 - -捉虫范围:SIG文档和CentOS停服专区文档 - -语言范围:简体中文 - -找出的文档缺陷类型 贡献值 -内容不合规,存在违法、违规内容。例如内容可能有版权纠纷、内容涉黄涉赌涉政等。 2 -内容/代码错误或缺失关键内容,导致操作中断,无法继续执行。 2 -内容/代码有误或不完整,但不影响操作。 1 -描述不清晰,例如语句有歧义或含义模糊。 1 -低错,例如链接失效、图片失效、有错别字、专有名词写法错误或写法不统一等。 1 -3. 字字珠玑:文档翻译 -目标:将中文文档翻译成英文。 - -翻译范围:SIG文档和CentOS停服专区文档 - -翻译标准:没有漏译,没有错译,没有明显的语法错误。 - -翻译的数量 贡献值 -每200字 1 -说明:每增加200字,贡献值增加1分。单篇上限为10分。 - -4. 字字珠玑:写文档 -目标:社区产品/基础设施的帮助文档、使用建议等。已有文档请参见Anolis OS产品文档 。 - -文档类型:使用社区产品/基础设施的最佳实践、FAQ、使用体验或建议反馈等。 - -要求: - -文档内容要准确,是经过测试或实践的。 -文档步骤尽可能详细。 -可以适当配上图片,更易于理解。 -文档内容 贡献值 -FAQ。 -你在使用龙蜥社区的任何产品(Anolis OS 7或8、KeenTune、龙蜥实验室、ABS等)、任何阶段(下载、部署、安装等)时碰到的问题。希望你提供详细的报错信息,如果有解决方案更佳。示例。 2~5 -最佳实践。 -你使用龙蜥社区产品的最佳实践,例如你是怎么玩转ABS、T-One的。希望你提供详细的操作步骤,让更多人用起来。示例 5~10 -使用社区产品的真实体验,以及建议反馈。 -在使用社区产品碰到的不好体验,可以记录下来并反馈给我们。 2~5 -5. 随机试炼 -获得标准 贡献值 -完成抽取到的盲盒任务,并提交PR。 1~20。以任务中标注的贡献值为准。 -6. 龙蜥一刻 -获得标准 贡献值 -完成领取的任务,并提交PR。 1~20。以任务中标注的贡献值为准。 -7. 一码当先 -获得标准 贡献值 -完成领取的任务,并提交PR。 1~10000。以任务中标注的贡献值为准。 -方式三:参与社区日常任务、热爱布道与分享 -方式 获得标准 贡献值 -积极参与SIG 成为SIG的maintainer。 50 -积极参与SIG 成为SIG的committer。 10 -投稿 投稿开发者故事、评测文章,针对文章质量发放贡献值。详情参考这里。 5~10 -直播分享 参与龙蜥大讲堂直播分享,每一次分享都会发放贡献值。详情参考这里。 20~100 -成为社区推广大使 根据每一次的推广类型与成效,发放贡献值。详情参考这里。 1~100 -如何查看贡献值?如何用贡献值兑换礼品? -打开贡献值页面,或者在龙蜥社区官网右上角,点击账号头像,选择“我的贡献值”。页面上方显示你的贡献值。 - -找到贡献值旁边的“去兑换/申领”链接,填写兑换申请。 - -去兑换或申领 - -贡献值对应的权益等级 -权益一:实习证明与实习机会 -注意: - -申请实习证明或实践证明, 不会扣除贡献值。 -在200+社区生态企业(如阿里云、统信等单位)的招聘期间 ,参与龙蜥社区贡献是加分项 。如果你是应届生,持有实习证明,还有机会获得内推机会 ,为你寻找最合适的岗位。 -贡献值 可申请的实习证明/实践证明 -≥300 初级 -≥1000 中级 -≥2000 高级 -权益二:社区定制礼品 -可兑换的定制礼品( 任选其一 ,先到先得) 消耗的贡献值 -帆布袋、小龙本子+笔、数据线、手机支架、小风扇、U盘、陶瓷杯、雨伞、小龙抱枕、T恤、U盘、加湿器等。 100 -书籍、咖啡保温杯、蓝牙音箱、小米鼠标、无线充鼠标垫、金属把手马克杯、双肩包、纽曼蓝牙耳机、眼罩脖枕套装、充电宝、筋膜枪等。 300 -极客时间企业版年度会员卡,罗技G502鼠标、猫王蓝牙音箱、beats耳机、罗技K845机械键盘等。 1000 -大疆云台,树莓派Pi 400电脑键盘PC一体机,罗技G610机械键盘等。 2000 -任天堂Switch NS日版,当贝投影仪,小米扫地机器人,cherry电竞键盘,airpods等。 年度总分前三名 -还可以兑换云服务器资源,当前可兑换的物品以龙蜥官网上的兑换页为准,持续上线中。 - -说明:如果某些礼品库存告罄,将会发放相似的礼品。 - -声明 -禁止恶意刷分,一经发现,将清空贡献值。 -活动解释权归龙蜥社区所有。 \ No newline at end of file diff --git "a/PRODUCT_DOCS/anolisos/23/\347\224\250\346\210\267\346\214\207\345\215\227/\350\247\243\345\206\263\346\226\271\346\241\210/641.jpg" "b/PRODUCT_DOCS/anolisos/23/\347\224\250\346\210\267\346\214\207\345\215\227/\350\247\243\345\206\263\346\226\271\346\241\210/641.jpg" deleted file mode 100644 index 4455b9fd8735efc80d12738345e026d71d33ab21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62880 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