idea zookeeper插件使用_zookeeper认证机制及dubbo、kafka集成、zooviewer/idea zk插件配置...

本文详细介绍了ZooKeeper的ACL(访问控制列表)机制,包括CREATE、READ、WRITE、DELETE、ADMIN五种权限以及world、auth、digest和ip四种认证方式。通过示例展示了如何设置和管理节点的权限。此外,文章还探讨了在dubbo、kafka以及IDEA zookeeper插件中如何配置和解决认证问题,提供了修改CuratorZookeeperClient的代码示例。
摘要由CSDN通过智能技术生成

ZooKeeper的ACL机制

zookeeper通过ACL机制控制znode节点的访问权限。

首先介绍下znode的5种操作权限:

CREATE、READ、WRITE、DELETE、ADMIN 也就是 增、删、改、查、管理权限,这5种权限简写为crwda(即:每个单词的首字符缩写)

注:这5种权限中,delete是指对子节点的删除权限,其它4种权限指对自身节点的操作权限

身份的认证有4种方式:

world:默认方式,相当于全世界都能访问

auth:代表已经认证通过的用户(cli中可以通过addauth digest user:pwd 来添加当前上下文中的授权用户)

digest:即用户名:密码这种方式认证,这也是业务系统中最常用的,下面解决dubbo认证用的就是这种模式。

ip:使用Ip地址认证

我们在zk的客户端可以进行节点权限的查看和设置。

[zk: localhost:2181(CONNECTED) 3] create /test data

Created/test

[zk: localhost:2181(CONNECTED) 2] getAcl /test‘world,‘anyone

: cdrwa

[zk: localhost:2181(CONNECTED) 3] addauth digest user:password

[zk: localhost:2181(CONNECTED) 4] setAcl /test auth:user:password:cdrwa

[zk: localhost:2181(CONNECTED) 5] getAcl /test‘digest,‘user:V28q/NynI4JI3Rk54h0r8O5kMug=: cdrwa

从上述操作可以看出,zk新创建的znode默认访问方式为world。我们通过addauth和setAcl给/test节点设置访问权限为digest,操作权限为cdrwa,用户名为user,密码为password。

另启zk客户端,执行ls /test,发现当前用户已经无法访问/test节点,提示信息为“Authentication is not valid”。解决方法就是addauth添加认证用户了,并且必须使用用户名和密码明文进行认证。

[zk: localhost:2181(CONNECTED) 0] ls /test

Authentication is not valid :/test

[zk: localhost:2181(CONNECTED) 4] addauth digest user:password

[zk: localhost:2181(CONNECTED) 5] ls /test

[]

[zk: localhost:2181(CONNECTED) 6] create /test/leaf data

Created/test/leaf

[zk: localhost:2181(CONNECTED) 7] getAcl /test/leaf‘world,‘anyone

: cdrwa

addauth添加digest认证用户user后,即可正常访问/test节点了。

另外,还有一点需要注意,znode的ACL是相互独立的。也就是说,任意不同节点可以用不同的acl列表,互不影响,并且ACL是不可被继承的。

我们在/test下创建leaf节点,可发现,leaf节点的认证方式为world,即任何用户都有访问权限。

分布式服务Dubbo+Zookeeper安全认证:KeeperErrorCode = NoAuth解决

网上搜了一圈,只有https://www.jianshu.com/p/02ada8d1858a和https://www.zhihu.com/question/45720203/answer/140188334提到了相关可行的解决方法。因为我们使用的是内部集成后的dubbo(maven-shade-plugin二次打包的LZ也经常这么干),且已经走的是curator而非zkclient,所以仅仅将dubbo.registry.client改成curator不解决问题。

publicCuratorZookeeperClient(URL url) {super(url);

Builder builder= CuratorFrameworkFactory.builder().connectString(url.getBackupAddress()).retryPolicy(new RetryNTimes(2147483647, 1000)).connectionTimeoutMs(url.getParameter("timeout", 5000)).sessionTimeoutMs(url.getParameter("session", 60000));

String authority=url.getAuthority();if (authority != null && authority.length() > 0) {

builder= builder.authorization("digest", authority.getBytes());

}this.client =builder.build();this.client.getConnectionStateListenable().addListener(newConnectionStateListener() {public voidstateChanged(CuratorFramework client, ConnectionState state) {if (state ==ConnectionState.LOST) {

CuratorZookeeperClient.this.stateChanged(0);

}else if (state ==ConnectionState.CONNECTED) {

CuratorZookeeperClient.this.stateChanged(1);

}else if (state ==ConnectionState.RECONNECTED) {

CuratorZookeeperClient.this.stateChanged(2);

}

}

});this.client.start();

}

所以简单的方法就是自己修改CuratorZookeeperClient,将zk的认证用户名和密码注入进来,如下:

publicCuratorZookeeperClient(URL url) {super(url);

String username= null;

String password= null;//加载配置文件

try{

ResourceBundle bundle= ResourceBundle.getBundle("application");

username= bundle.getString("rpc.registry.username");

password= bundle.getString("rpc.registry.password");

}catch(Exception e) {//NOP

}if (username != null && password != null) {

url=url.setUsername(username).setPassword(password);

}

Builder builder= CuratorFrameworkFactory.builder().connectString(url.getBackupAddress()).retryPolicy(new RetryNTimes(2147483647, 1000)).connectionTimeoutMs(url.getParameter("timeout", 5000)).sessionTimeoutMs(url.getParameter("session", 60000));

String authority=url.getAuthority();if (authority != null && authority.length() > 0) {

builder= builder.authorization("digest", authority.getBytes());

}this.client =builder.build();this.client.getConnectionStateListenable().addListener(newConnectionStateListener() {public voidstateChanged(CuratorFramework client, ConnectionState state) {if (state ==ConnectionState.LOST) {

CuratorZookeeperClient.this.stateChanged(0);

}else if (state ==ConnectionState.CONNECTED) {

CuratorZookeeperClient.this.stateChanged(1);

}else if (state ==ConnectionState.RECONNECTED) {

CuratorZookeeperClient.this.stateChanged(2);

}

}

});this.client.start();

}

dubbo认证是解决了,还有kafka、日常管理用的zooviewer和idea集成的zk插件呢。。。。所以继续kafka。。

kafka连接zookeeper认证

这一部分主要参考了https://www.orchome.com/500。

客户端工具

zooinspector,3.4.14之后的版本都支持认证,可以下载使用。

原文:https://www.cnblogs.com/zhjh256/p/11679639.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值