Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当mongo DB仅启用TLS/ssl时,如何从mongo spark连接器连接到mongodb?_Mongodb_Apache Spark - Fatal编程技术网

当mongo DB仅启用TLS/ssl时,如何从mongo spark连接器连接到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。为

当mongo DB仅启用TLS/ssl时,如何从mongo spark连接器连接到mongodb

如何在read config中传递uri和集合名称以与启用TLS/ssl的mongodb实例建立连接


提前谢谢

要建立从Spark到Mongo服务器的ssl连接,您需要信任Mongo证书或已签署该证书的CA(证书颁发机构)。这是最重要的部分,也是我最难理解的部分

Spark是一个Java应用程序,因此它从jks信任库获取证书。您需要将Mongo证书(仅公共部分)导入信任库,以使其可用于spark。为此:

  • 获取Mongo证书:请安装Mongo的DBA或系统管理员向您提供证书。另一种方法是使用openssl实现:

    $ 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
    文件中

  • 将其导入信任库 $keytool-import-file/path/to/your/mongodb.crt-alias mongodb-keystore/path/to/your/trustStore.jks 输入密钥库密码:123456 ... ... 信任这个证书吗?[否]:是的 证书已添加到密钥库
  • 确保可以从所有spark群集节点访问密钥库
  • 现在,您已经导入了服务器证书。如果您需要双方TLS,则需要提供有效的客户端证书。此证书和证书私钥应位于jks密钥库中(它可能位于存储Mongo服务器证书的同一信任库文件中,因为它使用相同的格式)。如果您不打算使用mutual TLS,您不需要这样做,但是您必须检查MongoDB实例是否能够接受没有客户端证书的连接。这是带有标志
    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文件来生成密钥库,该文件将包含一个证书,然后它就可以工作了