Fayson的github: https://github.com/fayson/cdhproject
推荐关注微信公众号:“Hadoop实操”,ID:gh_c4c535955d0f,或者扫描文末二维码。
本文档描述Windows Server2008 R2(windows的内核版本是6.1,与windows 7相同)下安装Kerberos Client及FireFox下HTTP访问HDFS、Yarn、Hive、HBase等Hadoop服务的Web UI(如Namenode的50070,Yarn的8088)的过程。安装文档主要分为以下几步:
1.在Windows Server2008 R2 64位上安装Kerberos Client。
2.在Windows下使用kinit测试。
3.通过keytab在Windows下进行kinit操作。
4.配置FireFox。
5.验证服务是否正常访问。
这篇文档将着重介绍Winodws Server R2下安装及使用Kerberos,并基于以下假设:
1.CDH环境已搭建并正常运行
2.HDFS、Yarn、HBase、Hive等组件已安装部署
3.集群已完成Kerberos的配置,并正常使用
以下是对本次测试环境,但不是本操作手册的硬限制:
1.操作系统:Redhat7.2
2.CM版本:CM5.11.1
3.CDH版本:CDH5.11.1
4.采用ec2-user对集群进行部署
在Kerberos官网下载Kerberos安装包,点击下载,如下截图:
根据自己Windows操作系统下载不同的Client,32位或者64位。
1.将下载下来的客户端双击打开
2.点击下一步,如下图所示
3.选择“同意”,点击下一步
4.选择“Typical”进入下一步
5.点击“install”进行安装
点击“finish”安装完成
6.配置C:\ProgramData\MIT\Kerberos5\krb5.ini文件
将KDC Server服务器上/ect/krb5.conf文件中的部分内容,拷贝到krb5.ini文件中
注意:此处将标注部分拷贝至krb5.ini文件中,否则会导致MIT Kerberos无法正常启动,如果直接将krb5.conf文件更名为ini文件并替换krb5.ini文件会出现文件格式问题导致MIT Kerberos无法正常启动。
7.配置完成后,启动MIT Kerberos客户端,如下图所示:
1.KDC Server上通过admin创建一个用户
[ec2-user@ip-172-31-18-97 keytab]$ sudo kadmin.local
Authenticating as principal root/[email protected] with password.
kadmin.local: addprinc [email protected]
WARNING: no policy specified for [email protected]; defaulting to no policy
Enter password for principal "[email protected]":
Re-enter password for principal "[email protected]":
Principal "[email protected]" created.
测试正常
2.在Winodw端,通过MIT Kerberos客户Get Ticket
在如下列表中可以看到获取到的Ticket
3.销毁获取到的Ticket
选中列表中需要销毁的Ticket,点击Destroy Ticket
4.命令行下初始化
在客户端可以看到初始化成功的Ticket
5.命令行下kdestroy
客户端数据已destroy
1.在KDC Server创建一个ketab文件,使用上一步创建的[email protected]
[ec2-user@ip-172-31-18-97 keytab]$ sudo kadmin.local
Authenticating as principal root/[email protected] with password.
kadmin.local: xst -norandkey -k test.keytab [email protected]
kadmin.local: Principal test.keytab does not exist.
Entry for principal [email protected] with kvno 1, encryption type aes256-cts-hmac-sha1-96 added to keytab WRFILE:-k.
Entry for principal [email protected] with kvno 1, encryption type aes128-cts-hmac-sha1-96 added to keytab WRFILE:-k.
Entry for principal [email protected] with kvno 1, encryption type des3-cbc-sha1 added to keytab WRFILE:-k.
Entry for principal [email protected] with kvno 1, encryption type arcfour-hmac added to keytab WRFILE:-k.
Entry for principal [email protected] with kvno 1, encryption type camellia256-cts-cmac added to keytab WRFILE:-k.
Entry for principal [email protected] with kvno 1, encryption type camellia128-cts-cmac added to keytab WRFILE:-k.
Entry for principal [email protected] with kvno 1, encryption type des-hmac-sha1 added to keytab WRFILE:-k.
Entry for principal [email protected] with kvno 1, encryption type des-cbc-md5 added to keytab WRFILE:-k.
注意:在生成keytab文件时需要加参数”-norandkey”否则会导致,直接使用kinit [email protected]初始化时会提示密码错误。
生成成功
测试test.keytab文件
注意:在非root用户下需要将生成的keytab文件,权限设置到644以上,否则会初始化失败或者使用sudo权限初始化
2.将生成的test.keytab文件拷贝到Windows Server上,在CMD命令行进行初始化
初始化成功,在MIT Kerberos客户端显示
1.打开FireFox浏览器,在地址栏输入about:config
2.修改配置参数
network.negotiate-auth.trusted-uris = ip-172-31-18-97.ap-southeast-1.compute.internal,ip-172-31-19-209.ap-southeast-1.compute.internal
network.auth.use-sspi = false
注意:network.negotiate-auth.trusted-uris此参数主要配置需要访问服务的hostname,如果需要访问多个host则以“,”分割。
1.访问HDFS的50070端口
由于此时未将hdfs的ticket初始化所以不能正常访问,提示输入principal和密码
2.在CM节点的/var/run/cloudera-scm-agent目录下选择最新的xxx-hdfs-NAMENODE目录下的hdfs.keytab文件
3.测试hdfs.keytab是否正常
通过kadmin.loca命令列出所有hdfs的身份
[root@ip-172-31-18-97 577-hdfs-NAMENODE]# kadmin.local
Authenticating as principal hdfs/[email protected] with password.
kadmin.local: listprincs hdfs*
hdfs/[email protected]
hdfs/[email protected]
hdfs/[email protected]
hdfs/[email protected]
[root@ip-172-31-18-97 577-hdfs-NAMENODE]# kinit -kt hdfs.keytab hdfs/[email protected]
[root@ip-172-31-18-97 577-hdfs-NAMENODE]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: hdfs/[email protected]
Valid starting Expires Service principal
07/26/2017 11:23:08 07/27/2017 11:23:08 krbtgt/[email protected]
renew until 07/31/2017 11:23:08
注意:可以使用listprincs列出的hdfs身份进行初始化
4.将hdfs.keytab文件拷贝到Windows机器上,通过CMD命令进行初始化
5.再次通过FireFox浏览器访问HDFS服务,正常访问
6.访问Yarn资源管理服务是否能正常
查看作业详情时无法正常访问,由于该hostname信息未添加到FireFox的network.negotiate-auth.trusted-uris配置中
将该hostname添加到配置中
再次访问成功
1.将需要合并的keytab文件统一的放在同一个目录下
2.使用ktutil命令合并keytab文件,操作如下
[root@ip-172-31-18-97 keytab]# ktutil
ktutil: rkt hbase.keytab
ktutil: rkt hive.keytab
ktutil: rkt hdfs.keytab
ktutil: rkt yarn.keytab
ktutil: wkt test-new.keytab
ktutil:
在当前目录下生成test-new.keytab文件
注意:由于生成的keytab文件权限默认为600,如果非root用户则需要使用sudo执行ktutil命令或者提升keytab权限至644以上。
3.将生成的文件拷贝至Windows机器上,使用kinit进行初始化
使用hdfs凭证进行初始化
HDFS的服务访问成功
使用hive凭证进行初始化
访问HDFS服务成功
使用hbase凭证进行初始化
访问HDFS服务成功
使用yarn凭证进行初始化
访问HDFS服务成功
通过上述测试,无论使用hdfs/yarn/hbase/hive任何身份均可正常访问HDFS服务,因此可以得出Kerberos只做身份认证,未做页面的授权。
1.无法安装Kerberos,提示you must install a windows service错误
可能是由于Window版本问题,本文档选择的安装包本次不支持Windows Server2008(windows的内核版本是6.0,与windows vista相同),所以建议客户端机器选择Windows7或以上版本。
2.设置Kerberos Credential Cache File路径
配置Windows的环境变量
- KRB5\_CONFIG: Path for the kerberos inifile.()
- KRB5CCNAME: Path for the kerberoscredential cache file.
配置完环境变量后,需要重启机器使其环境变量生效。注意默认的“KRB5CCNAME”目录是在C:\temp.
3.在windows下的krb5.ini配置错误导致MIT Kerberos不能启动
如果直接将krb5.conf文件更名为ini文件并替换krb5.ini文件会出现文件格式问题导致MIT Kerberos无法正常启动,配置信息如下:
# Configuration snippets may be placed in this directory as well
[libdefaults]
default_realm = CLOUDERA.COM
dns_lookup_realm = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
# default_realm = EXAMPLE.COM
#default_ccache_name = KEYRING:persistent:%{uid}
[realms]
# EXAMPLE.COM = {
# kdc = kerberos.example.com
# admin_server = kerberos.example.com
# }
CLOUDERA.COM = {
kdc = ip-172-31-18-97.ap-southeast-1.compute.internal
admin_server = ip-172-31-18-97.ap-southeast-1.compute.internal
}
[domain_realm]
# .example.com = EXAMPLE.COM
# example.com = EXAMPLE.COM
.ip-172-31-18-97.ap-southeast-1.compute.internal = CLOUDERA.COM
ip-172-31-18-97.ap-southeast-1.compute.internal = CLOUDERA.COM
4.在创建后凭证后,使用该凭证创建keytab文件后,kinit该凭证报密码错误
在生成keytab文件时需要加参数”-norandkey”否则会导致直接使用kinit [email protected]直接初始化时会提示密码错误。
5.在通过浏览器访问Hadoop服务时部分功能能正常,部分功能不正常
需要确认访问的host地址是否加入network.negotiate-auth.trusted-uris中,此参数主要配置需要访问服务的hostname,如果需要访问多个host则以“,”分割。
6.不需要合并所有Hadoop相关的服务的keytab来访问不同的页面,成功初始化一个用户比如HDFS即可。
Configuring Kerberos Authentication for Windows
How to Configure Browsers for Kerberos Authentication
User authentication from Windows Workstation to HDP Realm Using MIT Kerberos Client (with Firefox)
MIT Kerberos Distribution
为天地立心,为生民立命,为往圣继绝学,为万世开太平。
推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。
原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操