概要描述
在TDH集群中,Kerberos是KRB5LDAP中的一部分,但Kerberos本身作为一个网络认证协议也有自己的一套管理系统。Kerberos数据库中存放了所有principal和密码/keytab信息,您可以通过kadmin或者kadmin.local命令行来进入Kerberos管理系统来管理其中的信息,比如添加和删除用户、修改用户密码,生成keytab文件等等。
在 TDH 5.x 版本中,Kerberos 有了页面化的操作方式(guardian-server),所以在TDH 5.x 之后 kadmin 和 kadmin.local 已经无法使用了。
但是在配置非 TDH 平台与 TDH平台的 Kerberos 互信时需要登录到 Kerberos 管理系统来添加 princpal,所以本文介绍一种在没有kadmin、kadmin.local 命令行工具的TDH 集群上如何登录 Kerberos 管理系统来管理其中的信息;
本案例环境:TDH 5.2.2、guardian-5.2.2
详细说明
虽然在 TDH 5.x 版本中,Kerberos 不在提供 kadmin 和 kadmin.local 命令行工具,但是原来的 kadmin 功能还在,您只需要在 guardian-apacheds 的 container 中准备一下 kadmin 和 kadmin.local 命令需要的 jar 包(jar 包在 hdfs 的 namenode 中的/usr/lib/guardian-utils/lib/下),以及调用 kadmin 功能的一个命令脚本即可。
- kadmin 和 kadmin.local 功能jar包所在的路径:
$ kubectl get pods -owide |grep namenode hadoop-hdfs-namenode-hdfs1-3303342286-68vxs 2/2 Running 61 24d 172.22.22.2 tdh-02 hadoop-hdfs-namenode-hdfs1-3303342286-6h57j 2/2 Running 63 24d 172.22.22.1 tdh-01 $ kubectl exec -ti hadoop-hdfs-namenode-hdfs1-3303342286-68vxs bash Defaulting container name to hadoop-hdfs-namenode-hdfs1. Use 'kubectl describe pod/hadoop-hdfs-namenode-hdfs1-3303342286-68vxs' to see all of the containers in this pod. $ cd /usr/lib/guardian-utils/lib/ $ pwd /usr/lib/guardian-utils/lib
- kadmin 功能命令脚本
#!/usr/bin/env bash TRANSWARP_UTILS=/etc/default/transwarp-utils APACHEDS=/etc/guardian JAVA=java [ -e "$TRANSWARP_UTILS" ] && source ${TRANSWARP_UTILS} if [ x"$JAVA_HOME" != x"" ]; then JAVA=$JAVA_HOME/bin/java fi $JAVA -Dguardian.root.logger='INFO, RFA' -cp $APACHEDS/conf:/usr/lib/guardian/lib/* io.transwarp.guardian.utils.KadminShell "$@"
操作步骤
- 将 kadmin 和 kadmin.local 功能需要的 jar 包 cp至 guardian-apacheds 的 container 中
-1. 将 hdfs 的 namenode 中的jar 包以及整个目录 cp至宿主机共享路径;
-2. 然后将该 jar 包以及整个目录,scp 至 guardian-apacheds 所在的服务器;
-3. 将 guardian-apacheds 上的 jar 包以及整个目录 cp 至 guardian-apacheds 的 container 共享路径; - 编写并修改kadmin 功能的命令脚本
-1. 进入 guardian-apacheds 的 container 中;
-2. 编写 kadmin.local 脚本并修改脚本内容中的 apacheds conf 的路径为存放 jar 的路径;
准备所需 jar 包
- 将 hdfs 的 namenode 中的jar 包以及整个目录 cp至宿主机共享路径;
$ cp -r /usr/lib/guardian-utils/lib/ /var/log/hdfs1/
- 然后将该 jar 包以及整个目录,scp 至 guardian-apacheds 所在的服务器;
- 将 guardian-apacheds 上的 jar 包以及整个目录 cp 至 guardian-apacheds 的 container 共享路径
$ cp -r /var/log/hdfs1/lib/ /var/log/guardian/
编写 kadmin.local 脚本
进入 guardian-apacheds 的 container 中编写 kadmin.local 脚本;
$ kubectl get pods -owide|grep guardian-apacheds
guardian-apacheds-guardian-1512033472-4x9dl 1/1 Running 3 6h 172.22.22.2 tdh-02
guardian-apacheds-guardian-1512033472-pwk41 1/1 Running 0 6h 172.22.22.1 tdh-01
$ kubectl exec -ti guardian-apacheds-guardian-1512033472-4x9dl bash
编写 kadmin.local 脚本并修改脚本内容中的 apacheds conf 的路径为存放 jar 的路径;
需要将脚本最后一行的 $APACHEDS/conf:/usr/lib/guardian/lib/*
修改成存放 jar 包的路径;
本案例修改为 $APACHEDS/conf:/var/log/guardian/lib/
,并给该脚本文件赋予可执行权限chmod +x /bin/kadmin.local
;
$ vi /bin/kadmin.local
#!/usr/bin/env bash
TRANSWARP_UTILS=/etc/default/transwarp-utils
APACHEDS=/etc/guardian
JAVA=java
[ -e "$TRANSWARP_UTILS" ] && source ${TRANSWARP_UTILS}
if [ x"$JAVA_HOME" != x"" ]; then
JAVA=$JAVA_HOME/bin/java
fi
$JAVA -Dguardian.root.logger='INFO, RFA' -cp $APACHEDS/conf:/var/log/guardian/lib/* io.transwarp.guardian.utils.KadminShell "$@"
$ chmod +x /bin/kadmin.local
执行 kadmin.local 验证
kadmin.local -p uid=admin,ou=system -w $ds_pw -q "listprincs"
其中:
- -p参数表示连接ApacheDS服务的用户,这里是固定写法,如果不指定默认是就是你安装Guardian时的admin用户;
- -w参数($ds_pw)表示连接ApacheDS服务的密码(就是你安装Guardian时的OpenLDAP Manager密码,默认是admin,并非Guardian admin密码,查看方法:grep ‘^admin.pw’ /etc/guardian/conf/fortress.properties);
- -q参数表示需要执行的操作,用引号引起来,具体支持哪些操作及其对应用法可以kadmin.local -h查看;
$ kadmin.local -w 123456 -q "listprincs"
admin@TDH
tdt/tdh-02@TDH
tdt/tdh-01@TDH
hive/tdh-01@TDH
kafka/tdh-01@TDH
zookeeper@TDH
hdfs@TDH
httpfs@TDH
hdfs/tdh-01@TDH
krbtgt/TDH@TDH
yarn@TDH
mapred@TDH