背景:日常测试环境记得有在集群中除了启动节点存在keytab文件,清理过其他节点的keytab文件,测试flink程序24小时正常运行和7天过期后kerberos自动更新。测试环境一直以为自己这样做了,但是到了生产验证环境发现还是出了问题,报找不到keytab文件。后来发现我的代码中出现了kerberos二次认证,消费kafka认证,连接kudu再次认证。就是在连接kudu的时候二次认证出现了问题。
问题出现原因:连接kudu进行二次认证的时候,需要在taskmanager节点找见指定位置的keytab文件,但是keytab文件除了启动节点外其他节点是没有的,所以必定找不到,所以报无法获得password。
解决办法:知道了原因,其实解决办法也比较简单:就是去掉二次认证这一步。因为根据kerberos的原理,是不用进行二次认证的。因为flink程序启动的时候是会将kerberos认证(keytab文件)进行缓存的,在使用的时候会先对flink程序缓存的keytab文件进行验证,验证对就能正常联通,验证不对就会报获取不到password(也就是keytab文件中的相关内容)。后来经过对代码进行修改去掉连接kudu时的kerberos二次认证的相关代码,发现可以正常连接,并且写kudu也是正常的。这样就将问题解决了。
标签:文件,keytab,记录,kerberos,认证,kudu,坑惨,节点 From: https://www.cnblogs.com/jia-tong/p/16754061.html