欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

访问开启KerberosKafka集群报Identifierdoesn‘tmatchexpectedvalue

时间:2023-05-03

问题描述:

使用Kafka客户端通过21007端口访问开启Kerberos的集群报以下错误:

javax.security.sasl.SaslException: An error: (java.security.PrivilegedActionException: javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Server not found in Kerberos database (7) - UNKNOWN_SERVER)]) occurred when evaluating SASL token received from the Kafka Broker、This may be caused by Java's being unable to resolve the Kafka Broker's hostname correctly、You may want to try to adding '-Dsun.net.spi.nameservice.provider.1=dns,sun' to your client's JVMFLAGS environment、Users must configure FQDN of kafka brokers when authenticating using SASL and `socketChannel.socket().getInetAddress().getHostName()` must match the hostname in `principal/hostname@realm` Kafka Client will go to AUTH_FAILED state.

at org.apache.kafka.common.security.authenticator.SaslClientAuthenticator.createSaslToken(SaslClientAuthenticator.java:293)

at org.apache.kafka.common.security.authenticator.SaslClientAuthenticator.sendSaslToken(SaslClientAuthenticator.java:210)

at org.apache.kafka.common.security.authenticator.SaslClientAuthenticator.authenticate(SaslClientAuthenticator.java:178)

at org.apache.kafka.common.network.KafkaChannel.prepare(KafkaChannel.java:64)

at org.apache.kafka.common.network.Selector.pollSelectionKeys(Selector.java:338)

at org.apache.kafka.common.network.Selector.poll(Selector.java:291)

at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:260)

at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:236)

at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:135)

at java.lang.Thread.run(Thread.java:745)

Caused by: javax.security.sasl.SaslException: GSS initiate failed

at com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(GssKrb5Client.java:211)

at org.apache.kafka.common.security.authenticator.SaslClientAuthenticator$2.run(SaslClientAuthenticator.java:275)

at org.apache.kafka.common.security.authenticator.SaslClientAuthenticator$2.run(SaslClientAuthenticator.java:273)

at java.security.AccessController.doPrivileged(Native Method)

at javax.security.auth.Subject.doAs(Subject.java:422)

at org.apache.kafka.common.security.authenticator.SaslClientAuthenticator.createSaslToken(SaslClientAuthenticator.java:273)

..、9 common frames omitted

Caused by: org.ietf.jgss.GSSException: No valid credentials provided (Mechanism level: Server not found in Kerberos database (7) - UNKNOWN_SERVER)

at sun.security.jgss.krb5.Krb5Context.initSecContext(Krb5Context.java:770)

at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:248)

at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:179)

at com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(GssKrb5Client.java:192)

..、14 common frames omitted

Caused by: sun.security.krb5.KrbException: Server not found in Kerberos database (7) - UNKNOWN_SERVER

at sun.security.krb5.KrbTgsRep.(KrbTgsRep.java:73)

at sun.security.krb5.KrbTgsReq.getReply(KrbTgsReq.java:259)

at sun.security.krb5.KrbTgsReq.sendAndGetCreds(KrbTgsReq.java:270)

at sun.security.krb5.internal.CredentialsUtil.serviceCreds(CredentialsUtil.java:302)

at sun.security.krb5.internal.CredentialsUtil.acquireServiceCreds(CredentialsUtil.java:120)

at sun.security.krb5.Credentials.acquireServiceCreds(Credentials.java:458)

at sun.security.jgss.krb5.Krb5Context.initSecContext(Krb5Context.java:693)

..、17 common frames omitted

Caused by: sun.security.krb5.Asn1Exception: Identifier doesn't match expected value (906)

at sun.security.krb5.internal.KDCRep.init(KDCRep.java:140)

at sun.security.krb5.internal.TGSRep.init(TGSRep.java:65)

at sun.security.krb5.internal.TGSRep.(TGSRep.java:60)

at sun.security.krb5.KrbTgsRep.(KrbTgsRep.java:55)

..、23 common frames omitted

刚开始遇到报访问timeout或者程序运行卡着看不到或者看到很少的报错信息,后来在项目里添加了日志相关依赖包,才看到比较完整的错误信息。

参考日志依赖:

        ch.qos.logback

        logback-core

        1.2.3

        ch.qos.logback

        lagback-classic

        1.2.3

          org.slf4j

          slf4j-api

          1.7.26

解决方法:

通过报错信息确认可能是服务名称不对,查看KDCServer日志发现:

账号名@xxxx.com for kafka/hadoop.hadoop.com@xxxx.com, Server not found in Kerveros database

对比访问正常的日志使用的服务名是:

kafka/hadoop.xxxx.com@xxxx.com

后在创建Kafka生产者时添加配置项:

kerberos.domain.name = hadoop.xxxx.com

问题解决

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。