「EMR 运维指南」之 Kerberos 跨域认证方案

2023-11-24 16:54:53 浏览数 (2)

说明

本文描述问题及解决方法同样适用于 弹性 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腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞