apache-kafka - 我们如何在 KafkaConnector 资源中以抽象的方式使用 kafka 连接信任库密码?
问题描述
我们有一个由 3 个节点组成的连接集群。我们的连接集群信任库中需要几个证书。我们通过以下方式安装了这些证书。
...
spec:
tls:
trustedCertificates:
- certificate: ca.crt
secretName: my-cluster-cluster-ca-cert
- secretName: root-cer
certificate: RootCA.crt
- certificate: IntermediateCA.crt
secretName: inter-cer
- secretName: solace-broker-secret
certificate: secure-solace-broker.crt
...
如您所知,在三个连接集群启动后,证书已安装到以下信任库/tmp/kafka/cluster.truststore.p12
中。此外,我们可以在以下文件中找到随机信任库密码:/tmp/strimzi-connect.properties
.
我们将信任库路径和信任库密码定向到 KafkaConnector 资源文件中。
apiVersion: kafka.strimzi.io/v1alpha1
kind: KafkaConnector
metadata:
name: solace-source-connector
labels:
strimzi.io/cluster: my-connect-cluster
spec:
class: com.solace.connector.kafka.connect.source.SolaceSourceConnector
tasksMax: 1
config:
value.converter: org.apache.kafka.connect.converters.ByteArrayConverter
key.converter: org.apache.kafka.connect.storage.StringConverter
kafka.topic: solace-test
sol.host: tcps://msdkjskdjsdfrdfjdffdhxu3n.messaging.solace.cloud:55443
sol.username: my-solace-cloud-username
sol.password: password
sol.vpn_name: solaceservice
sol.topics: try-me
sol.message_processor_class: com.solace.connector.kafka.connect.source.msgprocessors.SolSampleSimpleMessageProcessor
sol.ssl_trust_store: /tmp/kafka/cluster.truststore.p12
sol.ssl_trust_store_password: HARDCODED_RANDOM_PASSWORD
现在我们正在进入其中一个连接集群 pod,从/tmp/strimzi-connect.properties
文件中获取密码,然后在sol.ssl_trust_store_password
字段中使用密码。
我的问题:
有什么方法可以参数化密码吗?使用密码的任何封装方式(这样我们就不需要进入 pod 来知道密码 - 期望是,kafkaconnector 资源将从/tmp/strimzi-connect.properties
文件中获取密码,它在哪个 pod 上运行)
解决方案
我从 Jakub Scholz 的 Slack 频道得到了答案。
您正在使用的 tls 配置和信任库应该用于 Connect 和 Kafka 之间的通信,而不是用于连接器。我认为您有两种选择如何为连接器提供信任库
- 您可以使用与现在相同的信任库,但使用 FileConfigProvider 加载密码 - 我认为应该在每个连接节点上加载正确的密码
- 您可以使用连接器的信任库创建自己的密钥,然后使用以下命令将其加载到连接中: https ://strimzi.io/docs/operators/latest/full/using.html#assembly-kafka-connect-external-configuration -deployment-configuration-kafka-connect
这就是我实现它的方式:
- 与我的证书一起创建自定义密钥库:
keytool -import -file RootCA.crt -alias root -keystore myTrustStore
- 使用信任库创建 Kubernetes 密钥:
kubectl create secret generic my-trust-store --from-file=myTrustStore
- 将秘密加载到连接资源文件中:
spec:
...
externalConfiguration:
volumes:
- name: my-trust-store
secret:
secretName: my-trust-store
- 连接集群 pod 启动后,证书将在 /opt/kafka/external-configuration/my-trust-store/ 可用
推荐阅读
- spring-kafka - Spring Cloud Stream 数据库事务不回滚
- xml-parsing - 使用 Nokogiri 选择 XML 子集
- python - 嘿,当我在 jupyter notebook 中运行此代码时出现此错误。任何想法为什么?超时错误:[WinError 10060]
- r - dplyr 查找具有特定值集的记录
- javascript - Laravel 显示更多/更少
- python - 如何在Python中比较两个列表
- git - 带有 shell 执行器的 GitLab CI 运行器无法克隆 Git 存储库(Docker 执行器工作)
- r - 在 R Shiny 中,如何为反应对象渲染绘图?
- java - JTable错误地排序整数列
- java - 如何在已包含菜单项的活动上方隐藏并显示的片段中添加菜单项