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

切换为SCRAM后KRaft Kafka集群Broker认证失败求助

问题描述

原有基于KRaft的Kafka集群,Broker间及控制器通信均采用SASL_PLAIN认证,配置如下:

echo security.inter.broker.protocol=SASL_SSL >> $KAFKA_HOME/milvus/server.properties
echo sasl.enabled.mechanisms="PLAIN" >> $KAFKA_HOME/milvus/server.properties
echo sasl.mechanism.inter.broker.protocol="PLAIN" >> $KAFKA_HOME/milvus/server.properties
echo sasl.mechanism.controller.protocol="PLAIN" >> $KAFKA_HOME/milvus/server.properties

尝试将Broker间协议改为SCRAM-SHA-512,控制器保留PLAIN,修改后的配置:

echo security.inter.broker.protocol=SASL_SSL >> $KAFKA_HOME/milvus/server.properties
echo sasl.enabled.mechanisms="PLAIN,SCRAM-SHA-512" >> $KAFKA_HOME/milvus/server.properties
echo sasl.mechanism.inter.broker.protocol="SCRAM-SHA-512" >> $KAFKA_HOME/milvus/server.properties
echo sasl.mechanism.controller.protocol="PLAIN" >> $KAFKA_HOME/milvus/server.properties

执行存储格式化时添加SCRAM凭证:

$KAFKA_HOME/bin/kafka-storage.sh format \
    -t $KAFKA_CLUSTER_ID \
    --add-scram 'SCRAM-SHA-512=[name=USERNAME,password=PASSWORD]' \
    -c $KAFKA_HOME/path/server.properties || true

修改每个Broker的JAAS文件KafkaServer部分为SCRAM:

cat <<-EOF > $KAFKA_HOME/path/kafkaJaas.conf
      KafkaServer {
        org.apache.kafka.common.security.scram.ScramLoginModule required
        username="user"
        password="user"
        user_admin="admin-secret"
        user_user="user";
      };
EOF

Broker/控制器监听器已设置为:

listeners=SASL_SSL

但Kafka Pod运行日志出现认证失败警告:

WARN [RaftManager id=0] Connection to node 2 (xx.svc.cluster.local/10.254.16.101:19092) terminated during authentication. This may happen due to any of the following reasons: (1) Authentication failed due to invalid credentials with brokers older than 1.0.0, (2) Firewall blocking Kafka TLS traffic (eg it may only allow HTTPS traffic), (3) Transient network issue.

已参考Confluent相关文档配置,询问是否遗漏或需要修改的步骤。

排查与修复步骤

1. 修正SCRAM凭证一致性

执行kafka-storage.sh时指定的name=USERNAME,password=PASSWORD需与JAAS文件中的username、password完全匹配。当前命令使用占位符USERNAME/PASSWORD,但JAAS配置的是user/user,凭证不匹配会直接触发认证失败。同时要确保所有Broker执行格式化时添加的SCRAM凭证完全一致,集群ID$KAFKA_CLUSTER_ID正确无误。

2. 分离Broker与控制器的JAAS配置

由于控制器通信仍采用PLAIN协议,而Broker间用SCRAM,必须为控制器单独配置JAAS文件,不能与Broker共用:

  • 控制器JAAS文件示例(使用PlainLoginModule):
    cat <<-EOF > $KAFKA_HOME/path/controllerJaas.conf
    KafkaServer {
      org.apache.kafka.common.security.plain.PlainLoginModule required
      username="controller-user"
      password="controller-secret"
      user_controller-user="controller-secret";
    };
    EOF
    
  • 启动控制器时通过JVM参数指定该文件:-Djava.security.auth.login.config=/path/to/controllerJaas.conf
  • Broker的JAAS文件保持SCRAM配置,但需确保user_xxx段的密码与格式化时添加的SCRAM凭证一致。

3. 完善监听器与协议映射配置

确保listener.security.protocol.map配置明确,避免协议混淆:

echo listener.security.protocol.map=SASL_SSL:SASL_SSL >> $KAFKA_HOME/milvus/server.properties

若Broker与控制器使用不同端口(如控制器用9093、Broker用19092),需分别配置监听器及对应协议,例如:

listeners=SASL_SSL://:19092,CONTROLLER://:9093
listener.security.protocol.map=SASL_SSL:SASL_SSL,CONTROLLER:SASL_SSL

4. 补全SSL相关配置

日志提示TLS流量可能存在问题,需确保SSL配置完整:

echo ssl.keystore.location=/path/to/kafka.keystore.jks >> $KAFKA_HOME/milvus/server.properties
echo ssl.keystore.password=keystore-secret >> $KAFKA_HOME/milvus/server.properties
echo ssl.truststore.location=/path/to/kafka.truststore.jks >> $KAFKA_HOME/milvus/server.properties
echo ssl.truststore.password=truststore-secret >> $KAFKA_HOME/milvus/server.properties
echo ssl.endpoint.identification.algorithm=HTTPS >> $KAFKA_HOME/milvus/server.properties

同时验证所有Broker/控制器的SSL证书有效且彼此信任。

5. 确保集群配置修改生效

去掉kafka-storage.sh format后的|| true,避免掩盖格式化失败的错误。若集群已初始化,修改SCRAM凭证应使用kafka-configs.sh而非重新格式化:

$KAFKA_HOME/bin/kafka-configs.sh --bootstrap-server <broker-address> --alter --add-config 'SCRAM-SHA-512=[name=user,password=user]' --entity-type brokers --entity-name <broker-id>

6. 验证JVM参数传递

确认Broker和控制器启动时正确加载对应JAAS文件,例如Broker启动参数需包含:

-Djava.security.auth.login.config=$KAFKA_HOME/path/kafkaJaas.conf

容器部署场景下,需检查环境变量或启动脚本是否正确传递该参数。

内容的提问来源于stack exchange,提问作者abdullah ahmed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 06:37:26