TLS
概述
可以通过 tls
插件接口为内部 Slurm 集群通信启用 TLS。
s2n
tls/s2n
插件使用亚马逊的 TLS 实现
s2n-tls,这是一个 C99
的 TLS/SSL 协议实现,旨在简单、小巧、快速,并将安全性作为优先考虑。
安装
从他们的公共 GitHub 仓库构建 s2n-tls:
git clone https://github.com/aws/s2n-tls.git cd s2n-tls/ cmake . -B build/ -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON cmake --build build/ -j $(nproc) cmake --install build/
请注意,cmake -DBUILD_SHARED_LIBS=ON
标志
是构建 Slurm 使用的 libs2n.so
共享对象所必需的。
请遵循 s2n-tls 构建文档以获取有关不同可能设置的进一步指导。
设置
要为内部 Slurm 集群通信启用 TLS,请在 slurm.conf 和
slurmdbd.conf 中配置 TLSType 选项以使用 tls/s2n
插件。
所有 Slurm 组件都需要访问一个公共 CA 证书。 slurmctld、slurmdbd 和 slurmrestd 需要拥有各自独特的证书/密钥对。这些证书必须链到指定的 CA 证书。请注意,这些证书/密钥对只需由各自的守护进程访问。只有 CA 证书文件需要 由 Slurm 组件访问。
slurmd 和 sackd 也可以拥有静态预定义的证书/密钥对,或者它们
可以选择使用 certmgr
插件接口动态
检索和更新其证书/密钥对。如果未配置 certmgr
插件接口,则需要有一个静态
预定义的证书/密钥对。有关更多信息,请参见
TLS 证书管理 页面。
以下是默认的证书/密钥 PEM 文件名列表,预期在 Slurm 的默认 etc 目录中。可以通过 TLSParameters
为每个文件设置不同的绝对文件路径。
ca_cert.pem
ctld_cert.pem
ctld_cert_key.pem
dbd_cert.pem
dbd_cert_key.pem
restd_cert.pem
restd_cert_key.pem
sackd_cert.pem
sackd_cert_key.pem
slurmd_cert.pem
slurmd_cert_key.pem
在某些情况下(例如步骤 IO、等待步骤分配等),某些客户端
命令需要创建监听套接字服务器。为了让其他 Slurm
组件连接到这些监听套接字,它们需要一个可以信任的 TLS 证书。客户端命令通过临时生成
自签名证书,使用 certgen
插件接口,并
在预先建立的 TLS 连接中安全共享这些证书。
默认情况下,certgen
插件不需要配置,将
使用 openssl cli 生成自签名证书/密钥对。可以
选择配置使用不同的脚本生成该对,通过
CertgenParameters。
配置 tls/s2n
插件和证书后,
可以在守护进程日志中看到以下调试日志:
debug: tls/s2n: init: tls/s2n loaded请注意,当未配置 tls/s2n 时,将始终看到这一行:
debug: tls/none: init: tls/none loaded
配置了 DebugFlags=TLS 后,可以在日志中看到 RPC 连接的极其详细的视图。例如,以下是 slurmctld 和 slurmdbd 之间连接的内容:
slurmctld: tls/s2n: tls_p_create_conn: TLS: tls/s2n: cipher suite:TLS_AES_128_GCM_SHA256, {0x13,0x01}. fd:17. slurmctld: tls/s2n: tls_p_create_conn: TLS: tls/s2n: connection successfully created. fd:17. tls mode:client
slurmdbd: tls/s2n: tls_p_create_conn: TLS: tls/s2n: cipher suite:TLS_AES_128_GCM_SHA256, {0x13,0x01}. fd:13. slurmdbd: tls/s2n: tls_p_create_conn: TLS: tls/s2n: connection successfully created. fd:13. tls mode:server
OpenSSL 示例
以下是一些如何生成 tls/s2n
插件所需的证书密钥/对的示例。这些示例不适合在
生产环境中使用。
生成自签名 CA 证书密钥对:
openssl ecparam -out ca_key.pem -name prime256v1 -genkey chmod 0400 ca_key.pem openssl req -x509 -key ca_key.pem -out ca_cert.pem -subj "/C=XX/ST=StateName/L=CityName/O=CompanyName/OU=CompanySectionName/CN=my_slurm_ca" chmod 0444 ca_cert.pem
从 CA 证书生成签名证书:
openssl ecparam -out ctld_key.pem -name prime256v1 -genkey chmod 0400 ctld_key.pem # 确保密钥的所有权与运行守护进程的用户匹配 openssl req -new -key ctld_key.pem -out ctld_csr.pem -subj "/C=XX/ST=StateName/L=CityName/O=CompanyName/OU=CompanySectionName/CN=ctld" openssl x509 -req -in ctld_csr.pem -CA ca_cert.pem -CAkey ca_key.pem -out ctld_cert.pem -sha384 chmod 0444 ctld_cert.pem
最后修改于 2025 年 6 月 09 日