配置SSL加密相关证书
为了确保OmniAdvisor参数调优功能与Spark History Server和PostgreSQL数据库之间的通信安全,建议启用SSL加密通信。默认情况下,通信已启用SSL加密,但仍需用户手动配置证书相关参数。
以下是详细的配置步骤:
- 请参考PostgreSQL的官方文档生成SSL证书,确保安全通信。
- 生成Spark History Server加密证书。
以下是一个生成Spark History Server加密证书的脚本示例。请根据实际需求修改脚本中的SERVER_IP、CLIENT_IP以及各类路径变量参数,不可直接套用。
#!/bin/bash # -------------------------------------------------- # Spark Mutual TLS (mTLS)双向认证证书生成脚本 # Spark Client和Spark History Server使用的证书由同一个自签名CA签发 # -------------------------------------------------- set -euo pipefail # 设置变量 HOME_DIR="/home/omniadvisor_test/ssl" CA_DIR="$HOME_DIR/spark-tls-ca" CLIENT_DIR="$HOME_DIR/spark-client" SERVER_DIR="$HOME_DIR/spark-history-server" PKCS12_PASS="123456" SERVER_IP="6.6.6.6" CLIENT_IP="6.6.6.6" CA_KEY="$CA_DIR/ca.key" CA_CERT="$CA_DIR/ca.crt" CLIENT_KEY="$CLIENT_DIR/spark-client.key" CLIENT_CSR="$CLIENT_DIR/spark-client.csr" CLIENT_CERT="$CLIENT_DIR/spark-client.crt" CLIENT_P12="$CLIENT_DIR/spark-history-client.p12" SERVER_KEY="$SERVER_DIR/spark-history-server.key" SERVER_CSR="$SERVER_DIR/spark-history-server.csr" SERVER_CERT="$SERVER_DIR/spark-history-server.crt" SERVER_P12="$SERVER_DIR/spark-history-server.p12" # 创建目录 mkdir -p "$CA_DIR" "$CLIENT_DIR" "$SERVER_DIR" echo "[*] 正在生成CA(Certificate Authority)密钥和证书..." # 生成 CA 私钥 openssl genrsa -out "$CA_KEY" 2048 # 5. 生成SAN扩展文件 cat > "$CA_DIR/san.ext" <<EOF authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment subjectAltName = @alt_names [alt_names] IP.1 = $SERVER_IP EOF # 生成CA自签名证书(有效期10年) openssl req -x509 -new -nodes -key "$CA_KEY" \ -sha256 -days 365 \ -out "$CA_CERT" \ -subj "/C=CN/ST=Beijing/L=Beijing/O=SparkInternal/OU=Dev/CN=$SERVER_IP" echo "[✓] CA 已生成: $CA_KEY, $CA_CERT" # ====================== # 为客户端生成证书 # ====================== echo "[*] 正在为Spark Client生成密钥和证书..." # 生成客户端私钥 openssl genrsa -out "$CLIENT_KEY" 2048 # 生成客户端CSR openssl req -new -key "$CLIENT_KEY" \ -out "$CLIENT_CSR" \ -subj "/C=CN/ST=Beijing/L=Beijing/O=SparkInternal/OU=Client/CN=$CLIENT_IP" # 使用CA签发客户端证书(有效期1年) openssl x509 -req -in "$CLIENT_CSR" \ -CA "$CA_CERT" -CAkey "$CA_KEY" -CAcreateserial \ -out "$CLIENT_CERT" -days 365 -sha256 \ -extfile "$CA_DIR/san.ext" # 导出为p12格式 openssl pkcs12 -export \ -in $CLIENT_CERT \ -inkey $CLIENT_KEY \ -out $CLIENT_P12 \ -name myserver \ -password pass:$PKCS12_PASS echo "[✓] Spark Client 证书已生成: $CLIENT_KEY, $CLIENT_CERT" # ====================== # 为Spark History Server生成证书 # ====================== echo "[*] 正在为Spark History Server生成密钥和证书..." # 生成服务端私钥 openssl genrsa -out "$SERVER_KEY" 2048 # 生成服务端 CSR openssl req -new -key "$SERVER_KEY" \ -out "$SERVER_CSR" \ -subj "/C=CN/ST=Beijing/L=Beijing/O=SparkInternal/OU=Server/CN=$SERVER_IP" # 使用CA签发服务端证书(有效期1年) openssl x509 -req -in "$SERVER_CSR" \ -CA "$CA_CERT" -CAkey "$CA_KEY" -CAcreateserial \ -out "$SERVER_CERT" -days 365 -sha256 \ -extfile "$CA_DIR/san.ext" # 导出为p12格式 openssl pkcs12 -export \ -in $SERVER_CERT \ -inkey $SERVER_KEY \ -out $SERVER_P12 \ -name myserver \ -password pass:$PKCS12_PASS echo "[✓] Spark History Server证书已生成: $SERVER_KEY, $SERVER_CERT" # ====================== # 输出总结 # ====================== echo "" echo "==================================================" echo " Spark mTLS双向认证证书生成完成" echo "所有文件保存在当前目录下的子文件夹中:" echo "" echo "CA (用于验证双方证书):" echo " - $CA_CERT : CA公钥证书(需被client和server双方信任)" echo " - $CA_KEY : CA私钥(请妥善保管)" echo "" echo "Spark Client:" echo " - $CLIENT_KEY : 客户端私钥" echo " - $CLIENT_CERT : 客户端证书(由CA签发)" echo "" echo "Spark History Server:" echo " - $SERVER_KEY : 服务端私钥" echo " - $SERVER_CERT : 服务端证书(由CA签发)" echo "" echo " 双向认证原理:" echo " - Client会使用$CLIENT_CERT向Server证明自己的身份" echo " - Server会使用$SERVER_CERT向Client证明自己的身份" echo " - 双方都信任$CA_CERT(即CA是可信的根)" echo "" echo " 下一步:将这些证书配置到Spark Client和Spark History Server的SSL配置中。" echo " 包括:spark.ssl.*, spark.history.ui.ssl.*, keyStore, trustStore等" echo "=================================================="
- 修改common_config.ini配置文件。
- 进入配置文件目录并打开配置文件。
cd $OMNIADVISOR_HOME/omniruntime-omniadvisor-2.0.0/config vi common_config.ini
- 按“i”进入编辑模式,根据实际环境修改以下配置项。
[database] # PostgreSQL后端数据库的SSL模式 postgresql.database.sslmode=verify-full # PostgreSQL后端数据库的服务端CA根证书路径 postgresql.database.sslrootcert=/path/to/pg-sql/ca.crt # PostgreSQL后端数据库的客户端证书路径 postgresql.database.sslcert=/path/to/pg-sql/client_postgres.crt # PostgreSQL后端数据库的客户端私钥路径 postgresql.database.sslkey=/path/to/pg-sql/client_postgres.key # PostgreSQL后端数据库的客户端私钥密码(若无密码可留空) postgresql.database.sslpassword= [spark] # Spark History Server的URL(仅用于Rest模式) spark.history.rest.url=https://<server1>:18480 # Spark History Server的SSL双向校验开关,默认开启(不可为空,必须配置) spark.history.sslverify = True # Spark History Server的SSL双向校验证书相关文件(仅在sslverify为True时生效) spark.history.sslrootca =/path/to/spark-tls-ca/ca.crt spark.history.sslcrt =/path/to/spark-client/spark-client.crt spark.history.sslkey =/path/to/spark-client/spark-client.key
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 进入配置文件目录并打开配置文件。
- 配置Spark History Server。
- 打开“$SPARK_HOME/conf/spark-defaults.conf”文件。
vi $SPARK_HOME/conf/spark-defaults.conf
- 按“i”进入编辑模式,添加以下TLS相关配置。其中,spark.ssl.keyStore,spark.ssl.keyStorePassword,spark.ssl.keyPassword,spark.ssl.trustStore,spark.ssl.trustStorePassword请根据实际情况填写。
spark.ssl.historyServer.enabled true spark.ssl.protocol TLSv1.2 spark.ssl.keyStoreType PKCS12 spark.ssl.keyStore /path/to/spark-history-server.p12 spark.ssl.keyStorePassword your_password spark.ssl.keyPassword your_password spark.ssl.trustStore /path/to/spark-history-client.p12 spark.ssl.trustStorePassword your_password spark.ssl.needClientAuth true
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 重启Spark History Server服务。
在Spark的“sbin”目录下,使用如下命令停止和启动Spark History Server服务。
# 停止Spark History Server sh $SPARK_HOME/sbin/stop-history-server.sh # 启动Spark History Server sh $SPARK_HOME/sbin/start-history-server.sh
- 打开“$SPARK_HOME/conf/spark-defaults.conf”文件。
父主题: 使用特性