配置自动生成证书
若用户开启MindIE Server的TLS认证功能(HTTPS或GRPC)时,通信客户端需要校验服务端证书的IP,由于PodIP的动态性,需要在Pod启动时生成具有PodIP别名的服务证书,以实现MindIE Server中PD节点间的通信,以及MindIE MS对MindIE Server的证书认证和校验。MindIE提供证书生成能力,具体操作步骤如下所示。

建议用户在运行环境中的各个计算节点准备和配置证书,提升服务安全性。
操作步骤
此方法只适用于使用自签名CA证书进行证书签发的场景。
需要按照以下方法准备MindIE Server、MindIE Controller和MindIE Coordinator三套证书。
- 准备自签名CA证书和加密私钥及导入。
准备MindIE Server服务端数据面和管理面的CA证书和加密私钥
- 执行以下命令生成配置文件。
cat > ca.conf <<-EOF
配置文件ca.conf示例如下,其中req_distinguished_name中的字段需要自行配置:
[ req ] distinguished_name = req_distinguished_name prompt = no [ req_distinguished_name ] C = CN ST = Sichuan L = Chengdu O = Huawei OU = Ascend CN = MindIE [ v3_ca ] subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer basicConstraints = critical, CA:true keyUsage = critical, digitalSignature, cRLSign, keyCertSign EOF
- 执行以下命令创建格式为PKCS#1的PKI私钥ca.key.pem。
openssl genrsa -aes256 -out ca.key.pem 4096
- 根据回显输入私钥口令,然后按回车键。
Enter pass phrase for ca.key.pem: Verifying - Enter pass phrase for ca.key.pem:
出于安全考虑,以及后续导入证书的要求,用户输入的私钥口令的复杂度必须符合以下要求:
- 口令长度至少8个字符;
- 口令必须包含如下至少两种字符的组合:
- 至少一个小写字母;
- 至少一个大写字母;
- 至少一个数字;
- 至少一个特殊字符。
- 执行以下命令赋予ca.key.pem私钥文件可读权限。
chmod 400 ca.key.pem
- 执行以下命令检查是否存在ca.key.pem私钥文件,并查看私钥内容。
openssl rsa -in ca.key.pem
根据回显输入1.c设置的私钥口令,然后按回车键,当显示私钥内容时表示ca.key.pem私钥文件生成成功。
- 执行以下命令创建CSR文件,根据回显输入1.c设置的私钥口令,然后按回车键。
openssl req -out ca.csr -key ca.key.pem -new -config ca.conf -batch
- 执行以下命令赋予ca.csr文件可读可写权限。
chmod 600 ca.csr
- 执行以下命令检查是否存在ca.csr文件,当显示ca.csr文件内容表示ca.csr文件生成成功。
openssl req -in ca.csr -noout -text
- 执行以下命令生成CA证书ca.pem。
openssl x509 -req -in ca.csr -out ca.pem -sha256 -days 7300 -extfile ca.conf -extensions v3_ca -signkey ca.key.pem
- 执行以下命令检查是否存在ca.pem文件,当有回显内容时表示ca.pem生成成功。
openssl x509 -in ca.pem -noout -text
- 执行以下命令赋予ca.pem文件可读权限。
chmod 400 ca.pem
导入自签名CA证书和加密私钥
- 使用以下命令进入mindie-service安装目录。
cd /{MindIE安装目录}/mindie-service/
- 通过MindIE证书管理工具import_cert接口导入CA证书和私钥,输入证书私钥口令并生成KMC加密口令文件和KMC密钥库文件。MindIE证书管理工具详情请参见config_mindie_server_tls_cert.py。
python3 ./scripts/config_mindie_server_tls_cert.py ./security/ca import_cert {证书文件路径} {加密私钥文件路径}
参数解释:
- {证书文件路径}:为CA证书的源路径。
- {加密私钥文件路径}:为CA私钥的源路径。
在回显时输入生成CA密钥时设置的口令:
Password for private key file: Retype password for private key file:
- 执行以下命令生成配置文件。
- 准备生成证书的输入输出配置文件。
- 生成用户证书的配置文件(gen_cert.json):
{ "ca_cert": "./security/ca/ca.pem", "ca_key": "./security/ca/ca.key.pem", "ca_key_pwd": "./security/ca/ca_passwd.txt", "cert_config": "./cert_info.json", "output_path": "./gen_cert_output", "kmc_ksf_master": "./tools/pmt/master/ksfa", "kmc_ksf_standby": "./tools/pmt/standby/ksfb" }
- 配置"cert_config"参数中的cert_info.json配置文件的待生成证书信息:
{ "subject": "subject_name", "expired_time": 3650, "serial_number": 123, "req_distinguished_name": { "C": "***", "ST": "***", "L": "***", "O": "***", "OU": "***", "CN": "***" }, "alt_names": { "IP": [], "DNS": [] } }
- 生成用户证书的配置文件(gen_cert.json):
- 在脚本介绍的mindie_server.yaml、mindie_ms_controller.yaml和mindie_ms_coordinator.yaml配置文件中挂载上述自签名CA证书文件和配置文件到容器内/mnt/security目录,并配置为只读权限。
- 在脚本介绍的容器启动脚本boot.sh中适配添加证书生成命令,以生成MindIE Server的证书为例,在“if [ $exit_code -eq 2 ]; then”分支内添加以下生成证书的命令。
cp /mnt/security/ca.pem $MIES_INSTALL_PATH/security/ca cp /mnt/security/ca.key.pem $MIES_INSTALL_PATH/security/ca cp /mnt/security/ca_passwd.txt $MIES_INSTALL_PATH/security/ca cp /mnt/security/gen_cert.json $MIES_INSTALL_PATH cp /mnt/security/cert_info.json $MIES_INSTALL_PATH cp -r /mnt/security/tools $MIES_INSTALL_PATH/ chmod 500 ./bin/gen_cert mkdir gen_cert_output python3 ./scripts/config_mindie_server_tls_cert.py ./ gen_cert ./gen_cert.json --ip=$MIES_CONTAINER_IP,{host_ip} chmod 400 ./gen_cert_output/* // 拷贝生成的证书到特定的路径 cp ./gen_cert_output/cert.pem /home/{用户名称}/Ascend/mindie/latest/mindie-service/security/certs/server.pem cp ./gen_cert_output/cert.key.pem /home/{用户名称}/Ascend/mindie/latest/mindie-service/security/keys/server.key.pem cp ./gen_cert_output/cert_passwd.txt /home/{用户名称}/Ascend/mindie/latest/mindie-service/security/pass/mindie_server_key_pwd.txt rm -rf ./gen_cert_output/* // 下面使用其他证书配置(gen_cert_xxx.json, cert_info_xxx.json)重复上述步骤继续导入其他证书 // cp /mnt/security/gen_cert_xxx.json $MIES_INSTALL_PATH // cp /mnt/security/cert_info_xxx.json $MIES_INSTALL_PATH // python3 ./scripts/config_mindie_server_tls_cert.py ./ gen_cert ./gen_cert_xxx.json --ip=$MIES_CONTAINER_IP,{host_ip}
{host_ip}:仅MindIE MS调度器(Coordinator)需要配置,配置为提供推理API的物理机IP。
- MindIE Server、MindIE MS控制器(Controller)和MindIE MS调度器(Coordinator)三套证书准备完成后,请参考MindIE Server配置说明、MindIE MS控制器(Controller)配置说明和MindIE MS调度器(Coordinator)配置说明将每个证书拷贝至指定的路径下。
- 启动MindIE Server Pod调用生成证书接口如出现“failed to read random number from system.”报错,大概率是由于环境熵不足,需要在计算节点安装haveged组件补熵。详情请参考《MindIE安装指南》中 章节,将熵补至4096。
父主题: 基于Kubernetes部署