温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。
Fayson的github: https://github.com/fayson/cdhproject
提示:代码块部分可以左右滑动查看噢
1
文档编写目的
前面Fayson介绍了《0558-01-如何在Redhat7上安装FreeIPA》和《0559-02-如何在Redhat7上安装FreeIPA的客户端》,那如何在CDH集群中使用?通过Cloudera Manager可以为我们的CHD集群启用Kerberos认证,在前面的文章《如何为CDH集成Active Directory的Kerberos认证》和《如何在CDH集群启用Kerberos》介绍了集成不同服务的Kerberos认证,本篇文章Fayson主要介绍如何将CDH集成的KDC服务切换至FreeIPA下的Kerberos认证。
- 测试环境
1.RedHat7.3
2.FreeIPA4.6.4
3.CM和CDH版本为5.15.0
2
环境准备
1.确认CDH机器所有节点已安装了FreeIPA Client,可以参考Fayson上一篇文章《02-如何在Redhat7上安装FreeIPA的客户端》
2.安装完成FreeIPA客户端后,修改集群所有节点krb.conf文件
3.在FreeIPA上创建一个cloudera-role角色并赋予权限
点击添加按钮添加一个cloudera-role角色
点击“编辑和编辑”进入角色编辑界面
点击“特权”菜单,为该角色授权
完成角色授权
4.在FreeIPA上创建一个cloudera-scm的用户
点击“角色”菜单,为cloudera-scm用户添加角色
完成cloudera-scm用户的创建
3
自定义脚本生成keytab
相较于之前的两片文章,本篇文章会复杂一些,因为CDH默认没有提供FreeIPA的集成,所以需要参考官网的文章使用自定义脚本生成keytab,地址如下:
https://www.cloudera.com/documentation/enterprise/latest/topics/sg_keytab_retrieval_script.html
1.在Cloudera Manager服务所在节点上创建一个脚本目录/opt/cloudera/freeipa
该目录主要存放自定义导出keytab脚本。
2.进入/opt/cloudera/freeipa目录执行如下命令导出cloudera-scm用户的keytab文件
代码语言:javascript复制[root@cdh01 freeipa]# cd /opt/cloudera/freeipa/
[root@cdh01 freeipa]# kinit cloudera-scm
[root@cdh01 freeipa]# ipa-getkeytab -p cloudera-scm -k cloudera-scm.keytab -s cdh04.fayson.net
[root@cdh01 freeipa]# chown cloudera-scm. cloudera-scm.keytab
[root@cdh01 freeipa]# ll
3.在/opt/cloudera/freeipa目录下创建getkeytabs.sh文件内容如下
代码语言:javascript复制[root@cdh01 ~]# cd /opt/cloudera/freeipa/
[root@cdh01 freeipa]# vim getkeytabs.sh
#set -e
set -x
CMKEYTAB="/opt/cloudera/keytab/cloudera-scm.keytab"
CMUSER="cloudera-scm"
REALM="FAYSON.NET"
IPASERVER="cdh04.fayson.net"
DEST="$1"
FULLPRINC="$2"
# Passwd based kinit
#echo PASSWORD | kinit $CMUSER@$REALM
# Or per keytab (keytab needs to be generated before)
kinit -k -t $CMKEYTAB $CMUSER@$REALM
PRINC=$( echo $FULLPRINC | sed "s/@$( echo $REALM )//" )
echo $PRINC
echo Retrieving keytab for $FULLPRINC for $DEST
echo Checking for existing service principle
if ipa service-find $FULLPRINC; then
echo Service principle found
else
echo Service principle not created, creating
ipa service-add $FULLPRINC --pac-type=NONE
fi
echo Ensuring service allows
ipa service-allow-create-keytab --users=$CMUSER $FULLPRINC
ipa service-allow-retrieve-keytab --users=$CMUSER $FULLPRINC
if ipa service-show $FULLPRINC | grep 'Keytab' | grep 'False'; then
echo Creating keytab for $FULLPRINC for $DEST
ipa-getkeytab -s $IPASERVER -p $PRINC -k $DEST -e rc4-hmac,aes256-cts,aes128-cts
else
echo Retrieving keytab for $FULLPRINC for $DEST
ipa-getkeytab -r -s $IPASERVER -p $PRINC -k $DEST
fi
chmod 600 $DEST
kdestroy
exit 0;
4.修改getkeytabs.sh脚本属主及执行权限
代码语言:javascript复制[root@cdh01 freeipa]# pwd
[root@cdh01 freeipa]# chown cloudera-scm. getkeytabs.sh
[root@cdh01 freeipa]# chmod x getkeytabs.sh
注意:getkeytabs.sh脚本中CMKEYTAB、CMUSER、REALM、IPASERVER参数修改为自己相应环境的配置。
4
CDH切换Kerberos认证至FreeIPA
1.停止集群所有服务,CDH和CMS的所有服务
2.进入“管理”->“设置”界面,通过过滤类别筛选Kerberos相关配置
配置FreeIPA相关配置信息
3.配置自定义脚本地址
4.完成keytab生成自定义脚本的配置后,到Kerberos凭据管理界面,重新生成所有服务的Kerberos信息
命令运行成功,以重新生成了所有服务的keytab文件
5.登录FreeIPA也可以看到生成的所有服务的Principal
5
Kerberos集成验证
1.通过CM启动集群所有服务
2.提交一个MapReduce作业测试
作业执行成功
6
总结
1.CDH集成FreeIPA的Kerberos,需要在集群的所有节点安装FreeIPA Client,安装客户端时会默认的配置Kerberos信息到每个节点的/etc/krb5.conf文件中。
2.由于CDH默认不支持集成FreeIPA,因此在集成FreeIPA的Kerberos时需要自定义生成keytab脚本
3.在CM中配置了自定义生成keytab脚本后,会忽略所有的Kerberos的配置信息,以脚本为主生成keytab文件
4.在FreeIPA上我们需要创建一个cloudera-scm用户并授权Service和DNS服务的管理员权限,使cloudera-scm用户有创建服务账号和添加DNS解析的权限。
5.在getkeytabs.sh脚本中,ipa-getkeytab导出keytab时指定了加密类型为rc4-hmac,否则在启动Zookeeper服务时会报错。
6.在生成keytab报错时可以将set -e参数开启,shell脚本运行时会打印详细的日志信息,便于定位脚本执行到哪一步报错,但是ipa service-allow-create-keytab命令成功执行过后,重复执行会导致脚本无法运行成功,除调试外将set -e屏蔽。
7.特别注意需要将FreeIPA默认的krb5.conf配置文件中default_ccache_name = KEYRING:persistent:%{uid}参数注释掉,否则会导致无法访问HDFS服务提交作业等。
参考:
https://mapredit.blogspot.com/2016/10/freeipa-and-hadoop-distributions-hdp-cdh.html
提示:代码块部分可以左右滑动查看噢
为天地立心,为生民立命,为往圣继绝学,为万世开太平。 温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。
推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。