为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕码人8056858 2023-05-24 17:33:52
使用 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.keytabPCF-/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.
查看完整描述

1 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

好的..我去解决这个问题..可能对其他被困在这个问题上的人有帮助。


首先,我在 Producer Config 属性中设置了 krb5.conf 文件。该文件包含主机、领域的详细信息以及使用 kerberos 发现服务所需的其他详细信息


System.setProperty("java.security.krb5.conf",  <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 required

useKeyTab=true

storeKey=true

keyTab="#keytab-name#" 

principal="#principal#";

};

文件中的 PS ,我在更新到 keytab 文件的实际路径和具有实际值的值jaas_client.conf之后重写文件,然后设置为#keytab-name##principal#SystemProperties


当使用以下属性启用调试时,可以设置调试模式以查看 JaaS 身份验证和票务日志 -


System.setProperty("sun.security.krb5.debug", ""+<true/false>);


查看完整回答
反对 回复 2023-05-24
  • 1 回答
  • 0 关注
  • 218 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信