TLS 支持
TLS(传输层安全协议)是一种确保互联网通信安全的加密协议。本指南详细说明了如何在 Alluxio 中配置 TLS 支持,以保护 RPC 和数据传输。需注意的是,尽管启用 TLS 可在传输过程中确保数据的完整性和保密性,但也可能会因数据传输产生性能开销。
启用 TLS 加密
在配置 Alluxio 进行 TLS 加密时,需设置密钥库(keystore)和信任库(truststore)。
密钥库和信任库概览
密钥库:存储密钥和证书的仓库。
信任库:存储受信任的证书的仓库。
设置密钥库
Alluxio 服务器(包括 worker 和 coordinator)需要密钥库来启用 TLS。密钥库保存服务器的私钥和证书。请确保运行 Alluxio 服务器进程的操作系统用户可以访问密钥库文件。
使用以下命令创建一个自签名密钥库:
该命令会在 /alluxio/keystore.jks
中生成一个密钥库,并将密钥密码和密钥库密码都设置为 keypass。
设置信任库
参与 TLS 连接的所有客户端都需要通过信任库来验证服务器提供的证书。Alluxio 中的客户端包括 Alluxio 客户端、worker(与 coordinator 通信)以及 coordinator 本身(与 worker 通信)。发起连接的进程必须能访问信任库。
使用上一步中的密钥库创建信任库:
第一个命令使用密码
keypass
从密钥库中提取证书。第二个命令将该证书导入到位于
/alluxio/truststore.jks
的信任库中,密码为trustpass
。
配置 Alluxio 服务器
在设置好密钥库和信任库后,将以下属性添加到 Alluxio 服务器上的 alluxio-site.properties
文件中:
**注意:**在 worker 上启用 TLS 时需要将 alluxio.worker.network.netty.file.transfer
设置为 MAPPED
,这可能会因禁用 Netty 的零拷贝功能而影响到性能。
进阶设置
**设置 TLS 协议:**要限制服务器使用某些 TLS 协议,请设置:
alluxio.network.tls.server.protocols=TLSv1.2,TLSv1.3
。**密钥库中的多个密钥:**如果存在多个密钥,请设置密钥别名:
alluxio.network.tls.keystore.alias=serverkey
。禁用客户端主机名验证:对于需要灵活访问服务的用户,可禁用主机名验证:
alluxio.network.tls.client.no.endpoint.identification=true
。
配置 Alluxio 客户端
将以下属性添加到 Alluxio 客户端的 alluxio-site.properties
文件中:
在完成这些配置后,与 Alluxio 的所有网络通信将使用 TLS 加密。
使用 TLS 配置与 ETCD 的连接
如果您的 Alluxio 集群使用 ETCD 并要求使用 TLS 加密连接,请查看使用外部 etcd 章节。
在 Kubernetes 中启用 Alluxio 的 TLS 加密
鉴于 pods 是短暂性的,在 Kubernetes 中启用 TLS 的方式有所不同。请按照以下步骤在 Kubernetes 环境中启用 Alluxio 的 TLS 加密。
**生成密钥对(**Keypair)
按照 “设置密钥库”和“设置信任库”章节所述,使用 keytool
生成密钥库和信任库对。在 Kubernetes 中,通常会禁用客户端的主机名验证,这是因为 pod 的主机名可能会发生变化。
创建 Kubernetes Secrets
使用生成的密钥库和信任库创建 Kubernetes secrets:
将 Secrets 挂载到 Pods
在使用 operator 安装 Alluxio 时,在alluxio-cluster.yaml
文件的spec.secrets
部分配置 secrets:
上述操作将把 secret 挂载到指定路径下的 pod 中。
在 Kubernetes 中配置 Alluxio 属性
在 alluxio-cluster.yaml
文件的 spec.properties
部分设置 Alluxio 属性:
示例
配置 Spark 启用TLS
要使用支持 TLS 的 Alluxio 客户端配置 Spark,请在 spark-defaults.conf 中设置以下属性:
将 <TRUSTSTORE_PATH> 和 <TRUSTSTORE_PASSWORD> 替换为信任存储库的路径和密码。
注意: 如果出现OPENSSL_internal:SSLV3_ALERT_HANDSHAKE_FAILURE
等错误,请设置 TLS 协议版本:
在 Kubernetes 中配置 Trino 启用TLS
要在 Trino 访问 Kubernetes 中的 Alluxio 集群时启用 TLS,请按照以下步骤操作:
将 Kubernetes Secrets 挂载到 Trino
在为密钥库和信任库创建 secrets 后,将 secrets 挂载到 Trino pod。如果使用的是 Trino 的官方 Helm chart,请在 values.yaml 文件中添加以下内容:
在 Trino 中配置 TLS 属性
在 Trino 配置中添加与 TLS 相关的 Alluxio 属性:
这些属性应同时添加到 Trino coordinator 和 Worker 的配置中。
Last updated