本機爲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