Keytab对接Kerberos认证Hadoop与Pinot时用户认证失败求助
问题根因与解决方案
核心问题1:配置值包含多余单引号
Pinot的配置解析器不会自动去除配置值外层的引号,你当前controller.conf中Kerberos相关参数的外层单引号会被当做值的一部分,导致程序读取到的principal为带单引号的'hdfs@HDFSSITHDP.COM',和keytab中的真实principal不匹配,触发认证失败。
修复方案:
删除所有Kerberos配置项的单引号,修改后配置如下:
pinot.controller.segment.fetcher.hdfs.hadoop.kerberos.principle=hdfs@HDFSSITHDP.COM pinot.controller.segment.fetcher.hdfs.hadoop.kerberos.keytab=/home/hdfs/hdfs.keytab pinot.controller.storage.factory.hdfs.hadoop.kerberos.principle=hdfs@HDFSSITHDP.COM pinot.controller.storage.factory.hdfs.hadoop.kerberos.keytab=/home/hdfs/hdfs.keytab
核心问题2:Java未加载Kerberos系统配置
手动执行kinit时会默认读取系统/etc/krb5.conf获取Realm、KDC地址等信息,但Java的Kerberos登录模块需要显式指定配置文件路径,否则会因缺少配置导致认证失败。
修复方案:
在启动Pinot Controller前的环境变量中,给JAVA_OPTS增加如下参数:
export JAVA_OPTS="${JAVA_OPTS} -Djava.security.krb5.conf=/etc/krb5.conf" # 可选:添加debug参数输出详细认证日志,排查问题时使用 # export JAVA_OPTS="${JAVA_OPTS} -Dsun.security.krb5.debug=true"
核心问题3:keytab权限过高
你当前给keytab设置了777权限,Kerberos的安全校验逻辑会拒绝权限过大的keytab文件,避免凭证泄露。
修复方案:
将keytab权限修改为仅所有者可读:
chmod 400 /home/hdfs/hdfs.keytab
其他校验点
- 确认
/usr/hdp/2.6.3.0-235/hadoop/conf目录下的core-site.xml、hdfs-site.xml中已经配置了Kerberos相关的认证参数,比如hadoop.security.authentication设置为kerberos - 确认启动Controller的用户为hdfs,和keytab的所有者一致
内容的提问来源于stack exchange,提问作者Sonu
相关产品推荐
相关产品推荐

