diff --git "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/6-KATA-3.13/3-\345\277\253\351\200\237\346\265\213\350\257\225\346\265\267\345\205\211\346\234\272\345\257\206\345\256\271\345\231\250\357\274\210\347\272\257\345\215\225\346\234\272\347\263\273\347\273\237\357\274\211.md" "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/6-KATA-3.13/3-\345\277\253\351\200\237\346\265\213\350\257\225\346\265\267\345\205\211\346\234\272\345\257\206\345\256\271\345\231\250\357\274\210\347\272\257\345\215\225\346\234\272\347\263\273\347\273\237\357\274\211.md" index ba94907a5d91eea69c3361153e02a52a40777ce0..537c920ebf8d0cb64b7fa95d02adc4e68d3d2f91 100644 --- "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/6-KATA-3.13/3-\345\277\253\351\200\237\346\265\213\350\257\225\346\265\267\345\205\211\346\234\272\345\257\206\345\256\271\345\231\250\357\274\210\347\272\257\345\215\225\346\234\272\347\263\273\347\273\237\357\274\211.md" +++ "b/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/6-KATA-3.13/3-\345\277\253\351\200\237\346\265\213\350\257\225\346\265\267\345\205\211\346\234\272\345\257\206\345\256\271\345\231\250\357\274\210\347\272\257\345\215\225\346\234\272\347\263\273\347\273\237\357\274\211.md" @@ -2,126 +2,38 @@ 本章节主要用于让用户在纯单机环境中快速测试[KATA-3.13](https://openanolis.cn/sig/Hygon-Arch/doc/1333043301817188373)的机密容器效果。[KATA-3.13框架和角色介绍](https://openanolis.cn/sig/Hygon-Arch/doc/1333043301817188373)中的所有机器均复用同一台物理机器,因此所有角色也都是在这同一台物理机器上进行操作。 +## 本文实践之前,用户只需要保证主机硬件和固件环境支持海光机密计算功能即可 + * 用户无需完整按照龙蜥社区Hygon Arch sig文档从头执行一遍,用户只需按照[0-安全功能配置要求](https://openanolis.cn/sig/Hygon-Arch/doc/1076446632387394260)的**硬件配置要求**章节中的**表2 安全功能的硬件配置版本要求**,确保主机配置能够满足测试需求,在确认满足需求后,可以直接来到[KATA-3.13](https://openanolis.cn/sig/Hygon-Arch/doc/1333043301817188373)。 -* 本章节测试的主机OS环境是Anolis OS 23,用户测试前请确保主机OS是Anolis OS 23。 - -* 本章节基于已经构建好的机密容器组件进行测试(除了主机内核)。 - * 主机内核构建请参考[编译/制作/安装](https://openanolis.cn/sig/Hygon-Arch/doc/1333043312193896477)的**构建 支持运行TEE虚拟机的主机内核**章节,用户构建完主机内核后,请将其安装到**运行机密容器的机器**上并用该内核重新启动机器。 - -* 本章节使用的已经构建好的机密容器组件`initrd`、`rootfs块设备镜像image`中包含的`kata-agent`经过特殊处理以便基于本地私有镜像仓库快速进行测试,特殊处理的内容如下: - - 对rust reqwest (0.12.5) crate进行源码改动,改动如下: -``` -diff --git a/src/async_impl/client.rs b/src/async_impl/client.rs -index b321a60..8b825d9 100644 ---- a/src/async_impl/client.rs -+++ b/src/async_impl/client.rs -@@ -171,7 +171,7 @@ struct Config { - - impl Default for ClientBuilder { - fn default() -> Self { -- Self::new() -+ Self::new().danger_accept_invalid_certs(true) - } - } - -@@ -191,7 +191,7 @@ impl ClientBuilder { - #[cfg(feature = "native-tls")] - hostname_verification: true, - #[cfg(feature = "__tls")] -- certs_verification: true, -+ certs_verification: false, - #[cfg(feature = "__tls")] - tls_sni: true, - connect_timeout: None, -@@ -393,7 +393,8 @@ impl ClientBuilder { - tls.danger_accept_invalid_hostnames(!config.hostname_verification); - } - -- tls.danger_accept_invalid_certs(!config.certs_verification); -+ //tls.danger_accept_invalid_certs(!config.certs_verification); -+ tls.danger_accept_invalid_certs(true); - - tls.use_sni(config.tls_sni); - -@@ -1898,14 +1899,14 @@ impl Client { - /// Use `Client::builder()` if you wish to handle the failure as an `Error` - /// instead of panicking. - pub fn new() -> Client { -- ClientBuilder::new().build().expect("Client::new()") -+ ClientBuilder::new().danger_accept_invalid_certs(true).build().expect("Client::new()") - } - - /// Creates a `ClientBuilder` to configure a `Client`. - /// - /// This is the same as `ClientBuilder::new()`. - pub fn builder() -> ClientBuilder { -- ClientBuilder::new() -+ ClientBuilder::new().danger_accept_invalid_certs(true) - } - - /// Convenience method to make a `GET` request to a URL. -@@ -2255,6 +2256,7 @@ impl Config { - if !self.certs_verification { - f.field("danger_accept_invalid_certs", &true); - } -+ f.field("danger_accept_invalid_certs", &true); - - if let Some(ref min_tls_version) = self.min_tls_version { - f.field("min_tls_version", min_tls_version); -``` - - 对rust oci-client (0.12.1) crate进行源码改动,改动如下: -``` -diff --git a/src/client.rs b/src/client.rs -index d1a3bf0..d1b738d 100644 ---- a/src/client.rs -+++ b/src/client.rs -@@ -270,7 +270,7 @@ impl Default for Client { - config: Arc::default(), - auth_store: Arc::default(), - tokens: TokenCache::new(DEFAULT_TOKEN_EXPIRATION_SECS), -- client: reqwest::Client::default(), -+ client: reqwest::Client::builder().danger_accept_invalid_certs(true).build().expect("Client::new()"), - push_chunk_size: PUSH_CHUNK_MAX_SIZE, - } - } -@@ -323,7 +323,7 @@ impl TryFrom for Client { - Ok(Self { - config: Arc::new(config), - tokens: TokenCache::new(default_token_expiration_secs), -- client: client_builder.build()?, -+ client: client_builder.danger_accept_invalid_certs(true).build()?, - push_chunk_size: PUSH_CHUNK_MAX_SIZE, - ..Default::default() - }) -``` - - 对rust oci-distribution (0.11.0)进行源码改动,改动如下: -``` -diff --git a/src/client.rs b/src/client.rs -index d2a0646..6fc8b5b 100644 ---- a/src/client.rs -+++ b/src/client.rs -@@ -261,7 +261,7 @@ impl TryFrom for Client { - - Ok(Self { - config: Arc::new(config), -- client: client_builder.build()?, -+ client: client_builder.danger_accept_invalid_certs(true).build()?, - push_chunk_size: PUSH_CHUNK_MAX_SIZE, - ..Default::default() - }) -``` +## 本文的主机OS是Anolis OS 23 + +* 本文测试的主机OS环境是Anolis OS 23,用户测试前请确保主机OS是Anolis OS 23。 + +## 本文实践,只有主机内核需要手动编译 + +* 本文基于已经构建好的机密容器组件进行测试(除了主机内核)。 + + * 主机内核的编译,请参考[编译/制作/安装](https://openanolis.cn/sig/Hygon-Arch/doc/1333043312193896477)的**构建 支持运行TEE虚拟机的主机内核**章节,用户构建完主机内核后,请将其安装到**运行机密容器的机器**上并用该内核重新启动机器。 + * 除了主机内核,其他的直接从本文的**环境安装**章节开始一步一步操作就行,不要考虑其他的一些列复杂动作,如操作中遇到问题,请及时联系海光。 + +## 其他注意事项 + +* 本章节使用的已经构建好的机密容器组件`initrd`、`rootfs块设备镜像image`中包含的`kata-agent`是经过特殊处理的,主要是为了方便基于本地私有镜像仓库快速进行测试。 + + * 如果您希望快速测试,请直接跳至本文的**环境安装**章节; + * 如果您想了解改动了什么内容,请跳转至[编译/制作/安装](https://openanolis.cn/sig/Hygon-Arch/doc/1333043312193896477)的**构建 便于机密容器使用本地私有镜像仓库的kata-agent**章节查看详情。 # 环境安装 ## 安装主机内核 -假设按照[编译/制作/安装](https://openanolis.cn/sig/Hygon-Arch/doc/1333043312193896477)中关于主机内核的部分编译好了内核rpm包,并将内核rpm包复制到了物理主机。 +假设您已经按照[编译/制作/安装](https://openanolis.cn/sig/Hygon-Arch/doc/1333043312193896477)中**构建 支持运行TEE虚拟机的主机内核**章节编译好了内核rpm包,并将内核rpm包复制到了物理主机。 > 以下变量 *KERNEL_RPM_PACKAGES_DIR* 表示的是物理主机上存放主机内核rpm包的目录, *CSV3_MEM_PERCENTAGE* 是主机支持CSV3时,期望传递的内核命令行参数`csv-mem-percentage`的值,`csv-mem-percentage`的说明请参考[1-安装CSV软件](https://openanolis.cn/sig/Hygon-Arch/doc/865622260278236994)的**主机Linux内核需配置内核命令行参数**章节。 ```shell -export KERNEL_RPM_PAKCAGES_DIR=${your_kernel_rpm_packages_dir} +export KERNEL_RPM_PACKAGES_DIR=${your_kernel_rpm_packages_dir} export CSV3_MEM_PERCENTAGE=${your_desired_csv3_mem_percentage} sudo yum install -y curl && \ diff --git "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/6-KATA-3.13/5-\347\224\250\346\210\267\344\273\2160\345\274\200\345\247\213-\347\274\226\350\257\221-\345\210\266\344\275\234-\345\256\211\350\243\205-\346\234\272\345\257\206\345\256\271\345\231\250\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/6-KATA-3.13/5-\347\224\250\346\210\267\344\273\2160\345\274\200\345\247\213-\347\274\226\350\257\221-\345\210\266\344\275\234-\345\256\211\350\243\205-\346\234\272\345\257\206\345\256\271\345\231\250\347\273\204\344\273\266.md" index 2dd153a7ebb9e949e4fb1c123f79923d087c79a1..449a27e0006b5313cd9747d8092f4dd56735f978 100644 --- "a/sig/Hygon Arch/content/2-CSV\346\265\213\350\257\225\346\226\207\346\241\243/6-KATA-3.13/5-\347\224\250\346\210\267\344\273\2160\345\274\200\345\247\213-\347\274\226\350\257\221-\345\210\266\344\275\234-\345\256\211\350\243\205-\346\234\272\345\257\206\345\256\271\345\231\250\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/6-KATA-3.13/5-\347\224\250\346\210\267\344\273\2160\345\274\200\345\247\213-\347\274\226\350\257\221-\345\210\266\344\275\234-\345\256\211\350\243\205-\346\234\272\345\257\206\345\256\271\345\231\250\347\273\204\344\273\266.md" @@ -4,7 +4,9 @@ > 以下脚本建议在同一台**AnolisOS-23**的机器上(物理机/虚拟机均可)执行,鉴于所有脚本是必须的,建议按序执行。 -## 构建角色2需要的组件 +> **警告:**本文中很多脚本的输出都会存放在`/dev/shm`,如果用户存在间隔很久重启机器继续构建的可能,请修改脚本,使输出保存到本地文件系统中。 + +# 构建角色2需要的组件 **角色2**:位于**运行机密容器的机器**,是 *机密容器负载托管服务方* 。机密容器的租户向**角色2**提出运行机密容器的请求,**角色2**在**运行机密容器的机器**上创建并运行机密容器。 @@ -32,7 +34,7 @@ - 运行TEE虚拟机的Qemu - 支持运行TEE虚拟机的主机内核 -### 准备依赖工具(如go、rust、docker等) +## 准备依赖工具(如go、rust、docker等) *build-setup-go-rust-docker-etc.sh* - 用于安装构建环境所需的go,rust,docker,containerd等。 @@ -41,24 +43,28 @@ ```shell sudo yum install -y curl && \ -curl -sSL https://gitee.com/hanliyang-kata-coco/deployment/raw/master/tools/build-and-install/AnolisOS-23/build-setup-go-rust-docker-etc.sh | bash +curl https://gitee.com/hanliyang-kata-coco/deployment/raw/master/tools/build-and-install/AnolisOS-23/build-setup-go-rust-docker-etc.sh -o /dev/shm/build-setup-go-rust-docker-etc.sh && \ +chmod +x /dev/shm/build-setup-go-rust-docker-etc.sh && \ +/dev/shm/build-setup-go-rust-docker-etc.sh ``` -### 构建 CoCo operator kata-deploy payload image +## 构建 CoCo operator kata-deploy payload image 构建 CoCo operator kata-deploy payload image之前,需要先把 CoCo operator kata-deploy payload image需要包含的组件构建好。 -#### 构建 containerd-shim-kata-v2, kata-runtime, etc... +### 构建 containerd-shim-kata-v2, kata-runtime, etc... *build-kata-runtime.sh* - 用于构建、安装containerd-kata-shim-v2 (kata OCI runtime),kata-runtime等工具。 - 安装目录为`/opt/kata`。 ```shell -curl -sSL https://gitee.com/hanliyang-kata-coco/deployment/raw/master/tools/build-and-install/AnolisOS-23/build-kata-runtime.sh | bash +curl https://gitee.com/hanliyang-kata-coco/deployment/raw/master/tools/build-and-install/AnolisOS-23/build-kata-runtime.sh -o /dev/shm/build-kata-runtime.sh && \ +chmod +x /dev/shm/build-kata-runtime.sh && \ +/dev/shm/build-kata-runtime.sh ``` -#### 构建 TEE虚拟机内核 (包括bzImage,内核模块) +### 构建 TEE虚拟机内核 (包括bzImage,内核模块) *build-kata-guest-kernel.sh* - 用于构建、安装kata机密容器所需的虚拟机内核。 @@ -67,10 +73,12 @@ curl -sSL https://gitee.com/hanliyang-kata-coco/deployment/raw/master/tools/buil - 用户需确保`/dev/shm`目录容量足够大(执行`df -h | grep "/dev/shm"`可以看到容量,建议 >= 25GiB),如果`/dev/shm`目录容量不满足需求,请修改脚本,把其中`/dev/shm`改成容量足够大的路径。 ```shell -curl -sSL https://gitee.com/hanliyang-kata-coco/deployment/raw/master/tools/build-and-install/AnolisOS-23/build-kata-guest-kernel.sh | bash +curl https://gitee.com/hanliyang-kata-coco/deployment/raw/master/tools/build-and-install/AnolisOS-23/build-kata-guest-kernel.sh -o /dev/shm/build-kata-guest-kernel.sh && \ +chmod +x /dev/shm/build-kata-guest-kernel.sh && \ +/dev/shm/build-kata-guest-kernel.sh ``` -#### 构建 运行TEE虚拟机的Qemu +### 构建 运行TEE虚拟机的Qemu *build-kata-qemu.sh* - 用于构建、安装运行kata机密容器的Qemu。 @@ -79,10 +87,12 @@ curl -sSL https://gitee.com/hanliyang-kata-coco/deployment/raw/master/tools/buil - 用户需确保`/dev/shm`目录容量足够大(执行`df -h | grep "/dev/shm"`可以看到容量,建议 >= 25GiB),如果`/dev/shm`目录容量不满足需求,请修改脚本,把其中`/dev/shm`改成容量足够大的路径。 ```shell -curl -sSL https://gitee.com/hanliyang-kata-coco/deployment/raw/master/tools/build-and-install/AnolisOS-23/build-kata-qemu.sh | bash +curl https://gitee.com/hanliyang-kata-coco/deployment/raw/master/tools/build-and-install/AnolisOS-23/build-kata-qemu.sh -o /dev/shm/build-kata-qemu.sh && \ +chmod +x /dev/shm/build-kata-qemu.sh && \ +/dev/shm/build-kata-qemu.sh ``` -#### 构建 TEE虚拟机BIOS(OVMF) +### 构建 TEE虚拟机BIOS(OVMF) *build-kata-ovmf.sh* - 用于构建、安装kata机密容器所需的虚拟机bios/OVMF。 @@ -91,40 +101,176 @@ curl -sSL https://gitee.com/hanliyang-kata-coco/deployment/raw/master/tools/buil - 用户需确保`/dev/shm`目录容量足够大(执行`df -h | grep "/dev/shm"`可以看到容量,建议 >= 25GiB),如果`/dev/shm`目录容量不满足需求,请修改脚本,把其中`/dev/shm`改成容量足够大的路径。 ```shell -curl -sSL https://gitee.com/hanliyang-kata-coco/deployment/raw/master/tools/build-and-install/AnolisOS-23/build-kata-ovmf.sh | bash +curl https://gitee.com/hanliyang-kata-coco/deployment/raw/master/tools/build-and-install/AnolisOS-23/build-kata-ovmf.sh -o /dev/shm/build-kata-ovmf.sh && \ +chmod +x /dev/shm/build-kata-ovmf.sh && \ +/dev/shm/build-kata-ovmf.sh ``` -#### 构建 kata-agent (包含"INIT=yes"和"INIT=no"的构建结果) +### 构建 kata-agent (包含"INIT=yes"和"INIT=no"的构建结果) *build-kata-agent.sh* - 用于构建、安装kata机密容器所需的虚拟机主进程kata-agent,脚本会分别生成用于制作guest image和guest initrd的kata-agent压缩包。 - 用于制作guest image的kata-agent压缩包会安装到`/dev/shm/kata-agent/kata-agent.tar.xz`,用于制作guest initrd的kata-agent压缩包会安装到`/dev/shm/kata-agent-init/kata-agent-init.tar.xz`。 ```shell -curl -sSL https://gitee.com/hanliyang-kata-coco/deployment/raw/master/tools/build-and-install/AnolisOS-23/build-kata-agent.sh | bash +curl https://gitee.com/hanliyang-kata-coco/deployment/raw/master/tools/build-and-install/AnolisOS-23/build-kata-agent.sh -o /dev/shm/build-kata-agent.sh && \ +chmod +x /dev/shm/build-kata-agent.sh && +/dev/shm/build-kata-agent.sh +``` + +#### 构建 便于机密容器使用本地私有镜像仓库的kata-agent + +目前,为了便于快捷的使用本地私有镜像仓库提供容器镜像服务,需要对reqwest(0.12.5),oci-client(0.12.1),oci-distribution(0.11.0)这3个rust crate进行修改。修改步骤如下: + +* 先执行一遍build-kata-agent.sh让rust自动下载reqwest(0.12.5),oci-client(0.12.1),oci-distribution(0.11.0)这3个rust crate到本地的cargo缓存中。以下是本地缓存位置的示例,用户根据自己使用的rust镜像源确定本地cargo缓存位置: ``` +$ ls ~/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-df7c3c540f42cdbd/reqwest-0.12.5/ +Cargo.lock Cargo.toml.orig examples LICENSE-MIT src +Cargo.toml CHANGELOG.md LICENSE-APACHE README.md tests + +$ ls ~/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-df7c3c540f42cdbd/oci-client-0.12.0/ +Cargo.lock Cargo.toml.orig CONTRIBUTING.md examples justfile-windows README.md tests +Cargo.toml CODEOWNERS deny.toml justfile LICENSE src + +$ ls ~/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-df7c3c540f42cdbd/oci-distribution-0.11.0/ +Cargo.lock Cargo.toml.orig CONTRIBUTING.md examples justfile-windows README.md +Cargo.toml CODEOWNERS deny.toml justfile LICENSE src +``` + +* 按照下面的改动对reqwest(0.12.5),oci-client(0.12.1),oci-distribution(0.11.0)缓存源码进行修改。 + +``` +## reqwest (0.12.5) 改动 + +diff --git a/src/async_impl/client.rs b/src/async_impl/client.rs +index b321a60..8b825d9 100644 +--- a/src/async_impl/client.rs ++++ b/src/async_impl/client.rs +@@ -171,7 +171,7 @@ struct Config { + + impl Default for ClientBuilder { + fn default() -> Self { +- Self::new() ++ Self::new().danger_accept_invalid_certs(true) + } + } + +@@ -191,7 +191,7 @@ impl ClientBuilder { + #[cfg(feature = "native-tls")] + hostname_verification: true, + #[cfg(feature = "__tls")] +- certs_verification: true, ++ certs_verification: false, + #[cfg(feature = "__tls")] + tls_sni: true, + connect_timeout: None, +@@ -393,7 +393,8 @@ impl ClientBuilder { + tls.danger_accept_invalid_hostnames(!config.hostname_verification); + } + +- tls.danger_accept_invalid_certs(!config.certs_verification); ++ //tls.danger_accept_invalid_certs(!config.certs_verification); ++ tls.danger_accept_invalid_certs(true); + + tls.use_sni(config.tls_sni); + +@@ -1898,14 +1899,14 @@ impl Client { + /// Use `Client::builder()` if you wish to handle the failure as an `Error` + /// instead of panicking. + pub fn new() -> Client { +- ClientBuilder::new().build().expect("Client::new()") ++ ClientBuilder::new().danger_accept_invalid_certs(true).build().expect("Client::new()") + } + + /// Creates a `ClientBuilder` to configure a `Client`. + /// + /// This is the same as `ClientBuilder::new()`. + pub fn builder() -> ClientBuilder { +- ClientBuilder::new() ++ ClientBuilder::new().danger_accept_invalid_certs(true) + } + + /// Convenience method to make a `GET` request to a URL. +@@ -2255,6 +2256,7 @@ impl Config { + if !self.certs_verification { + f.field("danger_accept_invalid_certs", &true); + } ++ f.field("danger_accept_invalid_certs", &true); + + if let Some(ref min_tls_version) = self.min_tls_version { + f.field("min_tls_version", min_tls_version); +``` +``` +## oci-client(0.12.1)改动 + +diff --git a/src/client.rs b/src/client.rs +index d1a3bf0..d1b738d 100644 +--- a/src/client.rs ++++ b/src/client.rs +@@ -270,7 +270,7 @@ impl Default for Client { + config: Arc::default(), + auth_store: Arc::default(), + tokens: TokenCache::new(DEFAULT_TOKEN_EXPIRATION_SECS), +- client: reqwest::Client::default(), ++ client: reqwest::Client::builder().danger_accept_invalid_certs(true).build().expect("Client::new()"), + push_chunk_size: PUSH_CHUNK_MAX_SIZE, + } + } +@@ -323,7 +323,7 @@ impl TryFrom for Client { + Ok(Self { + config: Arc::new(config), + tokens: TokenCache::new(default_token_expiration_secs), +- client: client_builder.build()?, ++ client: client_builder.danger_accept_invalid_certs(true).build()?, + push_chunk_size: PUSH_CHUNK_MAX_SIZE, + ..Default::default() + }) +``` +``` +## oci-distribution(0.11.0)改动 + +diff --git a/src/client.rs b/src/client.rs +index d2a0646..6fc8b5b 100644 +--- a/src/client.rs ++++ b/src/client.rs +@@ -261,7 +261,7 @@ impl TryFrom for Client { + + Ok(Self { + config: Arc::new(config), +- client: client_builder.build()?, ++ client: client_builder.danger_accept_invalid_certs(true).build()?, + push_chunk_size: PUSH_CHUNK_MAX_SIZE, + ..Default::default() + }) +``` + +* 再次执行build-kata-agent.sh,脚本执行完毕后,就可以执行后续的构建步骤了。 -#### 构建 k8s Pod的pause rootfs +### 构建 k8s Pod的pause rootfs *build-kata-pause.sh* - 用于构建、安装kata机密容器所需的虚拟机sandbox根镜像pause的rootfs。 - 安装路径为`$HOME/workspace/CoCo/kata-containers/tools/packaging/kata-deploy/local-build/build/kata-static-pause-image.tar.xz`。 ```shell -curl -sSL https://gitee.com/hanliyang-kata-coco/deployment/raw/master/tools/build-and-install/AnolisOS-23/build-kata-pause.sh | bash +curl https://gitee.com/hanliyang-kata-coco/deployment/raw/master/tools/build-and-install/AnolisOS-23/build-kata-pause.sh -o /dev/shm/build-kata-pause.sh && \ +chmod +x /dev/shm/build-kata-pause.sh && \ +/dev/shm/build-kata-pause.sh ``` -#### 构建 attestation-agent,confidential-data-hub,api-server-rest,luks-encrypt-storage +### 构建 attestation-agent,confidential-data-hub,api-server-rest,luks-encrypt-storage *build-kata-coco-guest-components.sh* - 用于构建、安装kata机密容器所需的虚拟机AA(Attestation-Agent)和CDH(Confidential-Data-Hub)等工具,AA与CDH主要用于协助机密容器所需的虚拟机环境认证鉴权、机密数据流转。 - 安装路径为`/dev/shm/guest-components.tar.xz`。 ```shell -curl -sSL https://gitee.com/hanliyang-kata-coco/deployment/raw/master/tools/build-and-install/AnolisOS-23/build-kata-coco-guest-components.sh | bash +curl https://gitee.com/hanliyang-kata-coco/deployment/raw/master/tools/build-and-install/AnolisOS-23/build-kata-coco-guest-components.sh -o /dev/shm/build-kata-coco-guest-components.sh && \ +chmod +x /dev/shm/build-kata-coco-guest-components.sh && \ +/dev/shm/build-kata-coco-guest-components.sh ``` -#### 构建 TEE虚拟机的initrd +### 构建 TEE虚拟机的initrd *build-kata-guest-initrd.sh* - 用于构建guest initrd,guest initrd用于作为启动kata机密容器对应的虚拟机的内存根文件系统,guest initrd不能与guest image同时使用。 @@ -136,7 +282,7 @@ chmod +x /dev/shm/build-kata-guest-initrd.sh && \ /dev/shm/build-kata-guest-initrd.sh ``` -#### 构建 TEE虚拟机的rootfs块设备image +### 构建 TEE虚拟机的rootfs块设备image *build-kata-guest-image.sh* - 用于构建guest image,guest image用于作为启动kata机密容器对应的虚拟机时的根文件系统块设备(virtio-blk-pci)。 @@ -148,30 +294,34 @@ chmod +x /dev/shm/build-kata-guest-image.sh && \ /dev/shm/build-kata-guest-image.sh ``` -#### 集成以上组件到CoCo operator kata-deploy payload image +### 集成以上组件到CoCo operator kata-deploy payload image *build-coco-operator-kata-deploy-csv-docker-image.sh* - 用于构建CoCo operator所需的kata部署镜像(kata-deploy payload image),该脚本会制作名为`kata-deploy-csv:3.11.0`的容器镜像(**运行机密容器的机器**需要该镜像才能把kata机密容器的组件部署到本地,参见[快速测试海光机密容器(纯单机系统)](https://openanolis.cn/sig/Hygon-Arch/doc/1333043306682581017)的**运行CoCo operator**章节了解细节,**在一个有非常多k8s `worker node`的集群中,每个`worker node`都需要准备好这个镜像,这个镜像很大**,建议用户先将该镜像缓存到本地或存储在方便高速访问的私有镜像仓库中)同时本地存储一份该镜像的导出包文件`$HOME/workspace/CoCo/hygon-csv-kata-deploy.tar`。 - CoCo operator在运行时需要这个镜像,用户需提前把该镜像放置到合适的镜像仓库中,并在运行CoCo operator时,重定向kata部署镜像到用户的镜像仓库。 ```shell -curl -sSL https://gitee.com/hanliyang-kata-coco/deployment/raw/master/tools/build-and-install/AnolisOS-23/build-coco-operator-kata-deploy-csv-docker-image.sh | bash +curl https://gitee.com/hanliyang-kata-coco/deployment/raw/master/tools/build-and-install/AnolisOS-23/build-coco-operator-kata-deploy-csv-docker-image.sh -o /dev/shm/build-coco-operator-kata-deploy-csv-docker-image.sh && \ +chmod +x /dev/shm/build-coco-operator-kata-deploy-csv-docker-image.sh && \ +/dev/shm/build-coco-operator-kata-deploy-csv-docker-image.sh ``` -### 构建 支持运行TEE虚拟机的主机内核 +## 构建 支持运行TEE虚拟机的主机内核 *build-host-kernel.sh* - 用于构建、安装k8s工作节点物理主机的内核。 - 该脚本会自动把`gitee.com/anolis/cloud-kernel branch:devel-6.6`下载到`/dev/shm/`目录,并在`/dev/shm`目录进行编译过程。 - 编译完成后,`/dev/shm/openanolis-kernel/rpmbuild/RPMS/x86_64/`目录下会输出rpm包,请把rpm包复制到**角色1**物理机上安装,该安装步骤是**角色1**物理机上的第一步。安装完成后,请修改grub的内核命令行参数`sudo sed -i "s/^\(GRUB_CMDLINE_LINUX=\".*\)\"$/\1 kvm-amd.sev=1 kvm-amd.sev_es=1 csv_mem_percentage=${XX}\"/g" /etc/default/grub; sudo grub2-mkconfig -o /boot/efi/EFI/anolis/grub.cfg`,其中变量`${XX}`表示CSV3可占用总物理内存的百分比,是十进制数字,该十进制数字最大为 *80* ,参数含义的详解请查看[1-安装CSV软件](https://openanolis.cn/sig/Hygon-Arch/doc/865622260278236994)的**主机linux内核需配置内核命令行参数**章节。 - 用户需确保`/dev/shm`目录容量足够大(执行`df -h | grep "/dev/shm"`可以看到容量,建议 >= 25GiB),如果`/dev/shm`目录容量不满足需求,请修改脚本,把其中`/dev/shm`改成容量足够大的路径。 - - **务必注意:请在上述脚本执行完以后再执行该脚本** ```shell -curl -sSL https://gitee.com/hanliyang-kata-coco/deployment/raw/master/tools/build-and-install/AnolisOS-23/build-host-kernel.sh | bash +sudo yum install -y curl git && \ +curl https://gitee.com/hanliyang-kata-coco/deployment/raw/master/tools/build-and-install/AnolisOS-23/build-host-kernel.sh -o /dev/shm/build-host-kernel.sh && \ +chmod +x /dev/shm/build-host-kernel.sh && \ +/dev/shm/build-host-kernel.sh ``` -## 构建角色5需要的组件 +# 构建角色5需要的组件 **角色5**:位于**TEE认证鉴权、秘密管理的机器**,是 *认证 & 秘密数据的服务方* 。**角色7**把秘密数据(如镜像解密密钥、镜像验签公钥,等)、认证策略、认证评估参考值等登记到**角色5**,**角色5**对**角色2**上运行的机密容器环境进行身份证明,在证明机密容器环境的身份可信后,将秘密数据传递给**角色2**上的机密容器环境使用。 @@ -185,10 +335,12 @@ curl -sSL https://gitee.com/hanliyang-kata-coco/deployment/raw/master/tools/buil - 这3个镜像运行在guest owner的信任域,用于提供对海光kata机密容器的TEE环境认证鉴权服务、秘密存储和提供服务、guest owner定制秘密数据服务、guest owner定制评估策略服务等。 ```shell -curl -sSL https://gitee.com/hanliyang-kata-coco/deployment/raw/master/tools/build-and-install/AnolisOS-23/build-coco-kbs-as-rvps-docker-images.sh | bash +curl https://gitee.com/hanliyang-kata-coco/deployment/raw/master/tools/build-and-install/AnolisOS-23/build-coco-kbs-as-rvps-docker-images.sh -o /dev/shm/build-coco-kbs-as-rvps-docker-images.sh && \ +chmod +x /dev/shm/build-coco-kbs-as-rvps-docker-images.sh && \ +/dev/shm/build-coco-kbs-as-rvps-docker-images.sh ``` -## 构建角色4需要的组件 +# 构建角色4需要的组件 **角色4**:位于**制作容器镜像的机器**,是 *镜像制作服务方* 。**角色7**与**角色4**交互,制作并上传加密/签名镜像到**角色3**。 @@ -201,5 +353,7 @@ curl -sSL https://gitee.com/hanliyang-kata-coco/deployment/raw/master/tools/buil - 用于构建CoCo Key-Provider容器镜像,容器镜像名为`coco-keyprovider:v0.10.0`(这个镜像的容器需要部署在**制作容器镜像的机器**上),同时本地存储一份该镜像的导出包文件`$HOME/workspace/CoCo/coco-keyprovider_v0.10.0.tar`。 ```shell -curl -sSL https://gitee.com/hanliyang-kata-coco/deployment/raw/master/tools/build-and-install/AnolisOS-23/build-coco-keyprovider-docker-image.sh | bash +curl https://gitee.com/hanliyang-kata-coco/deployment/raw/master/tools/build-and-install/AnolisOS-23/build-coco-keyprovider-docker-image.sh -o /dev/shm/build-coco-keyprovider-docker-image.sh && \ +chmod +x /dev/shm/build-coco-keyprovider-docker-image.sh && \ +/dev/shm/build-coco-keyprovider-docker-image.sh ``` \ No newline at end of file