For the complete documentation index, see llms.txt. This page is also available as Markdown.

TLS 支持

TLS(传输层安全协议)是一种确保互联网通信安全的加密协议。本指南详细说明了如何在 Alluxio 中配置 TLS 支持,以保护 RPC 和数据传输。需注意的是,尽管启用 TLS 可在传输过程中确保数据的完整性和保密性,但也可能会因数据传输产生性能开销。

启用 TLS 加密

在配置 Alluxio 进行 TLS 加密时,需设置密钥库(keystore)和信任库(truststore)。

密钥库和信任库概览

  • 密钥库:存储密钥和证书的仓库。

  • 信任库:存储受信任的证书的仓库。

设置密钥库

Alluxio 服务器(包括 worker 和 coordinator)需要密钥库来启用 TLS。密钥库保存服务器的私钥和证书。请确保运行 Alluxio 服务器进程的操作系统用户可以访问密钥库文件。

使用以下命令创建一个自签名密钥库:

keytool -genkeypair -alias key -keyalg RSA -keysize 2048 \
  -dname "CN=localhost, OU=Department, O=Company, L=City, ST=State, C=US" \
  -keystore /alluxio/keystore.jks -keypass keypass -storepass keypass

该命令会在 /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