如何从Databricks Spark连接启用TLS的Document DB集群?
连接启用TLS的Document DB(Databricks环境)解决方案
1. 确保CA证书在集群所有节点部署到位
- 将
rds-combined-ca-bundle.pem上传到DBFS指定路径,比如dbfs:/databricks/ca-certs/rds-combined-ca-bundle.pem - 创建集群初始化脚本,将证书同步到每个节点的系统信任目录:
将脚本上传到DBFS后,在集群配置中指定为初始化脚本。#!/bin/bash # 针对RHEL/CentOS系节点 cp /dbfs/databricks/ca-certs/rds-combined-ca-bundle.pem /etc/pki/ca-trust/source/anchors/ update-ca-trust extract # 如果是Debian/Ubuntu系节点,替换为以下两行 # cp /dbfs/databricks/ca-certs/rds-combined-ca-bundle.pem /usr/local/share/ca-certificates/ # update-ca-certificates
2. 配置Spark全局SSL参数
在集群的Spark配置页面添加以下参数,确保Driver和Executor都使用正确的证书:
spark.driver.extraJavaOptions -Djavax.net.ssl.trustStore=/etc/pki/ca-trust/extracted/java/cacerts -Djavax.net.ssl.trustStorePassword=changeit spark.executor.extraJavaOptions -Djavax.net.ssl.trustStore=/etc/pki/ca-trust/extracted/java/cacerts -Djavax.net.ssl.trustStorePassword=changeit
如果直接使用PEM文件(部分驱动支持),可以替换为:
spark.driver.extraJavaOptions -Djavax.net.ssl.trustStoreType=PEM -Djavax.net.ssl.trustStore=/dbfs/databricks/ca-certs/rds-combined-ca-bundle.pem spark.executor.extraJavaOptions -Djavax.net.ssl.trustStoreType=PEM -Djavax.net.ssl.trustStore=/dbfs/databricks/ca-certs/rds-combined-ca-bundle.pem
3. 验证单节点SSL连接有效性
集群启动后,运行以下代码测试单个节点能否通过证书连接Document DB:
import ssl import socket # 替换为你的Document DB端点和端口 host = "your-documentdb-endpoint.example.com" port = 27017 # 对应你的Document DB TLS端口 context = ssl.create_default_context(cafile="/dbfs/databricks/ca-certs/rds-combined-ca-bundle.pem") with socket.create_connection((host, port)) as sock: with context.wrap_socket(sock, server_hostname=host) as ssock: print("SSL连接测试成功") print("服务器证书信息:", ssock.getpeercert())
如果测试通过,说明证书部署没问题,再调试Spark连接逻辑。
4. 调整Document DB连接配置
若使用Python驱动(如pymongo):
from pymongo import MongoClient client = MongoClient( "mongodb://<username>:<password>@<documentdb-endpoint>:<port>/", tls=True, tlsCAFile="/dbfs/databricks/ca-certs/rds-combined-ca-bundle.pem" ) # 验证连接 db = client.test_database print(db.list_collection_names())
若使用Spark MongoDB连接器:
df = spark.read.format("mongodb") \ .option("uri", "mongodb://<username>:<password>@<documentdb-endpoint>:<port>/<target-db>.<target-collection>") \ .option("ssl", "true") \ .option("sslCAFile", "/dbfs/databricks/ca-certs/rds-combined-ca-bundle.pem") \ .load() df.show()
5. 排查网络与安全规则
- 确认Databricks集群的安全组已开放Document DB的TLS端口访问权限
- 检查Document DB的防火墙规则,允许Databricks集群所在的IP范围或VPC访问
内容的提问来源于stack exchange,提问作者Rajesh Kumar Dash
相关产品推荐
相关产品推荐

