- 一、Kerberos搭建
- 环境:
- 搭建Kerberos Server
- 搭建Kerberos 客户端
- 二、ambari集成Kerberos
- 三、测试:
搭建ambari请参考我的上一篇博客: centos7安装Ambari 2.7.5 + HDP3.1.5 一、Kerberos搭建 环境:
- 首先时间一定要同步(上一篇博客中已同步)。
- 节点
server:hadoop101
client:hadoop102 hadoop103
kdc服务器包含三个配置文件:
# 集群上所有节点都有这个文件而且内容同步 /etc/krb5.conf # 主服务器上的kdc配置 /var/kerberos/krb5kdc/kdc.conf # 能够不直接访问 KDC 控制台而从 Kerberos 数据库添加和删除主体,需要添加配置 /var/kerberos/krb5kdc/kadm5.acl
以下操作均在hadoop101:
- 使用 yum 安装Kerberos Server的套件
yum install -y krb5-libs krb5-server krb5-workstation
- 配置 /etc/krb5.conf
vim /etc/krb5.conf
# Configuration snippets may be placed in this directory as well
includedir /etc/krb5.conf.d/
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
dns_lookup_kdc = false
dns_lookup_realm = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt
default_realm = KANG.COM
default_ccache_name = KEYRING:persistent:%{uid}
[realms]
KANG.COM = {
kdc = hadoop101.kang.com
admin_server = hadoop101.kang.com
}
[domain_realm]
.kang.com = KANG.COM
kang.com = KANG.COM
需要修改的地方:
名词讲解:
realm 域:表示一个公司或者一个组织。逻辑上的授权认证范围
比如,某个认证账户是属于某个域下的,跨域账户不通用域和FQDN的配置很像,使用大写,本次演示使用KANG.COM 来标记域
其中:
logging 块配置日志相关
libdefaults块配置默认的设置,包括ticket的生存周期等
realms 是域的配置,可以配置多个realm,本次演示只配置一个 即是 KANG.COM
domain_realm 是 Kerberos内的域 和 主机名的域的一个对应关系
.kang.com 类似 *.kang.com 表示如hadoop101.kang.com 等均是KANG.COM 这个realm
kang.com 表示 kang.com 这个主机名也是 KANG.COM 这个realm的一部分
- 配置 /var/kerberos/krb5kdc/kdc.conf
vim /var/kerberos/krb5kdc/kdc.conf
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[realms]
KANG.COM = {
#master_key_type = aes256-cts
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 camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
}
这里只需要修改
名词解释:
acl_file : Kerberos acl 的一些配置对应的文件
kerberos : admin账户的 keytab 本地路径
keytab : 登录凭证,有了这个相当于直接有了 ticket , 可以免密直接登录某个账户,所以这个文件很重要
- 配置 /var/kerberos/krb5kdc/kadm5.acl
vim /var/kerberos/krb5kdc/kadm5.acl
*/admin@KANG.COM *
其中 */admin 是Kerberos中的账户形式
最后的 * 表示 符合 */admin的账户拥有所有权限
这一步也就是配置了admin的规则 如 admin/ admin@KANG.COM 就拥有KANG.COM 域内的全部权限
- 初始化Kerberos的数据库
kdb5_util create -s -r KANG.COM
然后命令要求设置数据库master的密码,要求输入两次,输入 krb5kdc 即可
- 创建 KANG.COM 域内的管理员
#执行:kadmin.local 进入 kerberos 的 admin 命令行界面 [root@hadoop101 ~]# kadmin.local Authenticating as principal root/admin@KANG.COM with password. #输入如下内容,添加一个用户 kadmin.local: addprinc admin/admin@KANG.COM #查看所有用户 kadmin.local: listprincs K/M@KANG.COM admin/admin@KANG.COM kadmin/admin@KANG.COM kadmin/changepw@KANG.COM kadmin/hadoop101.kang.com@KANG.COM kiprop/hadoop101.kang.com@KANG.COM krbtgt/KANG.COM@KANG.COM kadmin.local: #删掉用户用delprinc
- 测试登录超级用户admin/admin@KANG.COM
[root@hadoop101 ~]# klist klist: Credentials cache keyring 'persistent:0:0' not found #登录用户admin/admin@KANG.COM [root@hadoop101 ~]# kinit admin/admin@KANG.COM Password for admin/admin@KANG.COM: [root@hadoop101 ~]# klist Ticket cache: KEYRING:persistent:0:0 Default principal: `admin/admin@KANG.COM` Valid starting Expires Service principal 11/11/2021 22:50:18 11/12/2021 22:50:18 krbtgt/KANG.COM@KANG.COM
- 重启Kerberos server的组件并设置开机自启
service krb5kdc restart service kadmin restart chkconfig krb5kdc on chkconfig kadmin on搭建Kerberos 客户端
- 在所有节点均执行:
yum -y install krb5-libs krb5-workstation
- 从server机器将 /etc/krb5.conf 复制到各个客户端同样的位置
[root@hadoop101 ~]# scp /etc/krb5.conf hadoop102:/etc/ krb5.conf 100% 647 745.0KB/s 00:00 [root@hadoop101 ~]# scp /etc/krb5.conf hadoop103:/etc/ krb5.conf 100% 647 887.3KB/s 00:00
- 测试登录admin
[root@hadoop102 ~]# kinit admin/admin@KANG.COM Password for admin/admin@KANG.COM: [root@hadoop102 ~]# klist Ticket cache: KEYRING:persistent:0:0 Default principal: admin/admin@KANG.COM Valid starting Expires Service principal 11/11/2021 22:56:45 11/12/2021 22:56:45 krbtgt/KANG.COM@KANG.COM
- 此时,客户端配置完成
确保已经安装好了KDC并且在所有集群都安装了JCE(但是有的文档说jdk1.6以上不用安装,所以我没有安装)。
-
打开并登陆ambari web。并在浏览器主页面选择Kerberos。
-
点击 “Enable Kerberos”进入安装向导。
-
选择正在使用的KDC类型,并确认已满足先决条件。
-
提供有关KDC和管理员帐户的信息
这里会有一个报错:Error message: Error occured during stack advisor command invocation: Cannot create /var/run/ambari-server/stack-recommendations
在说没有权限创建/var/run/ambari-server/stack-recommendations,解决办法是将目录/var/run/ambari-server/及子目录权限都赋予777权限:
chmod 777 -R /var/run/ambari-server/
先别着急进行下一步,展开Advanced krb5-conf部分并取消选中“Manage Kerberos client krb5.conf”选项
选中否则会在下一步报错:Error message: Failed to find a KDC for the specified realm - Couldn't open log file /var/log/kadmin
所以选中(即是手动管理rb5.conf)时,在/etc/krb5.conf中添加如下:
手动管理krb5.conf时,建议确保DNS不用于查找KDC和REALM条目。 依赖DNS可能会导致负面性能和功能影响。 要确保不使用DNS,请确保在配置的libdefaults部分中设置以下条目。 [libdefaults] dns_lookup_kdc = false dns_lookup_realm = false
-
进行安装
-
自定义Hadoop使用的Kerberos标识,然后继续对集群进行kerberize。
-
点击下一步,可以选择下载ambari自动创建的principals和keytabs。
-
停止服务
-
启用 Kerberos 向导
此时会报错,百度之后查询是因为权限的问题,所有在主节点hadoop101上执行如下
[root@hadoop101 ~]# echo "ambari ALL=(root) NOPASSWD:ALL" >> /etc/sudoers
重跑此步骤(点retry),即可可通过
- 启动和测试服务
等待一段时间后(有报错,是因为内存不够用):
未登录用户时:
#销毁票据
[root@hadoop101 ~]# kdestroy
#登录hbase shell
[root@hadoop101 ~]# hbase shell
#查看登录用户
hbase(main):002:0> whoami
root (auth:SIMPLE)
groups: root
#查看表
hbase(main):003:0> list
TABLE
`ERROR`: Can not send request because relogin is in progress.
For usage try 'help "list"'
Took 8.2048 seconds
#创建表
hbase(main):001:0> create 'tt','tinfo','twork'
#报错,因为没有认证
`ERROR`: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)
For usage try 'help "create"'
Took 8.6217 seconds
票据认证之后:
#验证票据 [root@hadoop101 ~]# kinit -kt /etc/security/keytabs/hbase.headless.keytab hbase-kk@KANG.COM #登录hbase shell [root@hadoop101 ~]# hbase shell #查看所有表 hbase(main):001:0> list TABLE Student teacher test-table 3 row(s) Took 0.5976 seconds => ["Student", "teacher", "test-table"] #创建表 hbase(main):002:0> create 'test','tinfo','twork' Created table test Took 1.3352 seconds => Hbase::Table - test #添加表内容信息 hbase(main):004:0> put 'test','0001','tinfo:name','kxq' Took 0.1613 seconds hbase(main):006:0> put 'test','0001','twork:add','beijing' Took 0.0158 seconds #查看表内容 hbase(main):008:0> scan 'test' ROW COLUMN+CELL 0001 column=tinfo:name, timestamp=1636703545576, value=kxq 0001 column=twork:add, timestamp=1636703585530, value=beijing 1 row(s) Took 0.0615 seconds #查看表内容 hbase(main):009:0> get 'test','0001' COLUMN CELL tinfo:name timestamp=1636703545576, value=kxq twork:add timestamp=1636703585530, value=beijing 1 row(s) Took 0.0356 seconds



