启用Kerberos时,能否禁用Hadoop YARN的PTR反向IP检查?
解决Spark客户端连接ResourceManager的Kerberos反向IP检查问题
核心问题说明
你碰到的是Kerberos身份验证中反向DNS解析(PTR记录)与服务主体不匹配引发的错误。虽然修改krb5.conf设置rdns=false是常规禁用反向解析的方案,但Hadoop/Spark的Kerberos客户端可能有自身配置覆盖了系统级的krb5参数,导致该设置未生效。
可行解决方案
1. 修改Hadoop/YARN核心配置
在YARN和Hadoop的配置文件中添加反向解析禁用相关参数,强制服务使用私有IP/主机名进行身份验证:
- 编辑
yarn-site.xml,新增以下配置:<property> <name>yarn.resourcemanager.principal</name> <value>yarn/_HOST@YOUR_REALM</value> <description>使用_HOST占位符,让服务自动适配私有IP对应的主机名</description> </property> <property> <name>yarn.resourcemanager.address</name> <value>私有IP:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>私有IP:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>私有IP:8031</value> </property> - 编辑
core-site.xml,新增以下配置:<property> <name>hadoop.security.auth_to_local</name> <value>RULE:[2:$1@$0](yarn/_HOST@YOUR_REALM)s/.*/yarn/</value> <description>映射Kerberos主体到本地用户,忽略主机名差异</description> </property> <property> <name>hadoop.security.dns.interface</name> <value>eth0</value> <!-- 指定集群使用的私有网卡 --> </property> <property> <name>hadoop.security.dns.nameserver</name> <value>私有DNS服务器IP</value> <!-- 确保解析用私有DNS,不走公网 --> </property>
2. 显式配置Spark客户端的Kerberos参数
在Spark客户端的spark-defaults.conf或提交脚本中添加参数,强制客户端使用指定的krb5配置并禁用反向解析:
spark.driver.extraJavaOptions=-Dsun.security.krb5.disableReferrals=true -Djava.security.krb5.conf=/path/to/your/krb5.conf spark.executor.extraJavaOptions=-Dsun.security.krb5.disableReferrals=true -Djava.security.krb5.conf=/path/to/your/krb5.conf spark.yarn.principal=your_client_principal@YOUR_REALM spark.yarn.keytab=/path/to/your/client.keytab
确保指定的krb5.conf中包含:
[libdefaults] default_realm = YOUR_REALM rdns = false
(显式指定krb5.conf路径可避免客户端读取系统默认配置时忽略rdns设置)
3. 重新生成ResourceManager的Kerberos主体与Keytab
如果之前ResourceManager的Kerberos主体是硬编码的公网主机名,重新生成主体为yarn/私有主机名@YOUR_REALM,或直接使用yarn/_HOST@YOUR_REALM(推荐,自动适配当前主机名),然后更新对应的keytab文件并重启ResourceManager服务。
验证步骤
- 重启ResourceManager及所有YARN相关服务
- 在Spark客户端执行
kinit获取Kerberos票据后,提交测试任务:
spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode cluster $SPARK_HOME/examples/jars/spark-examples_*.jar 10
- 查看YARN日志和Spark驱动日志,确认不再出现
IllegalArgumentException: Server has invalid Kerberos principal错误
内容的提问来源于stack exchange,提问作者Amir Abbas
相关产品推荐
相关产品推荐

