01
—
文档编写目的
Cloudera从CM6.3版本开始,引入了Red Hat IdM来做整个集群的认证,Red Hat IdM对应的软件为FreeIPA,在本文中描述如何使用FreeIPA来做CDH集群的认证。关于FreeIPA服务器搭建参考<使用FreeIPA对Linux用户权限统一管理>。
1.1. 文档内容
文档主要包括以下内容
1) FreeIPA客户端配置
2) CDP DC集群使用FreeIPA启用Kerberos
3) Kerberos使用
1.2. 假设前提
这篇文档将重点介绍如何在CDH集群使用FreeIPA启用及配置Kerberos,并基于以下假设:
1) CDP DC集群运行正常
2) 集群未启用Kerberos
3) MySQL 5.1.73
1.3. 测试环境
以下是本次测试环境,但不是本操作手册的必需环境:
1) 操作系统:CentOS7.6
2) CDP DC和CM版本为7.0.3
3) 采用root用户进行操作
02
—
集群所有节点部署FreeIPA客户端
1) 在集群的所有节点上安装FreeIPA客户端介质:
代码语言:javascript复制yum -y install ipa-client
2) 配置IPA客户端
代码语言:javascript复制[root@grocery ~]# ipa-client-install
WARNING: ntpd time&date synchronization service will not be configured as
conflicting service (chronyd) is enabled
Use --force-ntpd option to disable it and force configuration of ntpd
DNS discovery failed to determine your DNS domain
Provide the domain name of your IPA server (ex: example.com): vpc.cloudera.com
Provide your IPA server name (ex: ipa.example.com): xuefeng.vpc.cloudera.com
The failure to use DNS to find your IPA server indicates that your resolv.conf file is not properly configured.
Autodiscovery of servers for failover cannot work with this configuration.
If you proceed with the installation, services will be configured to always access the discovered server for all operations and will not fail over to other servers in case of failure.
Proceed with fixed values and no DNS discovery? [no]: yes
Client hostname: grocery.vpc.cloudera.com
Realm: VPC.CLOUDERA.COM
DNS Domain: vpc.cloudera.com
IPA Server: xuefeng.vpc.cloudera.com
BaseDN: dc=vpc,dc=cloudera,dc=com
Continue to configure the system with these values? [no]: yes
3) 修改集群节点的/etc/krb5.conf配置文件。
a) 注释掉default_ccache_name
b) 添加renew_lifetime = 7d
代码语言:javascript复制[root@wangxf ~]# vi /etc/krb5.conf
4) 验证Kerberos配置成功
代码语言:javascript复制[root@wangxf ~]# kinit admin
Password for admin@VPC.CLOUDERA.COM:
You have new mail in /var/spool/mail/root
[root@wangxf ~]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: admin@VPC.CLOUDERA.COM
Valid starting Expires Service principal
11/28/2019 03:54:32 11/29/2019 03:54:29 krbtgt/VPC.CLOUDERA.COM@VPC.CLOUDERA.COM
[root@wangxf ~]#
5)进入FreeIPA的UI查看新加的机器:
03
—
CDP DC集群启动安全
1) 登陆CM,进入Administration->Security,准备启动安全
2) 进入Security,点击Status,在集群中点击Enable Kerberos
3) 开始启动Enable Kerberos for Cluster,选择KDC TYPE为Red Hat IPA。
选择Red Hat IPA 之后,页面会跳出IPA的配置步骤:
上述步骤都执行完成后,复选I have completed all the above steps.
4) 设置KDC
在设置KDC页面中,依次填写配置相关的KDC信息,包括类型、KDC服务器、KDC Realm、加密类型以及待创建的Service Principal(hdfs,yarn,,hbase,hive等)的更新生命期等,填写完成后点击下一步
5) 不建议让Cloudera Manager来管理krb5.conf, 点击“继续”
6) 输入Cloudera Manager的Kerbers管理员账号,一定得和之前创建的账号一致,点击“继续”
7) 导入KDC账户。如果重复执行会报错,这时需要到FreeIPA中把新加入的用户删除,然后重新执行。
8) 配置Kerberos,包括部署其他节点客户端命令,配置端口等。我们前面已经配置了其他机器的kerberos客户端,这里不需要配置。端口保存默认。
9) 点击“继续”启用Kerberos
10) 集群重启完成,点击“继续”
11) 点击“继续”,完成集群安全设置工作。
04
—
Kerberos验证
4.1. Hdfs验证
1) 在FreeIPA系统中已经存在admin用户,使用admin用户认证后,访问hdfs正常。Kdestroy掉已有的凭据,hdfs访问报权限问题,无法访问。
代码语言:javascript复制[root@grocery ~]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: admin@VPC.CLOUDERA.COM
Valid starting Expires Service principal
12/09/2019 08:48:45 12/10/2019 08:48:43 krbtgt/VPC.CLOUDERA.COM@VPC.CLOUDERA.COM
renew until 12/16/2019 08:48:43
[root@grocery ~]# hdfs dfs -ls /
Found 6 items
drwxr-xr-x - hbase hbase 0 2019-12-09 09:13 /hbase
drwxr-xr-x - hdfs supergroup 0 2019-12-09 08:13 /ranger
drwxrwxr-x - solr solr 0 2019-12-09 08:17 /solr
drwxrwxrwt - hdfs supergroup 0 2019-12-09 08:15 /tmp
drwxr-xr-x - hdfs supergroup 0 2019-12-09 08:19 /user
drwxr-xr-x - hdfs supergroup 0 2019-12-09 08:13 /warehouse
[root@grocery ~]# kdestroy
[root@grocery ~]# hdfs dfs -ls /
19/12/09 09:19:43 WARN ipc.Client: Exception encountered while connecting to the server : org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]
ls: DestHost:destPort grocery.vpc.cloudera.com:8020 , LocalHost:localPort grocery.vpc.cloudera.com/10.65.31.238:0. Failed on local exception: java.io.IOException: org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]
[root@grocery ~]#
2) 使用admin用户执行MapReduce任务,因为MapReduce任务需要写到用户的临时目录下,而在hdfs中没有为该用户创建临时目录,因此任务由于访问权限问题报错。
代码语言:javascript复制hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi 10 100
hdfs dfs -ls /user
这是因为在hadoop中没有/user/admin的目录,导致mapreduce的临时文件没有地方写,导致作业错误。
3) 使用hdfs用户来创建/user/admin目录并赋权
进入/var/run/cloudera-scm-agent/process/,找到hdfs最新的目录
代码语言:javascript复制cd /var/run/cloudera-scm-agent/process/
cd 89-hdfs-NAMENODE
执行hdfs用户的凭据认证
代码语言:javascript复制kinit -kt hdfs.keytab hdfs/grocery.vpc.cloudera.com@VPC.CLOUDERA.COM
如果执行遇到下面的错误:
代码语言:javascript复制kinit: Pre-authentication failed: Unsupported key table format version number while getting initial credentials
则是凭据过期,找到的文件目录不是最新的。
执行下列命令在hdfs中为admin用户创建目录并赋权
代码语言:javascript复制hdfs dfs -mkdir /user/admin
hdfs dfs -chown -R admin:hadoop /user/admin
hdfs dfs -ls /user/
Found 10 items
drwxr-xr-x - admin hadoop 0 2019-12-09 09:27 /user/admin
drwxrwxrwx - mapred hadoop 0 2019-12-09 08:18 /user/history
drwxrwxr-t - hive hive 0 2019-12-09 08:21 /user/hive
drwxrwxr-x - hue hue 0 2019-12-09 08:17 /user/hue
drwx------ - livy livy 0 2019-12-09 08:18 /user/livy
drwxrwxr-x - oozie oozie 0 2019-12-09 08:14 /user/oozie
drwxr-x--x - spark spark 0 2019-12-09 08:14 /user/spark
drwxr-xr-x - hdfs supergroup 0 2019-12-09 08:13 /user/tez
drwxr-xr-x - hdfs supergroup 0 2019-12-09 08:16 /user/yarn
drwx------ - zeppelin zeppelin 0 2019-12-09 08:19 /user/zeppelin
4) 切换到admin用户,再次执行刚才的MapReduce任务
4.2. Hive验证
1) 使用beeline连接hive进行测试
使用admin用户进行hive连接、以及建表和插入数据和查询等操作都可以正常完成。
代码语言:javascript复制beeline
show databases;
use default
create table t1 (s1 string,s2 string);
insert into t1 values('1','2');
select * from t1;
Hive会自动应用当前的Kerberos凭据,直接登录。
4.3. Hue验证
使用admin用户在hue中执行hive和访问hdfs
使用admin用户往/user目录上传文件失败,用户没有权限。
使用admin用户往/user/admin目录上传文件成功。
05
—
总结
1) 在CDP数据中心版上启动Kerberos,比在CDH中启动Kerberos简单。
2) 在CDP数据中心版上使用Kerberos认证也变得更加简单,例如beeline连接串中不需要写凭据等。
3) 在CDP数据中心版中界面向导性更强。
06
—
常见问题
6.1. hue 的Kerberos Ticket Renewer角色报错
查看角色详细日志:
执行klist -f -c /var/run/hue/hue_krb5_ccache
解决方案:
在/etc/krb5.conf中增加:
代码语言:javascript复制 ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
然后重启hue服务即可。
07
—
参考资料
1) https://docs.cloudera.com/runtime/7.0.3/cdp-security-overview/topics/security-how-identity-management-works-in-cdp.html
2) HUE kerberos启动报错Couldn't renew kerberos ticket解决方案:https://blog.csdn.net/vah101/article/details/79111585