说明
本文描述问题及解决方法同样适用于 弹性 MapReduce(EMR)。
背景
多个开启 kerberos 的 hadoop 集群之间要做通信(跨集群的数据迁移等),因为 Kerberos 原因无法正常进行,本文档说明了多 kerberos 集群下做跨域认证的方法。
前提
集群A、B都开启了kerberos认证
其中: 集群A -> EMR-5ZP6Q4SO 集群B -> EMR-026X9ZB6
步骤
1. 向两个集群中添加 krbtgt principal
代码语言:javascript复制#EMR-5ZP6Q4SO
kadmin.local:addprinc -e "des3-cbc-sha1" krbtgt/EMR-5ZP6Q4SO@EMR-026X9ZB6
kadmin.local:addprinc -e "des3-cbc-sha1" krbtgt/EMR-026X9ZB6@EMR-5ZP6Q4SO
#EMR-026X9ZB6
kadmin.local:addprinc -e "des3-cbc-sha1" krbtgt/EMR-5ZP6Q4SO@EMR-026X9ZB6
kadmin.local:addprinc -e "des3-cbc-sha1" krbtgt/EMR-026X9ZB6@EMR-5ZP6Q4SO
注:如果你的kerberos不是勾选emr的kerberos,那么-e参数后面加的编码方式和你手搭的Kerberos集群创建凭据时指定的编码方式要一致,并且上述添加的凭据需要保持密码一致(kdc密码,emr集群为集群的root密码)
2. 在core-site中配置principal和user的映射RULES
在控制台core-site.xml集群维度下发(注,值要根据实际的集群做相应的替换)
代码语言:javascript复制hadoop.security.auth_to_local
RULE:[1:$1@$0](^.*@EMR-026X9ZB6$)s/^(.*)@EMR-026X9ZB6$/$1/g
RULE:[2:$1@$0](^.*@EMR-026X9ZB6$)s/^(.*)@EMR-026X9ZB6$/$1/g
RULE:[1:$1@$0](^.*@EMR-5ZP6Q4SO$)s/^(.*)@EMR-5ZP6Q4SO$/$1/g
RULE:[2:$1@$0](^.*@EMR-5ZP6Q4SO$)s/^(.*)@EMR-5ZP6Q4SO$/$1/g
DEFAULT
修改完成后可以做下验证:
代码语言:javascript复制hadoop org.apache.hadoop.security.HadoopKerberosName hadoop/ip@EMR-5ZP6Q4SO
Name: hadoop/ip@EMR-5ZP6Q4SO to hadoop
则说明配置成功
3. 配置krb5.conf文件 a) 配置[capaths]
在EMR-026X9ZB6的/etc/krb5.conf文件中添加如下信息
代码语言:javascript复制[capaths]
EMR-026X9ZB6 = {
EMR-5ZP6Q4SO = .
}
在EMR-5ZP6Q4SO中添加如下
[capaths]
EMR-5ZP6Q4SO = {
EMR-026X9ZB6 = .
}
b) 配置realms
为使得集群a可以访问集群b的KDC,需要将集群a的KDC Server配置到集群b中,如下,反之相同:
代码语言:javascript复制[realms]
EMR-5ZP6Q4SO = {
kdc = 10.0.0.125:88
admin_server = 10.0.0.125
kdc = 10.0.0.73:88
admin_server = 10.0.0.73
default_domain = EMR-5ZP6Q4SO
}
EMR-026X9ZB6 = {
kdc = 10.0.0.129:88
admin_server = 10.0.0.129
kdc = 10.0.0.9:88
admin_server = 10.0.0.9
default_domain = EMR-026X9ZB6
}
c)配置domain_realm
代码语言:javascript复制[domain_realm]
# .example.com = EXAMPLE.COM
10.0.0.125 = EMR-5ZP6Q4SO
10.0.0.129 = EMR-026X9ZB6
注意:这里需要把集群所有节点的ip和其对应的kdc realm做关联对应 至此krb5.conf修改完成,将这个配置同步到本集群的其他节点(包括core/master/common/router)
4. 配置hdfs-site.xml
在控制台修改hdfs-site.xml
代码语言:javascript复制dfs.namenode.kerberos.principal.pattern *
集群维度下发
5. 重启服务
重启kerberos 重启yarn rm 重启hdfs nn 做验证(跨集群读写/distcp等)
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!