From d15974639113e569d682a07f88613c15c3c6e06a Mon Sep 17 00:00:00 2001 From: zengqiao Date: Sat, 8 Oct 2022 17:00:08 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=8E=A5=E5=85=A5=E5=B8=A6Ke?= =?UTF-8?q?rberos=E8=AE=A4=E8=AF=81=E7=9A=84ZK=E9=9B=86=E7=BE=A4=E7=9A=84?= =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../support_kerberos_zk/need_modify_code.png} | Bin .../assets/support_kerberos_zk/success_1.png} | Bin .../assets/support_kerberos_zk/success_2.png} | Bin .../support_kerberos_zk/watch_user_acl.png} | Bin docs/dev_guide/支持Kerberos认证的ZK.md | 69 ++++++++++++++++++ docs/zk_kerberos/zk支持Kerberos配置文档.md | 47 ------------ 6 files changed, 69 insertions(+), 47 deletions(-) rename docs/{zk_kerberos/img.png => dev_guide/assets/support_kerberos_zk/need_modify_code.png} (100%) rename docs/{zk_kerberos/img_2.png => dev_guide/assets/support_kerberos_zk/success_1.png} (100%) rename docs/{zk_kerberos/img_3.png => dev_guide/assets/support_kerberos_zk/success_2.png} (100%) rename docs/{zk_kerberos/img_1.png => dev_guide/assets/support_kerberos_zk/watch_user_acl.png} (100%) create mode 100644 docs/dev_guide/支持Kerberos认证的ZK.md delete mode 100644 docs/zk_kerberos/zk支持Kerberos配置文档.md diff --git a/docs/zk_kerberos/img.png b/docs/dev_guide/assets/support_kerberos_zk/need_modify_code.png similarity index 100% rename from docs/zk_kerberos/img.png rename to docs/dev_guide/assets/support_kerberos_zk/need_modify_code.png diff --git a/docs/zk_kerberos/img_2.png b/docs/dev_guide/assets/support_kerberos_zk/success_1.png similarity index 100% rename from docs/zk_kerberos/img_2.png rename to docs/dev_guide/assets/support_kerberos_zk/success_1.png diff --git a/docs/zk_kerberos/img_3.png b/docs/dev_guide/assets/support_kerberos_zk/success_2.png similarity index 100% rename from docs/zk_kerberos/img_3.png rename to docs/dev_guide/assets/support_kerberos_zk/success_2.png diff --git a/docs/zk_kerberos/img_1.png b/docs/dev_guide/assets/support_kerberos_zk/watch_user_acl.png similarity index 100% rename from docs/zk_kerberos/img_1.png rename to docs/dev_guide/assets/support_kerberos_zk/watch_user_acl.png diff --git a/docs/dev_guide/支持Kerberos认证的ZK.md b/docs/dev_guide/支持Kerberos认证的ZK.md new file mode 100644 index 00000000..116643ba --- /dev/null +++ b/docs/dev_guide/支持Kerberos认证的ZK.md @@ -0,0 +1,69 @@ + +## 支持Kerberos认证的ZK + + +### 1、修改 KnowStreaming 代码 + +代码位置:`src/main/java/com/xiaojukeji/know/streaming/km/persistence/kafka/KafkaAdminZKClient.java` + +将 `createZKClient` 的 `135行 的 false 改为 true +![need_modify_code.png](assets/support_kerberos_zk/need_modify_code.png) + + +修改完后重新进行打包编译,打包编译见:[打包编译](https://github.com/didi/KnowStreaming/blob/master/docs/install_guide/%E6%BA%90%E7%A0%81%E7%BC%96%E8%AF%91%E6%89%93%E5%8C%85%E6%89%8B%E5%86%8C.md +) + + + +### 2、查看用户在ZK的ACL + +假设我们使用的用户是 `kafka` 这个用户。 + +- 1、查看 server.properties 的配置的 zookeeper.connect 的地址; +- 2、使用 `zkCli.sh -serve zookeeper.connect的地址` 登录到ZK页面; +- 3、ZK页面上,执行命令 `getAcl /kafka` 查看 `kafka` 用户的权限; + +此时,我们可以看到如下信息: +![watch_user_acl.png](assets/support_kerberos_zk/watch_user_acl.png) + +`kafka` 用户需要的权限是 `cdrwa`。如果用户没有 `cdrwa` 权限的话,需要创建用户并授权,授权命令为:`setAcl` + + +### 3、创建Kerberos的keytab并修改 KnowStreaming 主机 + +- 1、在 Kerberos 的域中创建 `kafka/_HOST` 的 `keytab`,并导出。例如:`kafka/dbs-kafka-test-8-53`; +- 2、导出 keytab 后上传到安装 KS 的机器的 `/etc/keytab` 下; +- 3、在 KS 机器上,执行 `kinit -kt zookeepe.keytab kafka/dbs-kafka-test-8-53` 看是否能进行 `Kerberos` 登录; +- 4、可以登录后,配置 `/opt/zookeeper.jaas` 文件,例子如下: +```sql +Client { + com.sun.security.auth.module.Krb5LoginModule required + useKeyTab=true + storeKey=false + serviceName="zookeeper" + keyTab="/etc/keytab/zookeeper.keytab" + principal="kafka/dbs-kafka-test-8-53@XXX.XXX.XXX"; +}; +``` +- 5、需要配置 `KDC-Server` 对 `KnowStreaming` 的机器开通防火墙,并在KS的机器 `/etc/host/` 配置 `kdc-server` 的 `hostname`。并将 `krb5.conf` 导入到 `/etc` 下; + + +### 4、修改 KnowStreaming 的配置 + +- 1、在 `/usr/local/KnowStreaming/KnowStreaming/bin/startup.sh` 中的47行的JAVA_OPT中追加如下设置 +```bash +-Dsun.security.krb5.debug=true -Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.auth.login.config=/opt/zookeeper.jaas +``` + +- 2、重启KS集群后再 start.out 中看到如下信息,则证明Kerberos配置成功; + +![success_1.png](assets/support_kerberos_zk/success_1.png) + +![success_2.png](assets/support_kerberos_zk/success_2.png) + + +### 5、补充说明 + +- 1、多Kafka集群如果用的是一样的Kerberos域的话,只需在每个`ZK`中给`kafka`用户配置`crdwa`权限即可,这样集群初始化的时候`zkclient`是都可以认证; +- 2、当前需要修改代码重新打包才可以支持,后续考虑通过页面支持Kerberos认证的ZK接入; +- 3、多个Kerberos域暂时未适配; \ No newline at end of file diff --git a/docs/zk_kerberos/zk支持Kerberos配置文档.md b/docs/zk_kerberos/zk支持Kerberos配置文档.md deleted file mode 100644 index ad70861c..00000000 --- a/docs/zk_kerberos/zk支持Kerberos配置文档.md +++ /dev/null @@ -1,47 +0,0 @@ -1、需要修改代码: -位置:src/main/java/com/xiaojukeji/know/streaming/km/persistence/kafka/KafkaAdminZKClient.java -将createZKClient的135行的false改为true -![img.png](img.png) -修改完之后就可以打包编译:打包编译见:参考2.3 后端单独打包 -https://github.com/didi/KnowStreaming/blob/master/docs/install_guide/%E6%BA%90%E7%A0%81%E7%BC%96%E8%AF%91%E6%89%93%E5%8C%85%E6%89%8B%E5%86%8C.md - -2、查看kafka的ZK的Acl -首先查看kafka的server.properties的配置的zookeeper.connect的连接,然后使用:zkCli.sh -serve xxxx登录到zk的页面,然后执行命令getAcl /kafka -![img_1.png](img_1.png) -此时就可以看到kafka在zk中的用户的权限,因为我们的集群在server.properties 配置了super.users=User:kafka ,以及zookeeper.set.acl=true ,默认的kafka的权限就是cdrwa。如果没有用户有cdrwa权限的话,需要zk创建用户并授权,授权命令:setAcl - -3、在Kerberos的域中创建 kafka/_HOST的keytab,并导出。例如:kafka/dbs-kafka-test-8-53 - -4、导出keytab后上传到安装KS的机器的/etc/keytab下。执行 kinit -kt zookeepe.keytab kafka/dbs-kafka-test-8-53 看是否能进行Kerberos登录 - -5、可以登录后,配置/opt/zookeeper.jass文件: -Client { - -com.sun.security.auth.module.Krb5LoginModule required - -useKeyTab=true - -storeKey=false - -serviceName="zookeeper" - -keyTab="/etc/keytab/zookeeper.keytab" - -principal="kafka/dbs-kafka-test-8-53@XXX.XXX.XXX"; - -}; - -6、需要配置KDC-Server对KS的机器开通防火墙,并在KS的机器/etc/host/ 配置 kdc-server的hostname。并将 krb5.conf 导入到/etc下 - -7、在/usr/local/KnowStreaming/KnowStreaming/bin/startup.sh中的47行的JAVA_OPT中追加如下设置: --Dsun.security.krb5.debug=true -Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.auth.login.config=/opt/zookeeper.jaas - -8、重启KS集群后再start.out中看到如下信息,证明Kerberos配置成功 -![img_3.png](img_3.png) -![img_2.png](img_2.png) - -9、对于多集群来说如果用的是一样的Kerberos域的话,只需在每个zk中给kafka用户配置crdwa权限即可,这样集群初始化的时候zkclient是都可以认证。 - -10、未改进: - 1、需要页面ZK的Kerberos配置化 - 2、多个Kerberos域暂时未适配。 \ No newline at end of file