You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Debezium Mongo Kafka Connector使用指定证书(K8s环境)

解决方案

你有两种可行的方式解决这个问题,核心思路是将MongoDB的SSL证书仅提供给Debezium连接器使用,同时保持Kafka Connect与Kafka集群的明文连接:

方法一:为Debezium MongoDB连接器单独配置PEM证书(无需转换格式)

MongoDB Java驱动支持直接使用PEM格式的CA证书,通过挂载证书并在连接器配置中指定路径即可实现:

  1. 将MongoDB的PEM证书创建为Kubernetes Secret
kubectl create secret generic mongo-cert --from-file=rds-combined-ca-bundle.pem
  1. 修改Kafka Connect配置,挂载证书到容器
    更新kafka-connect.yaml,添加证书挂载配置,同时保持与Kafka的明文连接(使用9092端口):
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaConnect
metadata:
  name: my-connect-cluster
  annotations:
    strimzi.io/use-connector-resources: "true"
spec:
  version: 3.2.0
  replicas: 1
  bootstrapServers: my-cluster-kafka-bootstrap:9092 # 保持明文连接端口
  image: strimzi-debezium-connector
  config:
    config.storage.replication.factor: -1
    offset.storage.replication.factor: -1
    status.storage.replication.factor: -1
  volumes:
    - name: mongo-cert
      secret:
        secretName: mongo-cert
  volumeMounts:
    - name: mongo-cert
      mountPath: /opt/kafka/mongo-cert
      readOnly: true
  1. 更新Debezium MongoDB连接器配置,指定证书路径
    修改mongo-connector.yaml的spec.config部分,添加SSL证书相关参数:
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaConnector
metadata:
  name: debezium-mongo-connector
  labels:
    strimzi.io/cluster: my-connect-cluster 
spec:
  class: io.debezium.connector.mongodb.MongoDbConnector
  tasksMax: 1
  config:
    mongodb.hosts: test
    mongodb.name: test
    mongodb.user: username
    mongodb.password: password
    mongodb.ssl.enabled: true
    mongodb.ssl.invalid.hostname.allowed: true
    # 添加以下SSL证书配置
    mongodb.ssl.trustStore.location: /opt/kafka/mongo-cert/rds-combined-ca-bundle.pem
    mongodb.ssl.trustStore.type: PEM
    database.include.list: db-dev
    database.history.kafka.bootstrap.servers: my-cluster-kafka-bootstrap:9092
    collection.include.list: products

方法二:使用JKS格式的信任库(兼容旧版Java环境)

如果你的环境不支持直接使用PEM证书,可以将PEM转换为JKS格式的信任库:

  1. 将PEM证书转换为JKS信任库
keytool -importcert -file rds-combined-ca-bundle.pem -alias mongo-ca -keystore mongo-truststore.jks -storepass your-truststore-password
  1. 创建包含JKS文件的Kubernetes Secret
kubectl create secret generic mongo-truststore --from-file=mongo-truststore.jks
  1. 修改Kafka Connect配置,挂载信任库
    类似方法一,更新kafka-connect.yaml添加挂载:
spec:
  volumes:
    - name: mongo-truststore
      secret:
        secretName: mongo-truststore
  volumeMounts:
    - name: mongo-truststore
      mountPath: /opt/kafka/mongo-truststore
      readOnly: true
  1. 更新连接器配置,指定JKS信任库参数
spec:
  config:
    # ... 原有配置 ...
    mongodb.ssl.trustStore.location: /opt/kafka/mongo-truststore/mongo-truststore.jks
    mongodb.ssl.trustStore.password: your-truststore-password

为什么你的第二次尝试失败?

你配置的trustedCertificates是Strimzi用来指定Kafka Connect连接Kafka集群时使用的信任证书,而非给Debezium连接器用的。当你将MongoDB的CA证书放到这里,并切换到Kafka的SSL端口(9093),Kafka Connect会尝试用Mongo的CA去验证Kafka broker的证书,自然会出现bad_certificate错误。


内容的提问来源于stack exchange,提问作者Mike H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 17:15:41