zookeeper配置kerberos
前提:安装好zookeeper和kerberos
步骤:
1、创建kerberos用户
kadmin.local
addprinc zookeeper/es1 //es1主机名
2、生成zookeeper认证用户keytab
kadmin.local -q "xst -k /usr/local/zookeeper/keytab/zk.keytab zookeeper/es1@HADOOP.COM"
3、修改zookeeper下config目录的zoo.cfg,添加以下内容
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
jaasLoginRenew=3600000
kerberos.removeHostFromPrincipal=true
kerberos.removeRealmFromPrincipal=true
4、在zookeeper的conf目录创建zookeeper-jaas.conf文件
Server {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab="/usr/local/zookeeper/keytab/zk.keytab"
storeKey=true
useTicketCache=false
principal="zookeeper/es1@HADOOP.COM";
};
Client {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab="/usr/local/zookeeper/keytab/zk.keytab"
storeKey=true
useTicketCache=false
principal="zookeeper/es1@HADOOP.COM";
};
5、在zookeeper的conf目录创建java.env文件,添加以下内容
export JVMFLAGS="-Djava.security.auth.login.config=/usr/local/zookeeper/conf/zookeeper-jaas.conf"
6、启动zookeeper
bin/zkServer.sh start
7、验证kerberos
步骤4中,zookeeper-jaas.conf配置文件的Server是服务端认证配置,我们可以通过zookeeper
启动日志看出是否经过认证
zookeeper-jaas.conf配置文件的Client是客户端认证配置,我们可以使用命令进入客户端:
bin/zkCli.sh -server es1:2181
如果配置了Client,并且认证通过,日志可看出认证相关信息,否则认证失败,连接也不成功。
去掉Client配置,则不需要认证客户端即可连接zookeeper
zookeeper集群配置kerberks
后来在集群中配置了kerberos,集群和单机版的配置差不多,我就是在各个节点配置按单机配置一样的,遇到一些问题,记录下来:
1、集群中时钟需要保持一致,不能相差太大
2、客户端连接命令使用 zkCli.sh -server es1:2181,不能直接zkCli.sh
3、困扰我最久的一个问题就是下图这个错误,最终在服务端的日志找到些眉目,原因是有些jdk不支持256秘钥的AES加解密,解决方法就是更换jdk安全策略jar,在jre/lib/security的local_policy.jar和US_export_policy.jar
服务端错误日志:
Client failed to SASL authenticate: javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: Failure unspecified at GSS-API level (Mechanism level: Encryption type AES256 CTS mode with HMAC SHA1-96 is not supported/enabled)]
翻译:客户端无法SASL身份验证:javax.security.sasl.saslexception:gss initiate failed[由gssException引起:在gss-api级别未指定失败(机制级别:不支持/启用加密类型为aes256 cts模式和hmac sha1-96)]
有问题可直接私聊QQ:596031785