zookeeper开启SASL,并且设置kafka如何连接

本文详细介绍了如何在单机和嵌入式环境中配置Zookeeper的SASL认证,包括修改配置文件、创建jaas文件、配置客户端环境变量以及重启服务。同时,讲解了如何设置Zookeeper的权限,包括节点ACL权限和sessionRequireClientSASLAuth环境变量。最后,提到了Kafka连接Zookeeper时的认证问题及其解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我的单机zookeeper安装目录:/usr/local/zookeeper

我的kafka安装目录:/usr/local/kafka

一、

配置zookeeper的配置文件

1、如果是嵌入式zookeeper(kafka自带的zookeeper)

修改/usr/local/kafka/config/zookeeper.properties文件,添加如下配置

authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
jaasLoginRenew=3600000
requireClientAuthScheme=sasl
zookeeper.sasl.client=true

2、如果是非嵌入式zookeeper(单机安装的zookeeper服务)

修改/usr/local/zookeeper/conf/zoo.cfg文件,添加和上面一样的配置

authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
jaasLoginRenew=3600000
requireClientAuthScheme=sasl
zookeeper.sasl.client=true

 二、创建jaas文件

在zookeeper的安装目录下的conf目录下创建zk_jaas.conf文件,并编辑内容

嵌入式zookeeper目录:/usr/local/kafka/config/zk_jaas.conf

单机zookeeper目录:/usr/local/zookeeper/conf/zk_jaas.conf

Server {
   org.apache.zookeeper.server.auth.DigestLoginModule required
   username="admin"
   password="admin"
   user_admin="admin";
};

Client {
       org.apache.zookeeper.server.auth.DigestLoginModule required
       username="admin"
       password="admin";
};

user_admin="admin"的含义是user_username="password",添加一个用户名为admin,密码为admin的认证用户,用户名和密码可以自己定义。

三、配置zookeeper客户端环境变量

因为如果要连接zookeeper的话是需要通过SASL认证的,所以需要配置环境变量,这里的环境变量主要是使用到了zk_jaas.conf文件中的Client配置,会在连接时使用用户名和密码。

1、嵌入式zookeeper:

修改/usr/local/kafka/bin/zookeeper-server-start.sh文件

添加配置后如下:

#...前面的内容省略
COMMAND=$1
case $COMMAND in
  -daemon)
     EXTRA_ARGS="-daemon "$EXTRA_ARGS
     shift
     ;;
 *)
     ;;
esac
export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/shakespeare/soft/zookeeper/apache-zookeeper-3.8.0-bin/conf/zk_jaas.conf ${KAFKAOPTS}" #这一行是要添加的内容
exec $base_dir/kafka-run-class.sh $EXTRA_ARGS org.apache.zookeeper.server.quorum.QuorumPeerMain "$@"

2、单机版zookeeper:

在/user/local/zookeeper/conf目录下创建一个java.env的文件,并且编辑添加如下内容

java.env:

export JVMFLAGS="-Djava.security.auth.login.config=/usr/local/zookeeper/conf/zk_jaas.conf ${JVMFLAGS}"

四、重启zookeeper服务

正常启动一般便无问题。

五、通过客户端连接文件连接zookeeper服务

1、嵌入式zookeeper:

/usr/local/kafka/bin/zookeeper-shell.sh {hostname}:{port}

例如:./zookeeper-shell.sh 192.168.2.2:2181

2、单机版zookeeper

/usr/local/zookeeper/bin/zkCli.sh -server {hostname}:{port}

例如:./zkCli.sh -server 192.168.2.2:2181

一般连接成功会有如下日志显示:

Welcome to ZooKeeper!
2022-09-02 11:42:06,369 [myid:192.168.2.2:2181] - INFO  [main-SendThread(192.168.2.2:2181):o.a.z.Login@317] - Client successfully logged in.
JLine support is enabled
2022-09-02 11:42:06,375 [myid:192.168.2.2:2181] - INFO  [main-SendThread(192.168.2.2:2181):o.a.z.u.SecurityUtils@70] - Client will use DIGEST-MD5 as SASL mechanism.
2022-09-02 11:42:06,543 [myid:192.168.2.2:2181] - INFO  [main-SendThread(192.168.2.2:2181):o.a.z.ClientCnxn$SendThread@1171] - Opening socket connection to server 192.168.2.2:2181.
2022-09-02 11:42:06,543 [myid:192.168.2.2:2181] - INFO  [main-SendThread(192.168.2.2:2181):o.a.z.ClientCnxn$SendThread@1173] - SASL config status: Will attempt to SASL-authenticate using Login Context section 'Client'
[zk: 192.168.2.2:2181(CONNECTING) 0] 2022-09-02 11:42:06,564 [myid:192.168.2.2:2181] - INFO  [main-SendThread(192.168.2.2:2181):o.a.z.ClientCnxn$SendThread@1005] - Socket connection established, initiating session, client: 192.168.2.2:56776, server: 192.168.2.2:2181
2022-09-02 11:42:06,585 [myid:192.168.2.2:2181] - INFO  [main-SendThread(192.168.2.2:2181):o.a.z.ClientCnxn$SendThread@1444] - Session establishment complete on server 192.168.2.2:2181, session id = 0x10003a960540000, negotiated timeout = 30000

WATCHER::

WatchedEvent state:SyncConnected type:None path:null

WATCHER::

WatchedEvent state:SaslAuthenticated type:None path:null

有较明显的Will attempt to SASL-authenticate using Login Context section 'Client'的提示

至此zookeeper的SASL配置完毕。

六、如何设置权限

zookeeper的sasl和普通的认证授权还不太一样

1、zookeeper默认允许匿名用户访问,如果不想让匿名用户访问某些则需要给节点单独设置ACL权限,配置完SASL后,连接zk客户端,然后可以给每个节点设置acl权限

setAcl /path sasl:admin:crdwa

2、zookeeper的3.6.0版本之后新增了一个环境变量sessionRequireClientSASLAuth

这个环境变量为true时要求客户端连接zk时必须进行SASL认证才可以连接成功,也就是说没有进行SASL认证的匿名用户就无法连接了,比第一步给每个节点设置ACL更方便一些,相当于在连接时设置了一个登录密码。

可以在单机版的zoo.cfg或嵌入式的zookeeper.properties里添加如下配置:

sessionRequireClientSASLAuth=true

7、kafka如何连接

配置完以上的认证后,启动kafka可能会报错。

原因:因为kafka依赖于zookeeper,要进行节点的访问,但是配置完后kafka也失去了权限,因此无法正常启动。

解决方法:在kafka安装目录下:/usr/local/kafka/bin/kafka-run-class.class目录下添加环境变量,如下:

#...前面的内容省略
base_dir=$(dirname $0)/..
KAFKA_OPTS="-Djava.security.auth.login.config=/usr/local/zookeeper/conf/zk_jaas.conf ${KAFKA_OPTS}" #要添加的行

if [ -z "$SCALA_VERSION" ]; then
  SCALA_VERSION=2.12.10
fi

然后重启kafka即可解决,原理和zk客户端连接原理一样,需要配置连接时的Client的用户名和密码,用户名和密码都在zk_jaas.conf文件里。

### 如何配置Kafka Manager使用SASLKafka建立连接 #### 修改环境变量以支持SASL认证 为了使Kafka Manager能够通过SASL协议访问受保护的Kafka集群,在启动脚本中需增加`export KAFKA_OPTS`语句来指定JAAS配置文件的位置。对于生产者客户端而言,此操作可以通过编辑位于`$KAFKA_HOME/bin/`路径下的`kafka-console-producer.sh`文件实现[^2];而对于通用设置,则可以直接在相关服务启动前定义该环境变量[^4]。 ```bash export KAFKA_OPTS="-Djava.security.auth.login.config=/path/to/kafka_client_jaas.conf" ``` 这里需要注意的是,应将`/path/to/kafka_client_jaas.conf`替换为实际存在的JAAS配置文件的具体位置。 #### 设置ZooKeeper主机列表 除了上述更改外,还需确保Kafka Manager知道如何找到对应的ZooKeeper实例以便管理Kafka集群。这一步骤涉及更新`application.conf`内的参数`kafka-manager.zkhosts`,其值应当指向运行中的Zookeeper服务器地址[^3]: ```properties kafka-manager.zkhosts="zk-host1:port,zk-host2:port,..." ``` 请根据实际情况调整具体的IP地址和端口号组合。 #### 配置JAAS登录模块 针对启用了SASL/PLAIN机制的情况,还需要进一步定制化JAAS配置文件的内容。具体来说,就是在其中加入如下所示的一段声明,用于指示Java应用程序采用何种方式完成身份验证过程[^5]: ```plaintext org.apache.kafka.common.security.plain.PlainLoginModule required \ username='your_username' \ password='your_password'; ``` 这里的用户名(`username`)以及密码(`password`)应该被替换成预先设定好的合法凭证信息。 #### 更新Kafka Manager应用配置 最后但同样重要的是,要让Kafka Manager识别并处理这些新的安全选项,可能需要对`application.conf`做额外的改动。特别是当涉及到特定版本或自定义部署场景时,查阅官方文档获取最准确的操作指南总是明智的选择。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值