You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SparkPi提交K8s集群失败:无法找到有效证书路径

Spark on Kubernetes 任务崩溃:PKIX证书路径问题排查与解决

问题描述

使用Spark 3.5.1提交SparkPi示例到Rancher Desktop管理的K8s集群,Driver Pod创建后几秒崩溃,核心报错为:

Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

执行命令:

spark-submit.cmd --master k8s://https://172.17.45.59:6443 --deploy-mode cluster --name spark-pi --class org.apache.spark.examples.SparkPi --conf spark.executor.instances=2 --conf spark.kubernetes.container.image=spark:our-own-apache-spark-kb8 --conf spark.kubernetes.container.image.pullPolicy=IfNotPresent --conf spark.kubernetes.authenticate.driver.serviceAccountName=spark local:///opt/spark/examples/jars/spark-examples_2.13-3.5.1.jar 100

根本原因

Spark Driver Pod中的JVM信任库未包含Rancher Desktop K8s集群的CA证书,导致Driver与K8s API Server建立SSL连接时无法验证服务器身份,握手失败。

解决步骤

1. 提取Rancher Desktop的K8s CA证书

从本地kubeconfig文件中解码CA证书:

# Windows环境可使用Git Bash或PowerShell执行
cat ~/.kube/config | findstr certificate-authority-data | awk '{print $2}' | base64 -d > ca.crt

2. 构建包含CA证书的Spark镜像

修改自定义Spark镜像的Dockerfile,将CA证书导入JVM信任库:

FROM spark:our-own-apache-spark-kb8
COPY ca.crt /opt/spark/ca.crt
# 默认JVM信任库密码为changeit
RUN keytool -importcert -file /opt/spark/ca.crt -alias rancher-k8s-ca -keystore $JAVA_HOME/lib/security/cacerts -storepass changeit -noprompt

重新构建镜像:

docker build -t spark:our-own-apache-spark-kb8-with-ca .

3. 使用新镜像提交任务

更新spark-submit命令中的镜像参数:

spark-submit.cmd --master k8s://https://172.17.45.59:6443 --deploy-mode cluster --name spark-pi --class org.apache.spark.examples.SparkPi --conf spark.executor.instances=2 --conf spark.kubernetes.container.image=spark:our-own-apache-spark-kb8-with-ca --conf spark.kubernetes.container.image.pullPolicy=IfNotPresent --conf spark.kubernetes.authenticate.driver.serviceAccountName=spark local:///opt/spark/examples/jars/spark-examples_2.13-3.5.1.jar 100

临时方案(仅测试环境)

若需快速验证,可临时禁用SSL证书验证(生产环境禁止使用),添加以下配置到spark-submit命令:

--conf spark.kubernetes.ssl.trustStore=/dev/null --conf spark.kubernetes.ssl.trustStorePassword='' --conf spark.kubernetes.ssl.trustStoreType=PEM

内容的提问来源于stack exchange,提问作者PowerfullDeveloper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 09:07:03