hbase kerberos连接更新策略

eanckbw9  于 2021-06-09  发布在  Hbase
关注(0)|答案(2)|浏览(382)

最近我在集群中启用了kerberos,在我的kerberos登录到期之前,一切都很正常,比如说12小时。在这一点上,我创建的任何连接,用这些连接创建的任何表等都将在我使用它们时抛出。这可能会使我的应用程序崩溃,具体取决于我如何处理它。
我不介意崩溃,因为我的应用程序是由slider管理的,如果应用程序宕机,slider会重新启动应用程序,但是只有在hbase被“使用”时才会发生这种情况(即,我在一个表上调用一个方法,该表的连接现在已过时),这可能是由用户交互引起的,这将导致用户体验不佳。
我不希望身份验证实现的细节渗透到我的应用程序中,也不希望创建连接对象的次数超过必要的次数,因为这是一个代价高昂的操作,需要进行大量的rpc调用(首先是zookeeper元数据位置)。
是否有一个通用的策略(最好内置在hbase客户机中)来管理kerberos身份验证到期并在发生这种情况时更新hbase连接/表?

3mpgtkmj

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
)

lmvvr0a8

lmvvr0a82#

kerberos tgt有一个生存期(例如12h)和一个可更新的生存期(例如7天)。只要票证仍然有效并且仍然可以续签,您就可以请求“免费”续签—不需要密码—并重置生存期计数器(例如,再过12小时)。
hadoop身份验证库生成一个特定的java线程,用于自动更新当前tgt。它有点难看,用一个 kinit -R 命令行而不是jaas库调用,但它可以工作-请参阅hadoop-6656
因此,如果你让slider在启动时创建一个可更新的票证,并且如果你可以贿赂你的系统管理员将默认的(参见client conf)和最大的(参见kdc conf)可更新生存期提高到,比如说,30天,那么你的应用程序可以使用初始的tgt连续运行30天。不错的进步。

如果你真的渴望永恒。。。抱歉,但实际上你还有一些程序要做。这意味着有一个专门的线程/进程负责或自动重新创建tgt。
java方式:在启动时,在连接到hbase/hdfs/whatever之前,使用 `loginUserFromKeytab()` 那就跑吧 `checkTGTAndReloginFromKeytab()` 不时地
shell方式:启动一个shell,它(a)用 `kinit` (b) 生成定期激发的子进程 `kinit` 再次(c)启动java应用程序,然后在应用程序终止时终止子进程
警告:如果其他线程在重新创建tgt时碰巧打开或重新打开了一个连接,该连接可能会失败,因为缓存在访问它的确切时间是空的(“竞争条件”)。下一次尝试将成功,但您的日志中可能会出现一些恶意警告。

最后一点建议:您可以通过设置 KRB5CCNAME 环境变量,只要它是“文件:”缓存。

相关问题