前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >「EMR 运维指南」之 Kerberos 跨域认证方案

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

原创
作者头像
岳涛
修改2023-11-24 16:54:53
3940
修改2023-11-24 16:54:53
举报
文章被收录于专栏:大数据生态大数据生态

说明

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 说明
  • 背景
  • 前提
  • 步骤
    • 1. 向两个集群中添加 krbtgt principal
      • 2. 在core-site中配置principal和user的映射RULES
        • 3. 配置krb5.conf文件 a) 配置[capaths]
          • b) 配置realms
          • c)配置domain_realm
        • 4. 配置hdfs-site.xml
          • 5. 重启服务
          相关产品与服务
          大数据
          全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档

          http://www.vxiaotou.com