Kafka配置SASL_SSL及SCRAM后启动报ZooKeeper NoAuth错误求助
Kafka启动报错ZooKeeper NoAuth问题排查方案
报错org.apache.zookeeper.KeeperException$NoAuthException: KeeperErrorCode = NoAuth for /config/users/broker-admin的核心原因是Kafka Broker连接已开启TLS认证和访问控制的ZooKeeper时,没有获取到对应节点的访问权限,可按以下步骤逐一排查:
1. 验证TLS层连通性
你的ZooKeeper配置中ssl.clientAuth=need要求所有客户端必须提供被信任的TLS证书,首先确认证书信任链正常:
- 确认Kafka Broker使用的keystore证书的根CA,已正确导入ZooKeeper的truststore(
/var/www/kafka/ssl/kafka.zookeeper.truststore.jks)中 - 确认ZooKeeper的证书根CA,已正确导入Kafka Broker的truststore(
/var/www/kafka/ssl/kafka.broker-0.truststore.jks)中 - 确认所有jks文件的路径、配置的密码和实际一致,且Kafka运行用户有文件读取权限
- 可使用openssl工具验证握手是否正常:
openssl s_client -connect localhost:2182 \ -cert <(keytool -exportcert -alias <broker证书别名> -keystore /var/www/kafka/ssl/kafka.broker-0.keystore.jks -storepass zookeepbookbrk0 -rfc) \ -key <(openssl pkcs8 -in <(keytool -importkeystore -srckeystore /var/www/kafka/ssl/kafka.broker-0.keystore.jks -srcstorepass zookeepbookbrk0 -destkeystore temp.p12 -deststorepass temp123 -deststoretype PKCS12) -nocrypt -passin pass:temp123) \ -CAfile <(keytool -exportcert -alias <ZK根CA别名> -keystore /var/www/kafka/ssl/kafka.zookeeper.truststore.jks -storepass zookeepbook -rfc)
如果握手失败,先解决证书信任问题后再尝试启动Broker。
2. 排查ZooKeeper ACL权限问题
你的配置中开启了zookeeper.set.acl=true,且创建SCRAM用户时使用的ZK客户端和Broker使用的客户端身份可能不一致,导致节点访问被拒绝:
- 临时将
server.properties中的zookeeper.set.acl改为false,重启Broker测试是否能正常启动,如果启动成功则确认是ACL权限问题 - 若需要保留ZK ACL控制,使用ZK客户端查看目标节点的权限:
# 使用对应ZK TLS配置启动zkCli.sh连接集群 getAcl /config/users/broker-admin
你的ZK使用X509认证,用户身份格式为x509:<Broker证书的DN全称>,给Broker身份授予所有需要的ZK路径权限即可:
# 给Broker身份授予配置路径所有权限,根据实际替换<Broker证书DN> setAcl /config/users x509:CN=broker-0,OU=xxx,O=xxx,C=CN:cdrwa # 同理给/brokers、/cluster、/controller等Kafka所需的ZK根路径授予对应权限
3. 确认SCRAM用户创建上下文
如果创建SCRAM用户时使用的zookeeper-client.properties中的证书和Broker使用的证书不一致,创建的节点默认ACL仅允许创建者访问,可删除原有用户节点后用Broker对应的证书身份重新创建SCRAM用户,再启动Broker。
内容的提问来源于stack exchange,提问作者Rajendra Banker
相关产品推荐
相关产品推荐

