本机为kafka server服务器java
在本地安装kerberos客户端服务器
建立本机princ: addprinc test/192.168.1.170@YLH.COMui
根据本机的ip生成keytab: xst -k ylh.keytab test/192.168.1.170.net
修改kafka/config/server.propertiesdebug
listeners=PLAINTEXT://192.168.1.170:9092, SASL_PLAINTEXT://192.168.1.170:9093日志
advertised.listeners=PLAINTEXT://192.168.1.170:9092, SASL_PLAINTEXT://192.168.1.170:9093server
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer . //acl相关,配置后才能启用aclblog
security.inter.broker.protocol= SASL_PLAINTEXTip
sasl.mechanism.inter.broker.protocol=GSSAPIci
sasl.enabled.mechanisms=GSSAPI
sasl.kerberos.service.name=test //这里的service.name要跟上面创建的principal相对应,kafka/kafkahost3@EXAMPLE.COM的principal服务名就是kafka
super.users=User:test //这里的User要跟上面创建的principal相对应,acl相关,broker服务自己是采用kafka这个服务身份进行交互,只有配置成superuser才能获取集群内的metadata信息
创建kafka/config/kafka_server_jaas.conf文件, 如下三个是可选的
KafkaServer{
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
storeKey=true
keyTab="/home/yao/ylh170.keytab"
principal="test/192.168.1.170@YLH.COM";
};
//为了bin目录下kafka-console-consumer.sh之类的的脚本使用的
KafkaClient{
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
storeKey=true
keyTab="/home/yao/ylh170.keytab"
principal="test/192.168.1.170@YLH.COM";
};
//集群使用的zookeeper并无启用kerberos,因此没有client模块
Client {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
storeKey=true
keyTab="/home/yao/ylh170.keytab"
principal="test/192.168.1.170@YLH.COM";
};
修改kafka/bin/kafka-server-start.sh, 修改exec $base_dir/kafka-run-class.sh $EXTRA_ARGS 行,-Dsun.security.krb5.debug=true为可选,开启kerberos日志
exec $base_dir/kafka-run-class.sh $EXTRA_ARGS -Dsun.security.krb5.debug=true -Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.auth.login.config=/home/yao/software/kafka_kerberos/config/kafka_server_jaas.conf kafka.Kafka "$@"
安装kerberos: https://my.oschina.net/u/185335/blog/2963061
kafka sever配置kerberos: https://my.oschina.net/u/185335/blog/2963062
kafka client使用kerberos: https://my.oschina.net/u/185335/blog/2963063