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

Strimzi Kafka配置SCRAM认证及无证书TLS连接问题

Strimzi Kafka:实现SCRAM认证+单向TLS加密(无需客户端证书)

问题背景

已成功部署带SCRAM-SHA-512认证的Strimzi Kafka集群,并通过User Operator创建了用户,但客户端连接时被要求提供SSL证书。需要实现:

  • 数据通过TLS加密传输
  • Broker用SCRAM用户名密码认证客户端
  • 无需客户端提供证书,也无需客户端部署证书(仅需验证Broker证书,测试环境可跳过验证)

解决方案:修改Listener的TLS配置

默认情况下,Strimzi的TLS listener启用双向认证(mutual TLS),要求客户端提供证书。只需修改Kafka集群的listener配置,关闭客户端证书验证,保留SCRAM认证和TLS加密即可。

1. 更新Kafka集群YAML

修改tls类型的listener,添加clientAuthentication: none字段,完整关键配置如下:

apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  kafka:
    version: 3.2.1
    replicas: 1
    listeners:
      - name: plain
        port: 9092
        type: internal
        tls: false
      - name: tls
        port: 9093
        type: internal
        tls: true
        clientAuthentication: none  # 关闭客户端证书验证
        authentication:
          type: scram-sha-512
    # ... 其余资源、存储、metrics等配置保持不变
  entityOperator:
    topicOperator: {}
    userOperator: {}  # 必须启用User Operator管理SCRAM用户
  # ... zookeeper、kafkaExporter配置保持不变

2. 客户端连接配置

客户端需使用SASL_SSL协议,指定SCRAM机制和用户名密码,同时可选验证Broker的CA证书(生产环境推荐):

Java客户端示例(properties文件)

bootstrap.servers=my-cluster-kafka-bootstrap:9093
security.protocol=SASL_SSL
sasl.mechanism=SCRAM-SHA-512
# 替换为你的用户名和从Secret中获取的密码
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="my-user" password="XXXXX";

# 生产环境:验证Broker证书,需要Strimzi生成的CA证书
ssl.truststore.type=PEM
ssl.truststore.certificates=-----BEGIN CERTIFICATE-----
# 粘贴my-cluster-cluster-ca-cert Secret中的ca.crt内容
-----END CERTIFICATE-----

# 测试环境:可跳过Broker证书验证(不建议生产)
# ssl.endpoint.identification.algorithm=
# ssl.truststore.type=PEM
# ssl.truststore.certificates=

获取Broker CA证书

Strimzi会自动创建my-cluster-cluster-ca-cert Secret,执行以下命令获取CA证书:

kubectl get secret my-cluster-cluster-ca-cert -o jsonpath='{.data.ca\.crt}' | base64 -d

初始配置错误说明

你最初在listener的authentication字段中添加usernameSecretRef、passwordSecretRef等字段是错误的:

  • Strimzi中,Broker listener的authentication仅需指定认证类型(如scram-sha-512),具体用户由KafkaUser资源创建,User Operator会将用户信息同步到ZooKeeper,Broker自动读取完成认证。
  • 无需在Broker配置中硬编码或引用单个用户凭证,User Operator负责用户生命周期管理。

内容的提问来源于stack exchange,提问作者Faheem Sultan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 07:34:57