最近我在集群中启用了kerberos,在我的kerberos登录到期之前,一切都很正常,比如说12小时。在这一点上,我创建的任何连接,用这些连接创建的任何表等都将在我使用它们时抛出。这可能会使我的应用程序崩溃,具体取决于我如何处理它。
我不介意崩溃,因为我的应用程序是由slider管理的,如果应用程序宕机,slider会重新启动应用程序,但是只有在hbase被“使用”时才会发生这种情况(即,我在一个表上调用一个方法,该表的连接现在已过时),这可能是由用户交互引起的,这将导致用户体验不佳。
我不希望身份验证实现的细节渗透到我的应用程序中,也不希望创建连接对象的次数超过必要的次数,因为这是一个代价高昂的操作,需要进行大量的rpc调用(首先是zookeeper元数据位置)。
是否有一个通用的策略(最好内置在hbase客户机中)来管理kerberos身份验证到期并在发生这种情况时更新hbase连接/表?
2条答案
按热度按时间3mpgtkmj1#
因为这是一个老问题,最好知道hbase、hadoop等的版本。
现在,kerberos票证更新应该只在hbase中工作
请参阅配置步骤-
https://docs.cloudera.com/documentation/enterprise/5-14-x/topics/cdh_sg_hbase_authentication.html#concept_zyz_vg5_nt
请参阅配置为使用tgt续订的hbase客户端示例-
https://github.com/apache/hbase/blob/064f5f1394faa8e84ad64488345e3bf46629ce59/hbase-examples/src/main/java/org/apache/hadoop/hbase/util/clientutils.java#l66
(顺便说一句,
renewTGT
=true
默认情况下,这实际上是hadoop commons代码库的一部分,请参见此处-https://github.com/naver/hadoop/blob/master/hadoop-common-project/hadoop-auth/src/main/java/org/apache/hadoop/security/authentication/client/kerberosauthenticator.java#l132)
lmvvr0a82#
kerberos tgt有一个生存期(例如12h)和一个可更新的生存期(例如7天)。只要票证仍然有效并且仍然可以续签,您就可以请求“免费”续签—不需要密码—并重置生存期计数器(例如,再过12小时)。
hadoop身份验证库生成一个特定的java线程,用于自动更新当前tgt。它有点难看,用一个
kinit -R
命令行而不是jaas库调用,但它可以工作-请参阅hadoop-6656因此,如果你让slider在启动时创建一个可更新的票证,并且如果你可以贿赂你的系统管理员将默认的(参见client conf)和最大的(参见kdc conf)可更新生存期提高到,比如说,30天,那么你的应用程序可以使用初始的tgt连续运行30天。不错的进步。
最后一点建议:您可以通过设置
KRB5CCNAME
环境变量,只要它是“文件:”缓存。