首页 > 解决方案 > 我们如何在 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 上运行)

标签: apache-kafkaapache-kafka-connectsolacestrimzi

解决方案


我从 Jakub Scholz 的 Slack 频道得到了答案。

您正在使用的 tls 配置和信任库应该用于 Connect 和 Kafka 之间的通信,而不是用于连接器。我认为您有两种选择如何为连接器提供信任库

  1. 您可以使用与现在相同的信任库,但使用 FileConfigProvider 加载密码 - 我认为应该在每个连接节点上加载正确的密码
  2. 您可以使用连接器的信任库创建自己的密钥,然后使用以下命令将其加载到连接中: https ://strimzi.io/docs/operators/latest/full/using.html#assembly-kafka-connect-external-configuration -deployment-configuration-kafka-connect

这就是我实现它的方式:

  1. 与我的证书一起创建自定义密钥库:
keytool -import -file RootCA.crt -alias root -keystore myTrustStore
  1. 使用信任库创建 Kubernetes 密钥:
kubectl create secret generic my-trust-store --from-file=myTrustStore
  1. 将秘密加载到连接资源文件中:
spec:
  ...
  externalConfiguration:
    volumes:
      - name: my-trust-store
        secret:
          secretName: my-trust-store
  1. 连接集群 pod 启动后,证书将在 /opt/kafka/external-configuration/my-trust-store/ 可用

推荐阅读