如何使用受自签名证书保护的 S3 (Minio) 运行 Apache Spark?

Yas*_*r S 5 amazon-s3 apache-spark minio

我使用自签名证书通过 TLS安装了 Minio(我使用helm在 Kubernetes 中安装了 Minio)。之前我可以在没有 TLS 的情况下使用 Minio 运行我的 Spark 作业。现在无法连接到 Minio(正常!)

然后,我从 tls 证书创建了一个信任库文件

keytool -import \
  -alias tls \
  -file tls.crt \
  -keystore truststore.jks \
  -storepass "$minioTruststorePass" \
  -noprompt
Run Code Online (Sandbox Code Playgroud)

我使用信任库的内容创建一个 Kubernetes 密钥,并在 Spark-defaults.conf 中使用以下选项来让 Spark 使用信任库:

spark.kubernetes.driver.secrets.minio-truststore-secret
Run Code Online (Sandbox Code Playgroud)

最后,我在我的spark-defaults.conf中做了以下所有更改,但同样的问题

spark.hadoop.fs.s3a.endpoint                                      https://smart-agriculture-minio:9000
spark.hadoop.fs.s3.awsAccessKeyId                                 <s3aAccessKey>
spark.hadoop.fs.s3.awsSecretAccessKey                             <s3aSecretKey>
spark.hadoop.fs.s3.impl                                           org.apache.hadoop.fs.s3a.S3AFileSystem
spark.hadoop.fs.s3a.access.key                                    <s3aAccessKey>
spark.hadoop.fs.s3a.secret.key                                    <s3aSecretKey>
spark.hadoop.fs.s3a.path.style.access                             true
spark.hadoop.fs.s3a.impl                                          org.apache.hadoop.fs.s3a.S3AFileSystem
spark.hadoop.fs.s3a.connection.ssl.enabled                        true
spark.driver.extraJavaOptions                                      -Djavax.net.ssl.trustStore=/opt/spark/conf/minio/truststore/truststore.jks -Djavax.net.ssl.trustStorePassword=<minioTruststorePass>
spark.executor.extraJavaOptions                                   -Djavax.net.ssl.trustStore=/opt/spark/conf/minio/truststore/truststore.jks -Djavax.net.ssl.trustStorePassword=<minioTruststorePass>
Run Code Online (Sandbox Code Playgroud)

您是否曾经遇到过这个问题并且您有解决办法吗?

谢谢

小智 0

Spark 使用 hadoop 库,它使用 aws-sdk,因此您应该禁用证书检查。

com.amazonaws.sdk.disableCertChecking=true
Run Code Online (Sandbox Code Playgroud)

据我了解,您想获得 k8s + Spark 运算符的答案,只需将驱动程序和执行程序的此属性添加到您的 yaml 文件中

javaOptions: "-Dcom.amazonaws.sdk.disableCertChecking=true"
Run Code Online (Sandbox Code Playgroud)

仅供参考:https: //github.com/GoogleCloudPlatform/spark-on-k8s-operator/blob/master/docs/user-guide.md#specifying-extra-java-options

https://github.com/aws/aws-sdk-java/blob/master/aws-java-sdk-core/src/main/java/com/amazonaws/SDKGlobalConfiguration.java#L29-L34