准备
系统配置
Cloudera Manager Server节点需要安装IPA admin libraries。命令如下:
yum install ipa-server
配置FreeIPA
FreeIPA的krb5.conf默认配置包含如下内容:
default_ccache_name = KEYRING:persistent:%{uid}
CDH不支持keyring credential cache,所以需要注释此配置。
另外,需要增加以下配置:
renew_lifetime = 7d
renewable = true
具体操作,在每个集群节点编辑**/etc/krb5.conf** 文件,修改**[libdefaults]** 域如下:
#default_ccache_name = KEYRING:persistent:%{uid}
renew_lifetime = 7d
renewable = true
在ipa server节点,重启ipa服务,命令如下:
ipactl restart
集群设置
如果YARN Resource Manager HA已经在一个非安全集群中激活,启用Kerberos之前,你需要清除StateStore。
步骤如下:
停止YARN服务,停止之后,进入YARN服务管理页,点开操作 ,点击格式化State Store ,完成后,关机命令页即可。
启用Kerberos
启动向导
一、欢迎
按照要求,配置集群,符合要求后,全部勾选,继续。
二、KDC信息
三、KRB5配置
不要使用Cloudera Manager管理krb5.conf,最好手动管理,更容易维护。
四、KDC Account Manager凭据
这里直接使用FreeIPA的管理员凭据即可。
五、命令详细信息
六、Configure Kerberos
在此之前,确保集群节点都已经被FreeIPA管理。FreeIPA客户端使用ipa-client。
七、命令详细信息
八、汇总
创建HDFS超级用户
启用Kerberos后,建议修改HDFS超级用户配置,例如修改成hdfssupergroup 。
FreeIPA添加用户
登陆FreeIPA Web UI,导航:身份 -> 用户 -> 添加。填写内容如下:(注意设置密码)
点击添加,即可创建用户。结果如下:
修改HDFS配置
配置搜索框输入Superuser Group 进行搜索,找到如下配置:
修改为hdfssupergroup ,保存,按照提示重启服务。
集群用户配置
启用Kerberos,需要为集群用户添加Kerberos principal 以使用集群。这里以用户 xingweidong 为例。
添加用户账号
过程类似上面添加hdfssupergroup,按照上述过程添加即可。结果如下:
准备集群
在HDFS上为用户创建用户目录。
切换到HDFS超级用户主体,初次登陆会要求重置密码,按照提示操作即可。
kinit hdfssupergroup
为用户创建用户目录:
hdfs dfs -mkdir /user/xingweidong
hdfs dfs -chown xingweidong /user/xingweidong
确认Kerberos安全工作正常
切换到集群用户主体:
kinit xingweidong
提交一个mapreduce测试任务:
yarn jar /opt/cloudera/parcels/CDH/jars/hadoop-mapreduce-examples-3.0.0-cdh6.3.2.jar pi 10 10000
一切运行正常,完美!
问题记录
问题一
按照上文配置,应该不会遇到这个问题了。
描述
Hue的Kerberos Ticket Renewer服务无法启动,报错如下:
Couldn't renew kerberos ticket in order to work around Kerberos 1.8.1 issue. Please check that the ticket for 'hue/gateway1.bigdata.zxxk.com@BIGDATA.ZXXK.COM' is still renewable:
$ klist -f -c /var/run/hue/hue_krb5_ccache
If the 'renew until' date is the same as the 'valid starting' date, the ticket cannot be renewed. Please check your KDC configuration, and the ticket renewal policy (maxrenewlife) for the 'hue/gateway1.bigdata.zxxk.com@BIGDATA.ZXXK.COM' and `krbtgt' principals.
[08/Jul/2020 11:06:33 ] settings INFO Welcome to Hue 4.4.0
解决
编辑**/etc/krb5.conf** 文件,[libdefaults] 域下增加如下配置:
renew_lifetime = 7d
renewable = true
注意:
1、renew_lifetime需要和max_renewable_life保持一致。
2、每个节点的配置文件都需要增加这些配置,因为服务读取的是本地的krb5.conf,全部配置可以减少不必要的问题。
参考与分析
参考一:
这个讨论里提到了解决方法,但是经过测试后,并没有解决问题,不过,我发现里面提到的一个信息很有价值,就是renew_lifetime需要和max_renewable_life保持一致,这个一致只需要保持换算后的时间是一致的即可。
参考二:
这里面提到了两个配置项,文中提到只需在ipa-server配置即可,如下:
renew_lifetime = 7d
renewable = true
综合两个参考的信息,经过多次调整测试,得出上面的解决方法。
问题二
在阿里云VPC主机上部署生产环境时遇到的。
描述
启用Kerberos过程中出现问题,报错如下:
/opt/cloudera/cm/bin/gen_credentials_ipa.sh failed with exit code 9 and output of <<
+ CMF_REALM=BIGDATA.ZXXK.COM
+ export PATH=/usr/kerberos/bin:/usr/kerberos/sbin:/usr/lib/mit/sbin:/usr/sbin:/usr/lib/mit/bin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
+ PATH=/usr/kerberos/bin:/usr/kerberos/sbin:/usr/lib/mit/sbin:/usr/sbin:/usr/lib/mit/bin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
+ kinit -k -t /var/run/cloudera-scm-server/cmf5054368646837616543.keytab cmadmin-5d5055fa@BIGDATA.ZXXK.COM
+ KEYTAB_OUT=/var/run/cloudera-scm-server/cmf3990789607448816448.keytab
+ PRINCIPAL=HTTP/utility1.bigdata.zxxk.com@BIGDATA.ZXXK.COM
+ MAX_RENEW_LIFE=432000
+ '[' -z /etc/krb5.conf ']'
+ echo 'Using custom config path '\''/etc/krb5.conf'\'', contents below:'
+ cat /etc/krb5.conf
+ PRINC=HTTP
++ echo HTTP/utility1.bigdata.zxxk.com@BIGDATA.ZXXK.COM
++ cut -d / -f 2
++ cut -d @ -f 1
+ HOST=utility1.bigdata.zxxk.com
+ set +e
+ ipa host-find utility1.bigdata.zxxk.com
+ ERR=0
+ set -e
+ [[ 0 -eq 0 ]]
+ echo 'Host utility1.bigdata.zxxk.com exists'
+ set +e
+ ipa service-find HTTP/utility1.bigdata.zxxk.com@BIGDATA.ZXXK.COM
+ ERR=0
+ set -e
+ [[ 0 -eq 0 ]]
+ echo 'Principal HTTP/utility1.bigdata.zxxk.com@BIGDATA.ZXXK.COM exists'
+ PRINC_EXISTS=yes
+ KADMIN='kadmin -k -t /var/run/cloudera-scm-server/cmf5054368646837616543.keytab -p cmadmin-5d5055fa@BIGDATA.ZXXK.COM -r BIGDATA.ZXXK.COM'
+ '[' 432000 -gt 0 ']'
+ kadmin -k -t /var/run/cloudera-scm-server/cmf5054368646837616543.keytab -p cmadmin-5d5055fa@BIGDATA.ZXXK.COM -r BIGDATA.ZXXK.COM -q 'modprinc -maxrenewlife "432000 sec" HTTP/utility1.bigdata.zxxk.com@BIGDATA.ZXXK.COM'
Couldn't open log file /var/log/kadmind.log: Permission denied
modify_principal: Operation requires ``get'' privilege while getting "HTTP/utility1.bigdata.zxxk.com@BIGDATA.ZXXK.COM".
+ KEYTAB_PATH=/tmp/HTTP_utility1.bigdata.zxxk.com.keytab
++ ipa env server
++ tr -d '[:space:]'
++ cut -f2 -d:
+ IPA_HOST=utility1.bigdata.zxxk.com
+ [[ yes = \y\e\s ]]
+ [[ HTTP/ = \H\T\T\P\/ ]]
+ [[ utility1.bigdata.zxxk.com = \u\t\i\l\i\t\y\1\.\b\i\g\d\a\t\a\.\z\x\x\k\.\c\o\m ]]
+ echo 'Attempting to retrieve keytab for IPA HTTP principal. To grant the right to do so, run:\n ' '\tipa service-allow-retrieve-keytab HTTP/utility1.bigdata.zxxk.com@REALM --users=cmadmin-5d5055fa@BIGDATA.ZXXK.COM'
+ ipa-getkeytab -r --principal=HTTP/utility1.bigdata.zxxk.com@BIGDATA.ZXXK.COM --keytab=/tmp/HTTP_utility1.bigdata.zxxk.com.keytab
Failed to parse result: Insufficient access rights
Failed to get keytab
>>
解决
ipa service-allow-retrieve-keytab HTTP/utility1.bigdata.zxxk.com@REALM --users=cmadmin-5d5055fa
其中cmadmin-5d5055fa
是Cloudera Manager在FreeIPA中创建的用户,可以从FreeIPA中查看,用户名格式:cmadmin-<random_id>
。
注意--users
指定的用户名不要带域名,下面的分析过程对此进行了解释。
执行成功后,重试启用Kerberos失败的环节,继续。
如果已退出启用Kerberos向导,则可以在Cloudera Manager的 安全 -> Kerberos凭据 页面,执行 生成丢失的凭据。
分析过程
经过观察报错信息,失败的环节是:
ipa-getkeytab -r --principal=HTTP/utility1.bigdata.zxxk.com@BIGDATA.ZXXK.COM --keytab=/tmp/HTTP_utility1.bigdata.zxxk.com.keytab
Failed to parse result: Insufficient access rights
这里是Cloudera Manager通过ipa-getkeytab命令获取keytab,结果因为无效的访问权限(Insufficient access rights)而失败。
失败信息上面一条提示很重要:
+ echo 'Attempting to retrieve keytab for IPA HTTP principal. To grant the right to do so, run:\n ' '\tipa service-allow-retrieve-keytab HTTP/utility1.bigdata.zxxk.com@REALM --users=cmadmin-5d5055fa@BIGDATA.ZXXK.COM'
这个提示很详细,Cloudera Manager计划检索keytab,并说明了授权的方法。其中cmadmin-5d5055fa@BIGDATA.ZXXK.COM是Cloudera Manager创建的用户。
而失败的环节就是因为无效的访问权限而失败的,所以尝试使用提示的命令进行授权:
使用FreeIPA admin主体权限执行命令,登录主体的命令:kinit admin
ipa service-allow-retrieve-keytab HTTP/utility1.bigdata.zxxk.com@REALM --users=cmadmin-5d5055fa@BIGDATA.ZXXK.COM
不过直接执行这个命令会有问题,报错如下:
[root@utility1 ~]# ipa service-allow-retrieve-keytab HTTP/utility1.bigdata.zxxk.com@REALM --users=cmadmin-5d5055fa@BIGDATA.ZXXK.COM
主机名: HTTP/utility1.bigdata.zxxk.com@BIGDATA.ZXXK.COM
主体别名: HTTP/utility1.bigdata.zxxk.com@BIGDATA.ZXXK.COM
证书: MIIE5TCCA82gAwIBAgIBCTANBgkqhkiG9w0BAQsFADA7MRkwFwYDVQQKDBBCSUdEQVRBLlpYWEsuQ09NMR4wHAYDVQQDDBVDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMjAwNzMxMDExODU2WhcNMjIwODAxMDExODU2WjA/MRkwFwYDVQQKDBBCSUdEQVRBLlpYWEsuQ09NMSIwIAYDVQQDDBl1dGlsaXR5MS5iaWdkYXRhLnp4eGsuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx+9cmjs3CD/wL8dJqk7xji1jOtGIpdTagReVkyuHx639AjZzDyatwihPGLnVCg/4lmKeZ3lwrmiQnfLk5e2i4yIwKrpgKdrA6tp/b9cAtAm1Aq3VYpWMbih2wIgVbuVKWP/I8TSwqNfQ9ZLj1PPuApNYmoNcwDxGSBXLXcaUsiVHY1Q+x68kBxB/WFTbeBjPgremgSAojdNiLVIqWXQQXaytBX1RG9npU7COJtlnHnbwwzimKsHnCzdNza6jnzts776P4M6s7yrvhewXDJGmMIAj0PgXCvfdMudx+OVjJFkIzSBIw/7Sl5Fmkps5u6pclwXN+PVc5iUYOpj8pYJBnwIDAQABo4IB7jCCAeowHwYDVR0jBBgwFoAUNJYYJQKe+0MhNjglFCqa4pvuDLMwQgYIKwYBBQUHAQEENjA0MDIGCCsGAQUFBzABhiZodHRwOi8vaXBhLWNhLmJpZ2RhdGEuenh4ay5jb20vY2Evb2NzcDAOBgNVHQ8BAf8EBAMCBPAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMHsGA1UdHwR0MHIwcKA4oDaGNGh0dHA6Ly9pcGEtY2EuYmlnZGF0YS56eHhrLmNvbS9pcGEvY3JsL01hc3RlckNSTC5iaW6iNKQyMDAxDjAMBgNVBAoMBWlwYWNhMR4wHAYDVQQDDBVDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHQYDVR0OBBYEFBrWhdEchPrA8DUCRLxhMZIxcf0HMIG3BgNVHREEga8wgayCGXV0aWxpdHkxLmJpZ2RhdGEuenh4ay5jb22gPwYKKwYBBAGCNxQCA6AxDC9IVFRQL3V0aWxpdHkxLmJpZ2RhdGEuenh4ay5jb21AQklHREFUQS5aWFhLLkNPTaBOBgYrBgEFAgKgRDBCoBIbEEJJR0RBVEEuWlhYSy5DT02hLDAqoAMCAQGhIzAhGwRIVFRQGxl1dGlsaXR5MS5iaWdkYXRhLnp4eGsuY29tMA0GCSqGSIb3DQEBCwUAA4IBAQCR+Kr0WjbiS5FyagxDPCRS1fGlzXzeQraXw2mI6lxX2RHy1dBiAjqRR3jOzJArKanUBSlTDyJymoQhd3Kc9cZ6k4eAoEZIXONzo6e3dT6yc0mplK/9AvNFUBlLAajfJmK50ay7OoTsLY3jWaP2aadZzQTLyNsxV9DHcLHMETI3jJ8D3P61cB78tc9X781JWFvPB8NYvHqI1XvpcYfmMUdWleSkd/FWjHqq/ymVGG7Sgy4eCrhZ2b903Froa0fiMXWEVa1rUQ8G4fFBx67InVN1v9Z675lI95aZCIpL2k9onYDpmTme+YiybL+11JE3KDynjlMydS13JEjWNEMs4wRI
Managed by: utility1.bigdata.zxxk.com
不允许检索keytab:
member user: cmadmin-5d5055fa@BIGDATA.ZXXK.COM: no such entry
member group:
member host:
member host group:
---------
已添加的成员数 0
---------
可以看到核心提示:
cmadmin-5d5055fa@BIGDATA.ZXXK.COM: no such entry
cmadmin-5d5055fa@BIGDATA.ZXXK.COM
是用户cmadmin-5d5055fa
的带域名形式,尝试去掉域名,执行成功,命令如下:
ipa service-allow-retrieve-keytab HTTP/utility1.bigdata.zxxk.com@REALM --users=cmadmin-5d5055fa