我正在尝试使用明文的 SASL 和 GSSAPI 运行单个 kafka 服务器,但出现以下错误。
[2018-10-03 16:08:54,220] 错误 [控制器 ID = 0, 目标代理 ID = 0] 由于以下原因,与节点 0 的连接身份验证失败: 错误: (java.security.PrivilegedActionException: javax.security.sasl.SaslException: GSS 启动失败 [由 GSSException:未提供有效凭据](在评估时发生 从 Kafka 经纪人收到的 SASL 代币。卡夫卡客户端将转到 AUTHENTICATION_FAILED状态。(org.apache.kafka.clients.NetworkClient(
在服务器中,属性更改包括:
listeners=SASL_PLAINTEXT://kafka.example.com:9095
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=GSSAPI
advertised.listeners=SASL_PLAINTEXT://kafka.example.com:9095
sasl.enabled.mechanism=GSSAPI
sasl.kerberos.service.name=HTTP
这是我的 jaas 配置:
KafkaServer {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
useTicketCache=true
storeKey=true
keyTab="/home/kafka/kafka_server.keytab"
principal="HTTP/kafka.example.com@UNIX.EXAMPLE.COM";
};
关于如何解决此问题的任何线索?
首先, 使用 KeyTab (useKeyTab=true( 或使用 TicketCache (useTicketCache=true(。不要同时使用两者。这可能会导致冲突。
如果您有自己的路边,请为 kafka 创建一个原则
sudo /usr/sbin/kadmin.local -q 'addprinc -randkey kafka/{hostname}@{REALM}'
sudo /usr/sbin/kadmin.local -q "ktadd -k /etc/security/keytabs/{keytabname}.keytab kafka/{hostname}@{REALM}"
用
sasl.kerberos.service.name="kafka"
设置 JVM 参数
export KAFKA_OPTS="-Djava.security.auth.login.config=/path/to/jaas.conf
-Djava.security.krb5.conf=/etc/krb5.conf -Dsun.security.krb5.debug=true"
希望这会有所帮助。