kafka开启kerberos,报错server not found in kerberos database

本文详细介绍了Kafka使用SASL(Kerberos)进行安全认证的配置过程,包括server.properties和jaas.conf文件的设置,以及解决客户端连接错误的方法,如principal名称不匹配和Kerberos数据库未找到服务等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

kafka开启了SASL(kerberos), server.properties配置为

sasl.enabled.mechanisms: GSSAPI
security.inter.broker.protocol: SASL_PLAINTEXT
ssl.mode.enable: false
allow.everyone.if.no.acl.found: true
sasl.port: 19092

服务端的jaas.conf内容为

KafkaServer {
com.sun.security.auth.module.Krb5LoginModule required
debug=false
keyTab="/opt/kafka/keytabs/kafka.keytab"
useTicketCache=false
storeKey=true
principal="kafka/hadoop.test.com@TEST.COM"
useKeyTab=true;
};

KafkaClient {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab="/opt/kafka/keytabs/kafka.keytab"
principal="kafka/hadoop.test.com@TEST.COM"
storeKey=true
debug=false
useTicketCache=false;
};

Client {
com.sun.security.auth.module.Krb5LoginModule required
storeKey=true
principal="kafka/hadoop.test.com@TEST.COM"
useTicketCache=false
keyTab="/opt/kafka/keytabs/kafka.keytab"
debug=false
useKeyTab=true;
};

在客户端查询kafka集群中所有节点的API版本信息

kafka-broker-api-versions.sh --bootstrap-server  192.168.1.140:19092

报错

Request METADATA failed on brokers List

这是因为客户端没有开启SASL
编辑client.properties

sasl.mechanism=GSSAPI
security.protocol=SASL_PLAINTEXT 
sasl.kerberos.service.name=kafka
sasl.jaas.config=com.sun.security.auth.module.Krb5LoginModule required \
    useKeyTab=true \
    storeKey=true \
    keyTab="/opt/kafkaclient/keytabs/kafka.keytab" \
    principal="kafka/hadoop.test.com@TEST.COM" \
    renewTGT=true \
    useTicketCache=true;

运行命令

kafka-broker-api-versions.sh --bootstrap-server  192.168.1.140:19092 --command-config client.properties

报错

no vailid crdentials provided
server not found in kerberos database
identifier doesn't match expected value

查看kerberos的日志krb5kdc.log

LOOKING_UP_SERVER: kafka@TEST.COM for kafka/test.com@TEST.COM,Server not found in Kerberos database

发现是服务名不对,正确的服务名是: kafka/hadoop.test.com@TEST.COM

修改client.properties

sasl.mechanism=GSSAPI
security.protocol=SASL_PLAINTEXT 
sasl.kerberos.service.name=kafka
kerberos.domain.name=hadoop.test.com
sasl.jaas.config=com.sun.security.auth.module.Krb5LoginModule required \
    useKeyTab=true \
    storeKey=true \
    keyTab="/opt/kafkaclient/keytabs/kafka.keytab" \
    principal="kafka/hadoop.test.com@TEST.COM" \
    renewTGT=true \
    useTicketCache=true;

再次运行

kafka-broker-api-versions.sh --bootstrap-server 192.168.1.140:19092 --command-config client.properties

可获得正确的结果

principal的主机名

查看kerberos的日志krb5kdc.log,如果报错

LOOKING_UP_SERVER: kafka/hadoop.test.com@TEST.COM for kafka/w120pc05@TEST.COM

可知是反解析hosts里的ip得到hostname,从而构建service principal;
principal的格式为primary/hostname@REALM

因此,另一种解决方法是,修改/etc/hosts

192.168.1.140 hadoop.test.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值