kafka开启kerberos

一、基本环境准备

  1. 创建票据创建Kerberos主体(Principal):

使用kadmin.local或kadmin命令为Zookeeper和Kafka服务创建Kerberos主体。例如:

注意有几台机器创建几个

kadmin.local -q "addprinc -randkey zookeeper/dshieldcdh01@HADOOP139.COM"

kadmin.local -q "addprinc -randkey zookeeper/dshieldcdh02@HADOOP139.COM"

kadmin.local -q "addprinc -randkey zookeeper/dshieldcdh03@HADOOP139.COM"

kadmin.local -q "addprinc -randkey kafka/dshieldcdh01@HADOOP139.COM"

kadmin.local -q "addprinc -randkey kafka/dshieldcdh02@HADOOP139.COM"

kadmin.local -q "addprinc -randkey kafka/dshieldcdh03@HADOOP139.COM"

  1. 验证主体是否创建成功

kadmin.local -q "listprincs"

root@dshieldcdh02 \~# kadmin.local -q "listprincs"

Authenticating as principal root/admin@HADOOP139.COM with password.

K/M@HADOOP139.COM

host/dshieldcdh01@HADOOP139.COM

host/dshieldcdh02@HADOOP139.COM

kadmin/admin@HADOOP139.COM

kadmin/changepw@HADOOP139.COM

kadmin/dshieldcdh02@HADOOP139.COM

kafka/dshieldcdh01@HADOOP139.COM

kafka/dshieldcdh02@HADOOP139.COM

kafka/dshieldcdh03@HADOOP139.COM

kiprop/dshieldcdh02@HADOOP139.COM

krbtgt/HADOOP139.COM@HADOOP139.COM

root/admin@HADOOP139.COM

zookeeper/dshieldcdh01@HADOOP139.COM

zookeeper/dshieldcdh02@HADOOP139.COM

zookeeper/dshieldcdh03@HADOOP139.COM

  1. 创建keytab

mkdir /etc/security/keytabs/

kadmin.local -q "xst -k /etc/security/keytabs/kafka.keytab kafka/dshieldcdh01@HADOOP139.COM"

kadmin.local -q "xst -k /etc/security/keytabs/kafka.keytab kafka/dshieldcdh02@HADOOP139.COM"

kadmin.local -q "xst -k /etc/security/keytabs/kafka.keytab kafka/dshieldcdh03@HADOOP139.COM"

  1. 验证KeyTab文件内容:

klist -kt /etc/security/keytabs/zookeeper.keytab

klist -kt /etc/security/keytabs/kafka.keytab

kinit -kt /etc/security/keytabs/zookeeper.keytab zookeeper/dshieldcdh02@HADOOP139.COM

  1. 将keytab文件拷贝到其他两天zookeeper上,需要将keytab文件拷贝过去才可以使用

scp /etc/security/keytabs/*keytab root@dshieldcdh01:/etc/security/keytabs/

scp /etc/security/keytabs/*keytab root@dshieldcdh03:/etc/security/keytabs/

  1. 在其他机器上验证keytab文件可用

kinit -kt /etc/security/keytabs/zookeeper.keytab zookeeper/dshieldcdh01@HADOOP139.COM

二、Zookeeper配置Kerberos

  1. 配置Zookeeper的JAAS文件:

在Zookeeper的配置目录下创建JAAS配置文件(如zookeeper_jaas.conf),内容如下:

java
Server {

com.sun.security.auth.module.Krb5LoginModule required

useKeyTab=true

storeKey=true

keyTab="/etc/security/keytabs/zookeeper.keytab"

principal="zookeeper/dshieldcdh01@HADOOP139.COM"

useTicketCache=false;

};

Client {

com.sun.security.auth.module.Krb5LoginModule required

useKeyTab=true

storeKey=true

keyTab="/etc/security/keytabs/zookeeper.keytab"

principal="zookeeper/dshieldcdh01@HADOOP139.COM"

useTicketCache=false;

};

注意修改principal和keyTab路径以匹配实际环境。

在Zookeeper的启动脚本中添加JVM参数,指定JAAS配置文件的路径。

配置zookeeper的kerberos验证,切换到配置文件目录下cd conf,添加zoo.cfg配置文件,cp zoo_sample.cfg zoo.cfg打开zoo.cfg配置文件,添加配置,修改Zookeeper的配置文件cat zoo.cfg 启用SASL认证,并指定认证提供者。
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider

jaasLoginRenew=3600000

kerberos.removeHostFromPrincipal=true

kerberos.removeRealmFromPrincipal=true

export JVMFLAGS="-Djava.security.auth.login.config= /usr/local/apache-zookeeper-3.6.4/conf/zookeeper_jaas.conf"

scp /usr/local/apache-zookeeper-3.6.4/conf/zookeeper_jaas.conf root@dshieldcdh02:/usr/local/apache-zookeeper-3.6.4/conf

scp /usr/local/apache-zookeeper-3.6.4/conf/zookeeper_jaas.conf root@dshieldcdh03:/usr/local/apache-zookeeper-3.6.4/conf

root@dshieldcdh03 \~# cat /usr/local/apache-zookeeper-3.6.4/conf/zookeeper_jaas.conf
Server {

com.sun.security.auth.module.Krb5LoginModule required

useKeyTab=true

storeKey=true

useTicketCache=false

keyTab="/etc/security/keytabs/zookeeper.keytab"

principal="zookeeper/dshieldcdh03@HADOOP139.COM";

};

cat /usr/local/apache-zookeeper-3.6.4/conf/zookeeper_client_jaas.conf

Client {

com.sun.security.auth.module.Krb5LoginModule required

useKeyTab=true

storeKey=true

useTicketCache=false

keyTab="/usr/local/apacje-zookeeper-3.6.4/conf/zk.service.keytab"

principal="zookeeper/dshieldcdh03@HADOOP139.COM";

};

三、Kafka配置Kerberos

将kafka用户的keytab文件拷贝到其他服务器上

scp /etc/security/keytabs/kafka.keytab root@ dshieldcdh02:/etc/security/keytabs/kafka.keytab

配置Kafka的JAAS文件:

在Kafka的配置目录下创建JAAS配置文件(如kafka_client_jaas.conf),内容如下:

kafka_client_jaas.conf

KafkaServer {

com.sun.security.auth.module.Krb5LoginModule required

useKeyTab=true

keyTab="/etc/security/keytabs/kafka.keytab"

storeKey=true

useTicketCache=false

serviceName="kafka"

principal="kafka/dshieldcdh01@HADOOP139.COM";

};

KafkaClient {

com.sun.security.auth.module.Krb5LoginModule required

useKeyTab=true

keyTab="/etc/security/keytabs/kafka.keytab"

storeKey=true

useTicketCache=false

serviceName="kafka"

principal="kafka/dshieldcdh01@HADOOP139.COM";

};

Client {

com.sun.security.auth.module.Krb5LoginModule required

useKeyTab=true

keyTab="/etc/security/keytabs/zookeeper.keytab"

storeKey=true

useTicketCache=false

serviceName="zookeeper"

principal=" zookeeper/dshieldcdh01@HADOOP139.COM";

};

com.sun.security.jgss.krb5.initiate {

com.sun.security.auth.module.Krb5LoginModule required

renewTGT=false

doNotPrompt=true

useKeyTab=true

keyTab="/etc/security/keytabs/kafka.keytab"

storeKey=true

useTicketCache=false

serviceName="kafka"

principal="kafka/dshieldcdh01@HADOOP139.COM";

};

kafka_server_jaas.conf

KafkaServer {

com.sun.security.auth.module.Krb5LoginModule required

useKeyTab=true

keyTab="/etc/security/keytabs/kafka.keytab"

storeKey=true

useTicketCache=false

serviceName="kafka"

principal="kafka/dshieldcdh01@HADOOP139.COM";

};

KafkaClient {

com.sun.security.auth.module.Krb5LoginModule required

useKeyTab=true

keyTab="/etc/security/keytabs/kafka.keytab"

storeKey=true

useTicketCache=false

serviceName="kafka"

principal="kafka/dshieldcdh01@HADOOP139.COM";

};

Client {

com.sun.security.auth.module.Krb5LoginModule required

useKeyTab=true

keyTab="/etc/security/keytabs/zookeeper.keytab"

storeKey=true

useTicketCache=false

serviceName="zookeeper"

principal=" zookeeper/dshieldcdh01@HADOOP139.COM";

};

com.sun.security.jgss.krb5.initiate {

com.sun.security.auth.module.Krb5LoginModule required

renewTGT=false

doNotPrompt=true

useKeyTab=true

keyTab="/etc/security/keytabs/kafka.keytab"

storeKey=true

useTicketCache=false

serviceName="kafka"

principal="kafka/dshieldcdh01@HADOOP139.COM";

};

注意修改principal、keyTab路径和serviceName以匹配实际环境。

修改Kafka的启动脚本:

在Kafka的启动脚本中添加JVM参数,指定JAAS配置文件的路径。

cat kafka_client_jaas.conf

kafkaClient {

com.sun.security.auth.module.Krb5LoginModule required

useKeyTab=true

storeKey=true

serviceName=kafka

keyTab="/etc/security/keytabs/kafka.keytab"

principal="kafka/dshieldcdh01@HADOOP139.COM";

};

cat server.properties

broker.id=1

hostname=dshieldcdh01

listerners=SASL_PLAINTEXT://dshieldcdh01:9092

security.inter.broker.protocol=SASL_PLAINTEXT

sasl.mechanism.inter.broker.protocol=GSSAPI

sasl.enabled.mechanisms= GSSAPI

sasl.kerberos.service.name=kaka

zookeeper.connect=dshieldcdh01:2181, dshieldcdh02:2181, dshieldcdh03:2181

zookeeper.set.acl=true

zookeeper.connection.timeout.ms=18000

kafka@dshieldcdh01 config$ pwd

/usr/local/kafka/config

kafka@dshieldcdh01 config$ scp kafka_jaas.conf dshieldcdh02:/usr/local/kafka/config

scp kafka_jaas.conf dshieldcdh03:/usr/local/kafka/config

#kerberos

listeners=SASL_PLAINTEXT://ambarim2:9092

advertised.listeners=SASL_PLAINTEXT://ambarim2:9092

security.inter.broker.protocol=SASL_PLAINTEXT

sasl.mechanism.inter.broker.protocol=GSSAPI

principal.to.local.class=kafka.security.auth.KerberosPrincipalToLocal

isasl.enabled.mechanisms=GSSAPI

zookeeper.connect=dshieldcdh01:2181,dshieldcdh02:2181,dshieldcdh03:2181

相关推荐
无奈笑天下11 小时前
银河麒麟上nproc命令教程详解
linux·运维·服务器
威嵌神州15 小时前
嵌入式排故实录:高并发下串口数据“超时丢包”的根因剖析与架构优化
运维·服务器·嵌入式硬件·缓存
Decay__15 小时前
SQLServer 索引与 SQL 优化 —— 聚集索引、非聚集索引、覆盖索引、碎片维护与执行计划
运维·数据库·sql·mysql·架构
java_logo16 小时前
Docker 部署 DeepSeek Harness(moelin):轻松搭建带登录的本地 AI Agent 平台
运维·docker·容器·ai agent·deepseek·harness·轩辕镜像
打工仔折腾 AI21 小时前
Changedetection.io 网页变动监控:Docker 部署、通知配置与公网暴露实践
运维·人工智能·后端·python·docker·容器·性能优化
无奈笑天下21 小时前
银河麒麟上lsblk命令教程详解
linux·运维·服务器·数据库
fengkai454521 小时前
Prometheus+K8s弹性伸缩综合项目
运维·kubernetes·k8s·prometheus·hpa·vpa
分布式存储与RustFS1 天前
镜像仓库的层别只堆本地盘:用 RustFS 给 Harbor 当 S3 后端
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
雪落漂泊1 天前
Liunux进程(七):程序控制篇(中)
linux·运维·windows
分布式存储与RustFS1 天前
工作流脚本和依赖 JAR 散在各节点本地盘:用 DolphinScheduler 资源中心接到 RustFS
运维·云原生·开源·对象存储·分布式存储·s3·性能基准