鲲鹏社区首页
中文
注册
开发者
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

配置SSL加密相关证书

为了确保OmniAdvisor参数调优功能与Spark History Server和PostgreSQL数据库之间的通信安全,建议启用SSL加密通信。默认情况下,通信已启用SSL加密,但仍需用户手动配置证书相关参数。

以下是详细的配置步骤:

  1. 请参考PostgreSQL的官方文档生成SSL证书,确保安全通信。
  2. 生成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 "=================================================="
  3. 修改common_config.ini配置文件。
    1. 进入配置文件目录并打开配置文件。
      cd $OMNIADVISOR_HOME/omniruntime-omniadvisor-2.0.0/config
      vi common_config.ini
    2. “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
    3. “Esc”键,输入:wq!,按“Enter”保存并退出编辑。
  4. 配置Spark History Server。
    1. 打开“$SPARK_HOME/conf/spark-defaults.conf”文件。
      vi $SPARK_HOME/conf/spark-defaults.conf
    2. “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
    3. “Esc”键,输入:wq!,按“Enter”保存并退出编辑。
    4. 重启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