motor支持https加密通信
快速开始
按照以下步骤启用TLS加密通信:
重要提示:
- 以下操作需要在宿主机上执行,因为
/mnt目录通过hostPath方式挂载到容器中- 在多节点集群环境中,
/mnt目录必须是共享存储(如NFS、CephFS等),确保所有节点都能访问相同的证书文件- 如果使用本地存储,需要确保每个节点都执行以下步骤,或者使用共享存储方案
-
在宿主机上创建证书脚本目录:
mkdir -p /mnt/cert_scripts # you can specific your cert scripts dir -
拷贝证书生成脚本到宿主机的/mnt/cert_scripts/目录:
cp openssl_gen_ca.sh /mnt/cert_scripts/ # path could be specific cp openssl_gen_cert.sh /mnt/cert_scripts/ # path could be specific chmod +x /mnt/cert_scripts/*.sh -
在宿主机上生成CA证书:
bash /mnt/cert_scripts/openssl_gen_ca.sh /mnt/cert_scripts/ca/ # path could be specific -
配置相关环境变量:
在部署配置文件(如
env.json)的motor_common_env中添加:{ "version": "2.0.0", "motor_common_env": { ..., "ENABLE_GEN_CERT": "true" }, ... }必需环境变量:
ENABLE_GEN_CERT: 设置为"true"启用TLS证书自动生成
可选环境变量(不配置则使用默认值):
CA_PATH: CA证书所在路径(默认:/mnt/cert_scripts/ca)BASE_CERT_PATH: 证书保存的基础路径(默认:/usr/local/Ascend/pyMotor/conf/security)CERT_NAMES: 需要生成的证书名称列表(默认:infer mgmt)etcd和grpc证书为可选,仅在启用ETCD相关功能(持久化或主备)且对ETCD有安全性要求时才需要配置
GEN_CERT_SCRIPT: 证书生成脚本路径(默认:/mnt/cert_scripts/openssl_gen_cert.sh)
-
配置证书路径:
在
user_config.json中配置TLS证书路径,详见 3. 配置证书 -
启动服务,系统会自动生成所需证书
详细说明
1. 准备证书生成环境
前提条件:
- YAML配置中已通过hostPath方式挂载宿主机的
/mnt目录到容器 - 需要在宿主机上准备证书生成脚本和CA证书
在宿主机上执行:
# 创建证书脚本目录
mkdir -p /mnt/cert_scripts
# 拷贝脚本(假设脚本在当前目录)
cp openssl_gen_ca.sh /mnt/cert_scripts/
cp openssl_gen_cert.sh /mnt/cert_scripts/
chmod +x /mnt/cert_scripts/*.sh
# 生成CA证书
bash /mnt/cert_scripts/openssl_gen_ca.sh /mnt/cert_scripts/ca/
2. 生成服务端证书
通过openssl_gen_cert.sh生成服务端证书,将其拷贝到/mnt/cert_scripts目录下。
证书生成逻辑已集成到common.sh中,会自动根据环境变量ENABLE_GEN_CERT判断是否生成证书。
2.1 配置ENABLE_GEN_CERT环境变量
在部署配置文件(如env.json)中添加ENABLE_GEN_CERT环境变量:
{
"version": "2.0.0",
"motor_common_env": {
...,
"ENABLE_GEN_CERT": "true"
},
...
}
说明:
- 在
motor_common_env中添加"ENABLE_GEN_CERT": "true"即可启用TLS证书自动生成 - 当
ENABLE_GEN_CERT设置为true时,common.sh会在服务启动时自动调用证书生成函数 - 证书会生成到
/usr/local/Ascend/pyMotor/conf/security/目录下 - 生成的证书包括:infer、mgmt、etcd、grpc四种类型
2.2 自定义证书路径配置(可选)
如果需要自定义证书路径,可通过以下环境变量配置:
{
"version": "2.0.0",
"motor_common_env": {
...,
"ENABLE_GEN_CERT": "true",
"CA_PATH": "/mnt/cert_scripts/ca",
"BASE_CERT_PATH": "/usr/local/Ascend/pyMotor/conf/security",
"CERT_NAMES": "infer mgmt",
"GEN_CERT_SCRIPT": "/mnt/cert_scripts/openssl_gen_cert.sh"
},
...
}
环境变量说明:
| 环境变量 | 说明 | 默认值 |
|---|---|---|
CA_PATH |
CA证书所在路径 | /mnt/cert_scripts/ca |
BASE_CERT_PATH |
证书保存的基础路径 | /usr/local/Ascend/pyMotor/conf/security |
CERT_NAMES |
需要生成的证书名称列表,空格分隔 | infer mgmt |
GEN_CERT_SCRIPT |
证书生成脚本路径 | /mnt/cert_scripts/openssl_gen_cert.sh |
注意:CERT_NAMES默认只包含infer和mgmt证书。etcd和grpc证书为可选,仅在启用ETCD相关功能(持久化或主备)且对ETCD有安全性要求时才需要添加。
使用场景:
- 自定义CA证书存储位置
- 修改证书生成目录
- 调整需要生成的证书类型
- 使用非标准路径的证书生成脚本
生成的文件:
对于每个cert_name,会在${BASE_CERT_PATH}/${cert_name}/目录下生成:
cert.pem- 服务器证书cert.key.pem- 加密的私钥decrypt.cert.key.pem- 未加密的私钥(用于配置中的key_file)cert.conf- OpenSSL配置文件
3. 配置证书
在user_config.json中增加如下配置项,enable设置成true,同时证书路径要配置正确
限制:当前只支持解密的
key_file,passwd_file和tls_crl为预留字段
{
"motor_deploy_config": {
"tls_config": {
"infer_tls_config": {
"enable_tls": true,
"ca_file": "/usr/local/Ascend/pyMotor/conf/security/infer/ca.pem",
"cert_file": "/usr/local/Ascend/pyMotor/conf/security/infer/cert.pem",
"key_file": "/usr/local/Ascend/pyMotor/conf/security/infer/decrypt.cert.key.pem",
"passwd_file": "",
"tls_crl": ""
},
"mgmt_tls_config": {
"enable_tls": true,
"ca_file": "/usr/local/Ascend/pyMotor/conf/security/mgmt/ca.pem",
"cert_file": "/usr/local/Ascend/pyMotor/conf/security/mgmt/cert.pem",
"key_file": "/usr/local/Ascend/pyMotor/conf/security/mgmt/decrypt.cert.key.pem",
"passwd_file": "",
"tls_crl": ""
},
"etcd_tls_config": {
"enable_tls": false,
"ca_file": "/usr/local/Ascend/pyMotor/conf/security/etcd/ca.pem",
"cert_file": "/usr/local/Ascend/pyMotor/conf/security/etcd/cert.pem",
"key_file": "/usr/local/Ascend/pyMotor/conf/security/etcd/decrypt.cert.key.pem",
"passwd_file": "",
"tls_crl": ""
},
"grpc_tls_config": {
"enable_tls": false,
"ca_file": "/usr/local/Ascend/pyMotor/conf/security/grpc/ca.pem",
"cert_file": "/usr/local/Ascend/pyMotor/conf/security/grpc/cert.pem",
"key_file": "/usr/local/Ascend/pyMotor/conf/security/grpc/decrypt.cert.key.pem",
"passwd_file": "",
"tls_crl": ""
}
}
}
}
说明:
infer_tls_config和mgmt_tls_config:默认启用TLS加密通信etcd_tls_config和grpc_tls_config:默认禁用,仅在启用ETCD相关功能(持久化或主备)且对ETCD有安全性要求时才需要启用- 如需启用etcd和grpc的TLS,需要:
- 在
env.json中设置CERT_NAMES环境变量包含etcd grpc(如:"CERT_NAMES": "infer mgmt etcd grpc") - 将对应的
enable_tls设置为true
- 在
注意事项
- 重要:证书生成脚本和CA证书必须在宿主机的
/mnt/cert_scripts/目录中准备 - 多节点集群:在多节点环境中,
/mnt目录必须使用共享存储(如NFS、CephFS等),确保所有节点都能访问相同的证书文件 - 单节点或本地存储:如果使用本地存储,需要在每个节点上重复执行证书准备工作
- 自定义路径:可通过环境变量
CA_PATH、BASE_CERT_PATH、CERT_NAMES、GEN_CERT_SCRIPT自定义证书路径 - YAML配置中通过hostPath方式挂载宿主机的
/mnt目录,容器内可访问/mnt/cert_scripts/ - 证书生成应在服务启动之前完成,确保服务启动时证书文件已存在
- 如果证书已存在,脚本会提示是否覆盖,可根据实际需求选择
- 证书路径和名称需要与
user_config.json中的配置保持一致 - 证书生成逻辑已集成到
common.sh中,无需手动修改boot.sh - 如果启动时报错找不到脚本或证书,请检查宿主机的
/mnt/cert_scripts/目录是否正确配置,或检查环境变量配置