【问题标题】:GCP Dataproc job not finding SSL pem certs stored in bucketsGCP Dataproc 作业未找到存储在存储桶中的 SSL pem 证书
【发布时间】:2022-01-11 06:32:17
【问题描述】:

我有一个 GCP Dataproc 集群,我正在尝试部署一个 pyspark 作业,该作业使用 SSL 生成主题。

pem 文件存储在桶 gs://dataproc_kafka_code/code 中,我正在访问下面显示的代码中的 pem 文件。 但是代码找不到pem文件,报错如下:

%3|1638738651.097|SSL|rdkafka#producer-1| [thrd:app]: error:02001002:system library:fopen:No such file or directory: fopen('gs://dataproc_kafka_code/code/caroot.pem','r')
%3|1638738651.097|SSL|rdkafka#producer-1| [thrd:app]: error:2006D080:BIO routines:BIO_new_file:no such file
Traceback (most recent call last):
  File "/tmp/my-job6/KafkaProducer.py", line 21, in <module>
    producer = Producer(conf)
cimpl.KafkaException: KafkaError{code=_INVALID_ARG,val=-186,str="Failed to create producer: ssl.ca.location failed: error:0B084002:x509 certificate routines:X509_load_cert_crl_file:system lib"}

代码:

from confluent_kafka import Producer

kafkaBrokers='<host>:<port>'
# CA Root certificate ca.crt
caRootLocation='gs://dataproc_kafka_code/code/caroot.pem'
# user public (user.crt)
certLocation='gs://dataproc_kafka_code/code/my-bridge-user-crt.pem'
# user.key
keyLocation='gs://dataproc_kafka_code/code/user-with-certs.pem'
password='<password>'

conf = {'bootstrap.servers': kafkaBrokers,
        'security.protocol': 'SSL',
        'ssl.ca.location':caRootLocation,
        'ssl.certificate.location': certLocation,
        'ssl.key.location':keyLocation,
        'ssl.key.password' : password
}
topic = 'my-topic'

producer = Producer(conf)

for n in range(100):
        producer.produce(topic, key=str(n), value=" val -> "+str(n*(-1)) + " on dec 5 from dataproc ")

producer.flush()

需要做什么来解决这个问题? 另外,这是提供对 SSL 证书的代码访问权限的正确方法吗?

蒂亚!

【问题讨论】:

    标签: ssl google-cloud-platform apache-kafka google-cloud-dataproc


    【解决方案1】:

    来自错误 fopen:No such file or directory: fopen('gs://dataproc_kafka_code/code/caroot.pem','r'),好像Producer 库正在尝试从本地文件系统下载文件。

    有几种方法可以尝试通过将这些密钥/证书下载到本地文件然后将 conf 指向它们来解决此问题:

    1. 使用存储客户端 API https://googleapis.dev/python/storage/latest/client.html 下载
    2. 或使用 gsutil(预装在 VM 中)下载文件https://cloud.google.com/storage/docs/gsutil/commands/cp

    【讨论】:

    • 感谢@Deependra Patel - 我能够使用 Google 存储客户端 API 使其工作
    猜你喜欢
    • 1970-01-01
    • 2021-07-02
    • 2020-01-17
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多