当mongo DB仅启用TLS/ssl时,如何从mongo spark连接器连接到mongodb?
当mongo DB仅启用TLS/ssl时,如何从mongo spark连接器连接到mongodb 如何在read config中传递uri和集合名称以与启用TLS/ssl的mongodb实例建立连接当mongo DB仅启用TLS/ssl时,如何从mongo spark连接器连接到mongodb?,mongodb,apache-spark,Mongodb,Apache Spark,当mongo DB仅启用TLS/ssl时,如何从mongo spark连接器连接到mongodb 如何在read config中传递uri和集合名称以与启用TLS/ssl的mongodb实例建立连接 提前谢谢 要建立从Spark到Mongo服务器的ssl连接,您需要信任Mongo证书或已签署该证书的CA(证书颁发机构)。这是最重要的部分,也是我最难理解的部分 Spark是一个Java应用程序,因此它从jks信任库获取证书。您需要将Mongo证书(仅公共部分)导入信任库,以使其可用于spark。为
提前谢谢 要建立从Spark到Mongo服务器的ssl连接,您需要信任Mongo证书或已签署该证书的CA(证书颁发机构)。这是最重要的部分,也是我最难理解的部分 Spark是一个Java应用程序,因此它从jks信任库获取证书。您需要将Mongo证书(仅公共部分)导入信任库,以使其可用于spark。为此:
$ openssl s_client -connect mongodb:27017
CONNECTED(00000003)
depth=0 C = ES, ST = Madrid, L = Madrid, O = HOME, OU = HOME, CN=mongodb mongo.hostname.local
verify error:num=19:self signed certificate in certificate chain
verify return:0
---
Certificate chain
0 s:/C=ES/ST=Madrid/L=Madrid/O=COMPANY/OU=AREA/CN=mongo.hostname.local
i:/C=ES/ST=Madrid/L=Madrid/O=COMPANY/OU=AREA/CN=mongo.hostname.localIssuing CA
---
Server certificate
-----BEGIN CERTIFICATE-----
[..... A bunch of base64 text....]
-----END CERTIFICATE-----
从--BEGIN CERTIFICATE----------
到--BEGIN CERTIFICATE----------
获取部件,并将其保存在.cert
文件中sslAllowConnectionsWithoutCertificates
下一步是在连接URI中指定要使用TLS。这相当简单,只需将?ssl=true
添加到连接字符串中即可。所以连接URI将是这样的
mongodb://user:pw@host:port/db.collection?ssl=true
现在你可以完成你的工作了。在汇总作业时,我们还需要指定信任库的位置以及mongo连接器的库:
/spark/bin/spark-submit \
--master spark://spark-master:7077 \
--packages org.mongodb.spark:mongo-spark-connector_2.11:2.2.0 \
--conf spark.executor.extraJavaOptions="-Djavax.net.ssl.trustStore=/path/to/your/trustStore.jks -Djavax.net.ssl.trustStorePassword=yourPassword" \
--conf spark.driver.extraJavaOptions="-Djavax.net.ssl.trustStore=/path/to/your/trustStore.jks -Djavax.net.ssl.trustStorePassword=yourPassword" \
/yourJob.jar
我们使用驱动程序和执行程序的extraJavaOptions来传递这些参数。如果您使用的是相互TLS,请包括以下额外的java选项:
-Djavax.net.ssl.keyStore=/path/to/your/keyStore.jks
-Djavax.net.ssl.keyStorePassword=yourPassword
/path/to/your/keyStore.jks
是存储客户端证书的地方
如果尚未安装火花连接器库,您可能会遇到故障。spark进程将转到maven下载库,但是它将无法验证maven证书,因为我们已经用我们的证书指定了另一个密钥库。一种解决方法是将证书直接导入位于$JAVA\u HOME/jre/lib/security/cacerts
的默认密钥库。默认密码是changeit
。记住在每个工作节点中也要这样做
我希望有帮助
资料来源:
使用rds-combined-ca-bundle.pem的用户将生成密钥库并与pyspark连接。这行不通。您需要使用rds YYYY ca***.pem文件来生成密钥库,该文件将包含一个证书,然后它就可以工作了