kafka集成了kerberos之后,直接运行kafka-console-producer和kafka-console-consumer命令连接到kafka会失败,报错信息为:networkclient disconnected,需通过kerberos验证才能访问。
kafka使用JAAS Plain SASL 作为安全认证配置,添加以下配置:
1、准备jaas.conf并添加到环境变量
vim jaas.conf
KafkaClient {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab="/etc/security/keytab/kafka.keytab"
principal="kafka@XXX.COM";
};
# 路径替换为实际环境路径
export KAFKA_OPTS="-Djava.security.auth.login.config=/root/jaas.conf"
如果不配置keytab,手动执行kinit验证,那jaas.conf可配置读取ticket缓存:
vim jaas.conf
KafkaClient {
com.sun.security.auth.module.Krb5LoginModule required
useTicketCache=true
renewTicket=true
serviceName="kafka";
};
2、在运行生产者命令的终端添加生产者的配置文件
vim producer.properties
security.protocol=SASL_PLAINTEXT
sasl.mechanism=GSSAPI
sasl.kerberos.service.name=kafka
3、在运行消费者命令的终端添加消费者的配置文件
vim consumer.properties
security.protocol=SASL_PLAINTEXT
sasl.mechanism=GSSAPI
sasl.kerberos.service.name=kafka
# group id 可以自定义
group.id=test-consumer-group
4、分别运行生产者和消费者客户端
# broker地址和topic名称替换为实际环境的
kafka-console-producer --broker-list xxx:9092 --topic test --producer.config producer.properties
kafka-console-consumer --bootstrap-server xxx:9092 --topic test --from-beginning --consumer.config consumer.properties