基于Ambari禁用Kerberos
前面的文章介绍了《Kerberos原理–经典对话》、《Kerberos基本概念及原理汇总》、《基于ambari的Kerberos安装配置》、《Windows本地安装配置Kerberos客户端》,《Kerberos应用》,接下来再来聊聊基于Ambari如何禁用Kerberos,可不是在页面上点击禁用Kerberos那么顺利噢,有的时候服务会启动失败啊~
一、思考
使用Ambari启用Kerberos过程中,都做了哪些操作?
- 生成
Principal和Keytab - 修改集群内各服务的配置
- 将
Zookeeper上的某些服务的znode进行sasl权限控制。sasl是Kerberos特有的设置znode的一种权限
但是在Ambari页面上禁用Kerberos的过程中,有的Zookeeper的znode节点的权限依旧被sasl控制,所以禁用Kerberos后,有的服务起不来,或者有告警出现。
二、禁用Kerberos
在Ambari页面切换到Kerberos管理界面,点击禁用Kerberos按钮,如下图所示:

会弹出一个窗口,如下图所示:

我们点击”坚持继续“,Ambari就会自动解除Kerberos的控制,如下图所示:

过程中可能会出现“管理会话过期的提示”,如下图所示:

- 管理主体:填写你自定义创建的
Principal。例如:`admin/admin@EXAMPLE.COM,也可以省略@EXAMPLE.COM,可直接填写admin/admin`。 - 管理密码:填写自定义创建
Principal时的密码。
这样禁用Kerberos就已经算是成功了,不过返回服务面板,可能会出现告警。是的,因为Zookeeper中有的znode节点可能还在受sasl的权限控制,所以有的服务中的组件就会启动失败。
比如hiveserver2,就会报端口号10000监听不到的告警异常。
所以我们需要修改znode权限,将znode的权限全部修改为world:anyone:cdrwa模式。
三、修改znode权限
使用普通用户无法删除带有sasl的znode节点。我们可以启用Zookeeper超级管理员模式来删除znode节点。
1. md5加密超级管理员密码
设置Zookeeper超级管理员权限,首先需要对超级管理员的密码进行md5加密,现在设置超级管理员的密码是admin,那么密码需要怎么加密呢?
1 | export ZK_CLASSPATH=/etc/zookeeper/conf/:/usr/hdp/current/zookeeper-server/lib/*:/usr/hdp/current/zookeeper-server/* |
由输出结果可见,admin经过md5加密,变成了xQJmxLMiHGwaqBvst5y6rkB6HQs=
2. 编辑zkServer.sh
1 | vim /usr/hdp/2.6.4.0-91/zookeeper/bin/zkServer.sh |
定位到文件的第135行,将
1 | "-Dzookeeper.DigestAuthenticationProvider.superDigest=super:xQJmxLMiHGwaqBvst5y6rkB6HQs=" |
粘贴到指定位置,如下图所示:

进入到Ambari Web UI,重启该节点上的Zookeeper服务。
注:如果需要取消Zookeeper超级管理员,可将zkServer.sh文件中新添的内容删除,并重启该节点上的Zookeeper服务即可。
3. 删除znode节点或修改znode权限
首先确保该节点用户下无Principal缓存认证,可以执行kdestroy命令进行销毁,klist命令进行查看。
1 | /usr/hdp/2.6.4.0-91/zookeeper/bin/zkCli.sh |

我们可以使用getAcl命令来查看每个znode节点的权限。
由于随着服务个数的增多,znode的个数也会增多,所以还是建议根据服务的异常(启动失败或异常告警)来查看对应服务的znode节点的权限,如果是sasl权限的话,我们可以使用Zookeeper超级管理员的身份对znode做点事情了,好让服务变得正常。
这里我们有两种方式,这两种方式各有利弊:
方式一
可以使用setAcl /xxx world:anyone:cdrwa命令来重新设置znode权限,去除sasl模式。例如:修改hiveserver2的权限为cdrwa
1 | setAcl /hiveserver2 world:anyone:cdrwa |
弊端:设置znode权限并不影响该节点的子znode的权限。换句话说,设置一个节点的权限,并不影响该节点的子节点的权限。所以我们需要一个一个的去setAcl,会比较麻烦,但是这样不会丢失znode注册的信息数据。
方式二
简单粗暴的,将有sasl的znode节点全部删除,然后重启对应的服务,它会自动的在Zookeeper集群上注册znode信息。执行rmr <path>命令,例如:删除hiveserver2
1 | rmr /hiveserver2 |
有时候会提示由于子znode存在,该znode无法被删除。我们可以先删除子znode后,再删除父znode。
弊端:这样会导致一些信息的丢失。
很抱歉,目前还没有找到更好的处理方式。
值得一提的是,Zookeeper中的znode节点如果在启用Kerberos之前就已经被注册,那么在启用Kerberos之后就不会被重新注册,所以权限也不会被改变,依旧使用的是启用Kerberos之前的权限(cdrwa)。如果需要更改为sasl权限,可以将自己使用setAcl命令设置,或删除znode节点后,重启对应服务。
四、总结
使用Ambari禁用Kerberos,不像CDH产品一样,可以进行服务的Zookeeper初始化。在禁用Kerberos后,我们需要手动修改部分znode的权限,这样某些服务在禁用Kereros服务之后才可以正常使用。
当然我们也可以先停止所有服务,然后删除所有znode,然后再启动禁用kerberos流程。只不过这样有些信息会被丢失。比如ResourceManager的Applications历史数据会被清空;由于Solr的配置文件会在Zookeeper上储存,所以也会丢失。个中利弊,自个儿权衡吧😕
五、坑
除了Zookeeper上的znode节点权限不会被清空,有时候,只是有时候,在禁用Kerberos的过程中,有的服务的配置压根就没有将Kerberos相关的配置移除掉,所以肯定会导致服务在禁用kerberos后启动失败。
我的做法是:打开Ambari面板上对应服务的配置项,右上角对配置进行搜索,搜索关键词kerberos,将设置为kerberos的相关选项删除或按照Ambari提示进行更改,然后再重启该服务试试,应该就可以成功启动了。
点关注,不迷路
好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是人才。
白嫖不好,创作不易。各位的支持和认可,就是我创作的最大动力,我们下篇文章见!
如果本篇博客有任何错误,请批评指教,不胜感激 !
原文作者: create17
原文链接: https://841809077.github.io/2019/01/18/Kerberos/基于Ambari禁用Kerberos.html
版权声明: 转载请注明出处(码字不易,请保留作者署名及链接,谢谢配合!)




