具有 Kerberos 身份验证的 PCF Kafka - 在本地运行但在 PCF 中失败

使用 Kerberos 身份验证通过 SpringBoot 连接到 Kafka 时遇到问题。我正在使用具有以下详细信息的自定义 Kafka 连接管理器 -


          bootstrap-servers-sasl: node1:9094, node2:9094, node3:9094

          protocol: SASL_SSL

          mechanism: GSSAPI

          kerberos:

            service:

              name: kfkusr

          jaas: 

            config: "com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true keyTab=\"#keytab-name#\" principal=\"abc/node2@domain.NET\";"

where#keytab-name#将在运行时被以下值替换为 -


我的本地电脑 -C:/Users/MyPC/AppData/Local/Temp/abc.node2_d2254866264751402128.keytab


PCF-/home/vcap/tmp/abc.node2_d2215947326380395062.keytab


在本地应用程序运行良好,消息将发送到 Kafka。但是当在 PCF 上运行时失败并出现以下异常 -


2019-08-09T14:40:46.481-05:00 [APP/PROC/WEB/0] [OUT] WARN [9f-3868cbe47d81] org.apache.kafka.clients.NetworkClient o.a.k.c.NetworkClient.processDisconnection(NetworkClient.java:585) - ||||||||||||||Connection to node -1 terminated during authentication. This may indicate that authentication failed due to invalid credentials.

...

...

Failed to send; nested exception is org.apache.kafka.common.errors.TimeoutException: Failed to update metadata after 60000 ms.: org.springframework.kafka.core.KafkaProducerException: Failed to send; nested exception is org.apache.kafka.common.errors.TimeoutException: Failed to update metadata after 60000 ms

...

...

Exception thrown when sending a message with key='null' and payload='<my payload>' to topic <test_topic> :: org.apache.kafka.common.errors.TimeoutException: Failed to update metadata after 60000 ms.


慕码人8056858
浏览 219回答 1
1回答

绝地无双

好的..我去解决这个问题..可能对其他被困在这个问题上的人有帮助。首先,我在 Producer Config 属性中设置了 krb5.conf 文件。该文件包含主机、领域的详细信息以及使用 kerberos 发现服务所需的其他详细信息System.setProperty("java.security.krb5.conf",&nbsp; <path to conf file>);而不是直接在属性中设置 jaas 配置,我创建了 jaas conf 文件并在系统属性中设置它 -在代码是这样的之前 -props.put("sasl.jaas.config", jaasConfig);更改后 -System.setProperty("java.security.auth.login.config", jaasFile.getPath());示例 Jaas 配置文件jaas_client.conf结构 -KafkaClient {com.sun.security.auth.module.Krb5LoginModule requireduseKeyTab=truestoreKey=truekeyTab="#keytab-name#"&nbsp;principal="#principal#";};文件中的 PS ,我在更新到 keytab 文件的实际路径和具有实际值的值jaas_client.conf之后重写文件,然后设置为#keytab-name##principal#SystemProperties当使用以下属性启用调试时,可以设置调试模式以查看 JaaS 身份验证和票务日志 -System.setProperty("sun.security.krb5.debug", ""+<true/false>);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java