CDH安装Kerberos (包含主从配置)

很多企业CDH是没有集成kerberos,原因是kerberos部署后,服务使用起来变复杂,大部分只配置了sentry做权限管理;但真正的CDH多租户应该是 身份验证 + 权限管理。也就是(kerberos + sentry)
接下来,我会图文介绍怎么安装这两个服务;
在实施方案前,假设
  • CDH已经运行正常;

  • 之前安装了sentry服务先停掉


    CDH安装Kerberos (包含主从配置)_第1张图片
    企业微信截图_20180606233117.png
  • 正确的顺序应该是先kerberos然后sentry; 避免发生一些奇怪的错误

  • 服务器root用户

注意点
  • 首先centos5.6以上的系统,必须要替换几个文件 (每个节点都要)
    1.下载 Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy File
    2.下载文件是个zip包,解开后,将里面的两个文件放到下面的目录中:$JAVA_HOME/jre/lib/security
CDH安装Kerberos (包含主从配置)_第2张图片
policy.png
安装KDC和配置服务
  • KDC服务端
##执行命令
yum -y install krb5-server krb5-libs krb5-auth-dialog1 krb5-workstation
  • 修改/etc/krb5.conf配置
vi /etc/krb5.conf

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 default_realm = W.COM
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true

#注意的是node1是你kdc服务的主机host
#作用域一般一个集群配一个足矣
[realms]
 W.COM = {
  kdc = node1
  admin_server = node1
 }

[domain_realm]
 .node1 = W.COM
 node1 = W.COM
  • 修改/var/kerberos/krb5kdc/kadm5.acl配置
vi /var/kerberos/krb5kdc/kadm5.acl
#/admin结尾的都是带有管理权限的principal
*/[email protected]     *
  • 修改/var/kerberos/krb5kdc/kdc.conf配置
#修改kdc.conf
vi /var/kerberos/krb5kdc/kdc.conf
[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88

[realms]
 W.COM = {
  #master_key_type = aes256-cts
  max_renewable_life= 7d 0h 0m 0s
  acl_file = /var/kerberos/krb5kdc/kadm5.acl
  dict_file = /usr/share/dict/words
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
  supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
 }
  • 创建Kerberos数据库
kdb5_util create –r W.COM -s
# 密码默认为KERBEROS
  • 创建Kerberos的管理账号
kadmin.local
#然后输入 
addprinc admin/[email protected]
#管理员密码为:kerberos

#提示 created关键字之后,输入 exit退出
exit
  • 将Kerberos服务添加到自启动服务,并启动krb5kdc和kadmin服务
chkconfig krb5kdc on
chkconfig kadmin on
service krb5kdc start
service kadmin start
  • 参加一句,假如上述步骤做错了,配置文件配错了,不要犹豫;重新从头开始操作一次 (重头操作之前先把数据库删了 /var/kerberos/krb5kdc/下面的pricinpal文件和keytab文件)
  • 测试kerberos管理员账号
kinit admin/[email protected] 
#然后输入上两步设置的密码
klist

#显示类似下面东西表示正常
[root@node1 krb5kdc]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: admin/[email protected]

Valid starting     Expires            Service principal
05/31/18 17:14:34  06/01/18 17:14:34  krbtgt/[email protected]
        renew until 06/07/18 17:14:34
  • 其他子节点安装Kerberos客户端( 每个子节点都要 )
yum -y install krb5-libs krb5-workstation
  • 在Cloudera Manager Server服务器上安装额外的包
#在kdc服务所在的机器
yum -y install openldap-clients
  • 将KDC Server上的krb5.conf文件拷贝到所有Kerberos客户端
scp -r /etc/krb5.conf root@slave1:/etc/
scp -r /etc/krb5.conf root@slave2:/etc/
scp -r /etc/krb5.conf root@slave3:/etc/
  • 以上就是配置KDC服务端和客户端步奏,下一步是CDH集成KDC
CDH启用Kerberos
#在KDC中给Cloudera Manager添加管理员账号
#在KDC服务所在的机器操作
kadmin.local
addprinc cloudera-scm/[email protected]
#密码:kerberos

创建完成后输入  exit 退出
exit
  • 进入Cloudera Manager的“管理”-> “安全”界面


    CDH安装Kerberos (包含主从配置)_第3张图片
    安全管理.png
  • 继续


    CDH安装Kerberos (包含主从配置)_第4张图片
    启用kerberos.png
  • 继续


    CDH安装Kerberos (包含主从配置)_第5张图片
    全选.png
  • 继续,node1为安装KDC服务所在的机器host


    CDH安装Kerberos (包含主从配置)_第6张图片
    KDC信息.png
  • 继续


    CDH安装Kerberos (包含主从配置)_第7张图片
    取消勾选.png
  • 必须是刚才创建的Kerbers管理员账号,必须和之前创建的账号一致,继续


    CDH安装Kerberos (包含主从配置)_第8张图片
    KDC凭据.png
  • 继续


    CDH安装Kerberos (包含主从配置)_第9张图片
    导入凭据.png
  • 继续,每台机器每个服务都会生成唯一一个principal


    CDH安装Kerberos (包含主从配置)_第10张图片
    kerberos主体.png
  • 继续


    CDH安装Kerberos (包含主从配置)_第11张图片
    配置端口.png
  • 等待集群重启成功,点击“继续”


    CDH安装Kerberos (包含主从配置)_第12张图片
    成功启用kerberos.png
  • 至此已成功启用Kerberos。
  • 启动过程后,impala daemon或者kudu报以下错
(SASL(-4): no mechanism available: No worthy mechs found)

在报错节点执行以下命令

yum install cyrus-sasl-plain  cyrus-sasl-devel  cyrus-sasl-gssapi
  • 一定要保证服务所在节点安装kerberos客户端,服务启动需要用到kinit
验证
  • 登录KDC服务所在的机器
#执行
kadmin.local
#输入后回车
listprincs

#这时候会看到
kadmin.local:  listprincs
HTTP/[email protected]
HTTP/[email protected]
HTTP/[email protected]
HTTP/[email protected]
K/[email protected]
admin/[email protected]
cloudera-scm/[email protected]
[email protected]
hbase/[email protected]
hbase/[email protected]
hbase/[email protected]
hbase/[email protected]
hdfs/[email protected]
hdfs/[email protected]
hdfs/[email protected]
hdfs/[email protected]
hive/[email protected]
hue/[email protected]
impala/[email protected]
impala/[email protected]
impala/[email protected]
impala/[email protected]
kadmin/[email protected]
kadmin/[email protected]
kadmin/[email protected]
kafka/[email protected]
kafka/[email protected]
kafka/[email protected]
kafka_mirror_maker/[email protected]
krbtgt/[email protected]
kudu/[email protected]
kudu/[email protected]
kudu/[email protected]
kudu/[email protected]
[email protected]
mapred/[email protected]
oozie/[email protected]
sentry/bi-mast

#上述principal是CDH集成kerberos生成的
  • 访问服务(任意一个安装了kerberos客户端的节点)
    之前我们没集成kerberos时候,访问hdfs操作如下
#通过切换hdfs用户达到具备访问hdfs目录权限
[root@bi-bdap-ue-001 ~]# su hdfs
[hdfs@bi-bdap-ue-001 root]$ hadoop fs -ls /user/hive/warehouse
Found 3 items
drwxrwx--x+  - hive hive          0 2018-04-20 14:09 /user/hive/warehouse/dm_wms.db
drwxrwx--x+  - hive hive          0 2018-03-15 17:13 /user/hive/warehouse/dw
drwxrwx--x+  - hive hive          0 2018-03-14 15:42 /user/hive/warehouse/wms.db
[hdfs@bi-bdap-ue-001 root]$ hadoop fs -ls /user/hive/warehouse/dw
Found 2 items
drwxrwx--x+  - hive hive          0 2018-05-25 17:37 /user/hive/warehouse/dw/dw_wms.db
drwxrwx--x+  - hive hive          0 2018-04-09 13:57 /user/hive/warehouse/dw/dw_wms_tmp.db

现在集成kerberos后,通过切换用户访问服务方式走不通

#就算切换成hdfs用户后依然没有权限访问hdfs
[root@node1 ~]# su hdfs
bash-4.1$ klist
klist: No credentials cache found (ticket cache FILE:/tmp/krb5cc_496)
bash-4.1$ hadoop fs -ls /user
18/06/07 00:55:31 WARN security.UserGroupInformation: PriviledgedActionException as:hdfs (auth:KERBEROS) cause:javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]
18/06/07 00:55:31 WARN ipc.Client: Exception encountered while connecting to the server : javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]
18/06/07 00:55:31 WARN security.UserGroupInformation: PriviledgedActionException as:hdfs (auth:KERBEROS) cause:java.io.IOException: javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]
ls: Failed on local exception: java.io.IOException: javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]; Host Details : local host is: "node1/172.17.194.20"; destination host is: "node1":8020; 

正确的方式是kinit 命令获得或更新 Kerberos 票据授权票据后访问服务

#现在服务只认票据
#而且相应的服务有相应的票据
[root@node1 1003-hdfs-NAMENODE]# kinit -kt hdfs.keytab hdfs/[email protected]
[root@node1 1003-hdfs-NAMENODE]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: hdfs/[email protected]

Valid starting     Expires            Service principal
06/07/18 01:00:55  06/08/18 01:00:55  krbtgt/[email protected]
        renew until 06/12/18 01:00:55
[root@node1 1003-hdfs-NAMENODE]# hadoop fs -ls /user/hive/warehouse
Found 12 items
drwxrwx--x+  - hive hive          0 2018-05-24 19:01 /user/hive/warehouse/apache_sqoop_test
drwxrwx--x+  - hive hive          0 2018-06-06 15:13 /user/hive/warehouse/bi.db
drwxrwx--x+  - hive hive          0 2018-05-17 16:41 /user/hive/warehouse/gms.db
drwxrwx--x+  - hive hive          0 2018-06-04 14:08 /user/hive/warehouse/gtp.db
drwxrwx--x+  - hive hive          0 2018-05-25 20:43 /user/hive/warehouse/gtp_data.db
drwxrwx--x+  - hive hive          0 2018-06-01 17:15 /user/hive/warehouse/gtp_dc.db
drwxrwx--x+  - hive hive          0 2018-06-04 08:32 /user/hive/warehouse/gtp_test.db
drwxrwx--x+  - hive hive          0 2018-05-31 15:33 /user/hive/warehouse/gtp_txt.db
drwxrwx--x+  - hive hive          0 2018-04-23 17:46 /user/hive/warehouse/kudu_raw.db
drwxrwx--x+  - hive hive          0 2018-04-23 17:58 /user/hive/warehouse/kudu_test.db
drwxrwx--x+  - hive hive          0 2018-04-26 17:37 /user/hive/warehouse/kudu_vip.db
drwxrwx--x+  - hive hive          0 2018-04-20 10:51 /user/hive/warehouse/user_info
  • 出现以上结果说明CDH服务集成Kerberos成功
  • 下面是介绍基于集成kerberos的CDH怎么安装Sentry
    https://www.jianshu.com/writer#/notebooks/23568743/notes/29144492/preview

接下来,我会图文介绍怎么安装配置Kerberos高可用

  • 首先明确一点,kerberos没有自带选举算法,账号数据需要自己手动写脚本定时从主节点dump到从节点

  • 方案实施前,假设集群kerberos满足以下条件
    1). 主kdc服务正常,kadmin正常
    2). root操作用户
    2). crontab调度工具可用正常

  • 备节点安装Kerberos服务

yum -y install krb5-server krb5-libs krb5-auth-dialog krb5-workstation
注意:此处只安装服务,暂不做相应配置及启动服务。
  • 主节点操作

  • 修改/etc/krb5.conf配置文件,在realms下增加从Kerberos的配置
vi /etc/krb5.conf
CDH安装Kerberos (包含主从配置)_第13张图片
kdc高可用.png
  • .将修改后的/etc/krb5.conf文件同步到集群的所有Kerberos客户端节点
scp /etc/krb5.conf root@slave1:/etc/
scp /etc/krb5.conf root@slave2:/etc/
scp /etc/krb5.conf root@slave3:/etc/
  • 重启主节点的kdc服务
service krb5kdc restart
service kadmin restart
  • 创建主从同步账号,并为账号生成keytab文件
kadmin.local
kadmin.local:  addprinc -randkey host/node1
kadmin.local:  addprinc -randkey host/slave1
kadmin.local:  
kadmin.local:  ktadd host/node1
kadmin.local:  ktadd host/slave1
随机生成秘钥创建同步账号,并使用ktadd命令生成账号的keytab文件,文件默认生成在/etc/krb5.keytab下,多个账号则在krb5.keytab基础上追加
  • 复制以下文件到从Kerberos服务器相应目录
scp /etc/krb5.conf root@slave1:/etc/
scp /etc/krb5.keytab root@slave1:/etc/
scp /var/kerberos/krb5kdc/.k5.W.COM root@slave1:/var/kerberos/krb5kdc/
scp /var/kerberos/krb5kdc/kadm5.acl root@slave1:/var/kerberos/krb5kdc/
scp /var/kerberos/krb5kdc/kdc.conf root@slave1: /var/kerberos/krb5kdc/
  • 从节点操作

  • 在/var/kerberos/krb5kdc/kpropd.acl配置文件中添加对应账户
[root@slave1 krb5kdc]# vi /var/kerberos/krb5kdc/kpropd.acl 
host/[email protected]
host/[email protected]
:wq
  • 从节点启动kpropd
kpropd –S

备节点上已经准备好数据传输

  • 主节点操作

kdb5_util dump /var/kerberos/krb5kdc/master.dump
导出成功后生成master.dump和master.dump.dump_ok两个文件。
  • 使用kprop命令将master.dump文件同步至从节点
kprop -f /var/kerberos/krb5kdc/master.dump -d -P 754 slave1
32768 bytes sent.
44358 bytes sent.
Database propagation to slave1: SUCCEEDED
  • 从节点操作

  • 查看dump过来的账号数据
[root@slave1 krb5kdc]# cd /var/kerberos/krb5kdc/
[root@slave1 krb5kdc]# ll
total 104
-rw------- 1 root root 44358 Jun 15 16:19 from_master
-rw------- 1 root root    22 Jun 14 12:10 kadm5.acl
-rw------- 1 root root   439 Jun 14 12:11 kdc.conf
-rw-r--r-- 1 root root    54 Jun 14 12:15 kpropd.acl
-rw------- 1 root root 40960 Jun 15 16:19 principal
-rw------- 1 root root  8192 Jun 15 16:19 principal.kadm5
-rw------- 1 root root     0 Jun 15 09:36 principal.kadm5.lock
-rw------- 1 root root     0 Jun 15 16:19 principal.ok
  • 启动从节点
service krb5kdc start
#不用启动kadmin
  • 这时候要是从节点KDC能正常启动,就没问题
  • KDC服务高可用验证

  • 停掉主KDC,停掉从KDC
service krb5kdc stop
#可用不停kadmin,不影响验证
  • 验证服务


    CDH安装Kerberos (包含主从配置)_第14张图片
    hdfs_挂.png
  • hdfs挂掉

  • 重启从节点KDC服务后, 验证 (service krb5kdc start)

  • 注意服务使用前, 账号要重新kinit一次


    CDH安装Kerberos (包含主从配置)_第15张图片
    重启从kdc效果.png

    hdfs服务正常

CDH安装Kerberos (包含主从配置)_第16张图片
impala节点.png

impala-shell服务正常

CDH安装Kerberos (包含主从配置)_第17张图片
impala-jdbc正常.png

impala-jdbc正常,注意krb5.conf文件要及时更新

  • 账号数据同步脚本

  • 考虑到主节点新增的principal需要同步到从节点上,需要一个脚本定时同步数据过去
vi /var/kerberos/krb5kdc/kprop_sync.sh
#!/bin/bash
source /etc/profile
echo "开始dump数据库文件"
DUMP=/var/kerberos/krb5kdc/master.dump
PORT=754
SLAVE="slave1"
TIMESTAMP=`date`
echo "Start at $TIMESTAMP"
kdb5_util dump $DUMP
kprop -f $DUMP -d -P $PORT $SLAVE
:wq
  • 定时任务
crontab -e
#每分钟同步一次
* * * * * sh /var/kerberos/krb5kdc/kprop_sync.sh > /var/kerberos/krb5kdc/lastupdate
:wq
  • 完成后,会发现日志每分钟都在更新


    CDH安装Kerberos (包含主从配置)_第18张图片
    日志更新文件.png
  • 到此,KDC主从配置完成!

你可能感兴趣的:(CDH安装Kerberos (包含主从配置))