【问题标题】:How to run Apache Spark with S3 (Minio) secured with self-signed certificate?如何使用自签名证书保护的 S3 (Minio) 运行 Apache Spark?
【发布时间】:2020-04-19 08:47:58
【问题描述】:

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

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

keytool -import \
  -alias tls \
  -file tls.crt \
  -keystore truststore.jks \
  -storepass "$minioTruststorePass" \
  -noprompt

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

spark.kubernetes.driver.secrets.minio-truststore-secret

最后,我在 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.drive.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>

你有没有遇到过这个问题,你有解决它的想法吗?

谢谢

【问题讨论】:

  • 没有亲身经历,抱歉。在它下面,所有的 apache http 客户端 4.4.x 都被使用,然后是 JSSE。我希望那些 javax 选项能够工作。不那么雄心勃勃:让“hadoop fs -ls”命令先工作
  • @Yassir 你找到解决方案了吗?我们有类似的设置并面临类似的问题。

标签: apache-spark amazon-s3 minio


【解决方案1】:

很晚了,但我通过以下方式将 Hadoop S3/AWS 连接器导入到默认 Java 信任库,从而使用自签名证书:

keytool -import -trustcacerts -alias certalias \
-noprompt -file /path/to/cert.crt \
-keystore $JAVA_HOME/jre/lib/security/cacerts \
-storepass changeit

changeit 是默认的 Java cacerts 密码。

【讨论】:

  • 嘿@Hermann,当我们从主机提供 jar 时,使用这个 spark 作业可以访问数据。但是,如果我也尝试提供 in s3,它会给我错误代码 400,错误请求。知道如何解决吗?
【解决方案2】:

spark 使用使用 aws-sdk 的 hadoop 库, 所以你应该禁用证书检查。

com.amazonaws.sdk.disableCertChecking=true

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

javaOptions: "-Dcom.amazonaws.sdk.disableCertChecking=true"

仅供参考: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

【讨论】:

    【解决方案3】:
    javaOptions: "-Dcom.amazonaws.sdk.disableCertChecking=true"
    

    为我的蜂巢工作!

    【讨论】:

      猜你喜欢
      • 2019-09-13
      • 2011-09-04
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      • 2020-08-22
      • 2016-07-08
      • 1970-01-01
      相关资源
      最近更新 更多