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

求助:Strimzi KafkaConnector无法从Secrets读取数据库凭证

问题

在Docker Desktop环境中,按照Debezium官方文档部署Debezium集群,仅替换了自定义Kafka Connect镜像的输出仓库和插件URL,其余步骤完全遵循文档。创建KafkaConnector后,连接器始终未运行。

执行以下命令排查:

kubectl describe kafkaconnector debezium-connector-mysql -n debezium-example
kubectl describe kafkaconnect debezium-connect-cluster -n debezium-example

Kafka Connector输出关键信息

Spec:
  Class:  io.debezium.connector.mysql.MySqlConnector
  Config:
    database.hostname:                                mysql
    database.include.list:                            inventory
    database.password:                                <nil>
    database.port:                                    3306
    database.server.id:                               184054
    database.user:                                    <nil>
    # 其余配置省略
Events:                                               <none>

Kafka Connect输出关键错误

Status:
  Conditions:
    Last Transition Time:  2023-03-24T07:42:01.787955422Z
    Message:               database.password: A null value is not allowed for this key
    Reason:                InvalidConfigParameterException
    Status:                True
    Type:                  NotReady

可以看到连接器无法从debezium-secret中读取数据库用户名和密码,无法定位问题。


解决方法

1. 验证Secret的正确性

确认debezium-secret已在debezium-example命名空间中创建,且包含database.user和database.password两个键:

kubectl get secret debezium-secret -n debezium-example -o yaml

输出中应包含类似以下的data字段:

data:
  database.user: <base64编码的用户名>
  database.password: <base64编码的密码>

2. 修正KafkaConnector的配置引用

KafkaConnector需要使用Strimzi的配置提供者语法来引用Secret中的值,而不是直接留空。修改连接器配置文件中的对应字段:

spec:
  config:
    database.user: "${secrets:debezium-secret:database.user}"
    database.password: "${secrets:debezium-secret:database.password}"
    # 其余配置保持不变

3. 确认KafkaConnect的权限配置

Strimzi的KubernetesSecretConfigProvider需要KafkaConnect的ServiceAccount具备读取debezium-secret的权限。检查是否存在对应的Role和RoleBinding:

  • 查看ServiceAccount:
kubectl get serviceaccount -n debezium-example | grep debezium-connect-cluster
  • 确认Role是否允许读取secrets资源:
kubectl get role -n debezium-example
kubectl describe role <role-name> -n debezium-example
  • 确认RoleBinding已关联ServiceAccount和Role:
kubectl get rolebinding -n debezium-example
kubectl describe rolebinding <rolebinding-name> -n debezium-example

如果缺失权限,需要创建对应的Role和RoleBinding:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: debezium-connect-secret-reader
  namespace: debezium-example
rules:
- apiGroups: [""]
  resources: ["secrets"]
  resourceNames: ["debezium-secret"]
  verbs: ["get", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: debezium-connect-secret-reader-binding
  namespace: debezium-example
subjects:
- kind: ServiceAccount
  name: debezium-connect-cluster-connect
  namespace: debezium-example
roleRef:
  kind: Role
  name: debezium-connect-secret-reader
  apiGroup: rbac.authorization.k8s.io

4. 重新应用配置并验证

修正配置后,重新部署KafkaConnector:

kubectl apply -f <your-connector-config.yaml> -n debezium-example

等待片刻后,查看KafkaConnect的状态:

kubectl describe kafkaconnect debezium-connect-cluster -n debezium-example

确认NotReady状态消失,再检查KafkaConnector的运行状态:

kubectl get kafkaconnector debezium-connector-mysql -n debezium-example -o wide

内容的提问来源于stack exchange,提问作者Tom Liang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 13:22:06