Kafka开启kerberos安装与验证(1)

1、环境准备

1、java version “1.8.0_131”
2、zookeeper-3.4.12
3、kafka-2.12-2.3.1
4、基于本人的另外两篇博客已安装kerberos与Zookeeper
kafka的安装建议通过百度一下相关教程很多,本文就不在论述。

2、kafkaServer端开启kerberos

2.1 添加认证主体

[root@henghe-01 data] kadmin.local
kadmin.local>addprinc -randkey kafka/henghe-01@HADOOP.COM
kadmin.local>addprinc -randkey kafka/henghe-02@HADOOP.COM
kadmin.local>addprinc -randkey kafka/henghe-03@HADOOP.COM
kadmin.local:  list_principals
K/M@HADOOP.COM
admin/admin@HADOOP.COM
kadmin/admin@HADOOP.COM
kadmin/changepw@HADOOP.COM
kadmin/henghe-01@HADOOP.COM
kafka/henghe-01@HADOOP.COM
kafka/henghe-02@HADOOP.COM
kafka/henghe-03@HADOOP.COM
kiprop/henghe-01@HADOOP.COM
krbtgt/HADOOP.COM@HADOOP.COM
test/test@HADOOP.COM
zookeeper/henghe-01@HADOOP.COM
zookeeper/henghe-02@HADOOP.COM
zookeeper/henghe-03@HADOOP.COM
zookeeper@HADOOP.COM
kadmin.local>xst -k kafka.keytab kafka/henghe-01@HADOOP.COM
kadmin.local>xst -k kafka.keytab kafka/henghe-02@HADOOP.COM
kadmin.local>xst -k kafka.keytab kafka/henghe-03@HADOOP.COM
kadmin.local>exit

操作成功后将导出的kafka.keytab通过scp命令拷贝到对应的kafka安装目录下的config目录下。

scp kafka.keytab root@henghe-01:"$KAFKA_HOME/config"
scp kafka.keytab root@henghe-02:"$KAFKA_HOME/config"
scp kafka.keytab root@henghe-03:"$KAFKA_HOME/config"

2.2 配置kakfa_server_jaas.conf文件

在$KAFKA_HOME/config创建kakfa_server_jaas.conf文件。principal的认证主体针对不同的节点使用对应的节点配置信息。具体的配置信息如下所示:

# henghe-01
KafkaServer {
    com.sun.security.auth.module.Krb5LoginModule required
    useKeyTab=true
    storeKey=true
    keyTab="/data/kafka/config/kafka.keytab"
    principal="kafka/henghe-01@HADOOP.COM";  
};
Client {
    com.sun.security.auth.module.Krb5LoginModule required
    useKeyTab=true
    storeKey=true
    keyTab="/data/kafka/config/kafka.keytab"
  principal="kafka/henghe-01@HADOOP.COM";
};

KafkaClient {
    com.sun.security.auth.module.Krb5LoginModule required
    useKeyTab=true
    storeKey=true
    keyTab="/data/kafka/config/kafka.keytab"
  principal="kafka/henghe-01@HADOOP.COM";
};

# henghe-02
KafkaServer {
    com.sun.security.auth.module.Krb5LoginModule required
    useKeyTab=true
    storeKey=true
    keyTab="/data/kafka/config/kafka.keytab"
    principal="kafka/henghe-02@HADOOP.COM";  
};
Client {
    com.sun.security.auth.module.Krb5LoginModule required
    useKeyTab=true
    storeKey=true
    keyTab="/data/kafka/config/kafka.keytab"
  principal="kafka/henghe-02@HADOOP.COM";
};

KafkaClient {
    com.sun.security.auth.module.Krb5LoginModule required
    useKeyTab=true
    storeKey=true
    keyTab="/data/kafka/config/kafka.keytab"
  principal="kafka/henghe-02@HADOOP.COM";
};

# henghe-03
KafkaServer {
    com.sun.security.auth.module.Krb5LoginModule required
    useKeyTab=true
    storeKey=true
    keyTab="/data/kafka/config/kafka.keytab"
    principal="kafka/henghe-03@HADOOP.COM";  
};
Client {
    com.sun.security.auth.module.Krb5LoginModule required
    useKeyTab=true
    storeKey=true
    keyTab="/data/kafka/config/kafka.keytab"
  principal="kafka/henghe-03@HADOOP.COM";
};

KafkaClient {
    com.sun.security.auth.module.Krb5LoginModule required
    useKeyTab=true
    storeKey=true
    keyTab="/data/kafka/config/kafka.keytab"
  principal="kafka/henghe-03@HADOOP.COM";
};
  1. KakfaServer配置代表了kafka集群中Server彼此间通信所使用的通信认证方式。
  2. Client配置代表了kafka集群中Server与Zookeeper通信时的认证方式。
  3. KafkaClient配置代表了命令行客户端与kafka集群通信时的认证方式。

2.3 修改kafka-run-class.sh文件

为了其他一些服务的正常使用需要调用Kakfa服务的相应功能,而当Kafka与Kerbers集成后,该调用过程同样需要增加一步认证过程,而该过程的实现是将Kafka服务作为sever端,其他需要调用Kafka的服务作为client端,因此需要引入一个JVM机制。
在部署的kakfa集群中$KAFKA_HOME/bin/kafka-run-class.sh文件。在kafka-run-class.sh文件中找到KAKFA_JVM_PERFORMANCE_OPTS,并增加两个JVM参数:

-Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.auth.login.config=/data/kafka/config/kafka_server_jaas.conf

2.4 创建生产者端配置文件console-producer.properties

security.protocol=SASL_PLAINTEXT
sasl.kerberos.service.name=kafka
sasl.mechanism=GSSAPI

2.5 创建消费者端配置文件console-consumer.properties

security.protocol=SASL_PLAINTEXT
sasl.kerberos.service.name=kafka
sasl.mechanism=GSSAPI

2.6 修改Kafka Server配置文件

开启Kerberos服务,需要在配置文件中开启相应的配置项。修改server.properties文件,确保配置项的值如下:

listeners=SASL_PLAINTEXT://henghe-01:9092
security.inter.broker.protocol = SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol = GSSAPI
sasl.enabled.mechanisms = GSSAPI
sasl.kerberos.service.name = kafka

2.7 启动Kafka Server

启动kafka之前确保Zookeeper集群已启动。
启动指令:

$KAFKA_HOME/bin/kafka-server-start.sh -daemon start $KAFKA_HOME/config/server.properties

观察启动日志可以发现,权限认证已成功通过并登陆。
在这里插入图片描述
在这里插入图片描述

3、测试kerbers权限认证

3.1通过命令后创建测试主题测试权限

# 创建kafka topic
bin/kafka-topics.sh --create --zookeeper henghe-02:2181 --replication-factor 3 --partitions 5 --topic test-topic

3.2通过命令后创建测试主题测试权限

# 启动生产者并发送数据
bin/kafka-console-producer.sh --topic test-topic1 --broker-list henghe-02:9092 --producer.config config/console-producer.properties
#启动消费者消费发送的数据
bin/kafka-console-consumer.sh --bootstrap-server henghe-01:9092 --topic test-topic1 --from-beginning --consumer.config config/console-comsumer.properties

通过测试相关认证成功并生成与消费数据
在这里插入图片描述
在运行时不携带相关参数权限认证参数时将无法连接到集群。
在这里插入图片描述

3.3 java编程测试权限

kafka开启Kerberos安全认证Java编程生成者与消费组示例

扩展阅读

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
Kafka 开启Kerberos 认证后,连接 ZooKeeper 需要进行以下步骤: 1. 配置 Kafka 服务器以使用 Kerberos 认证。在 Kafka 配置文件(通常是 `server.properties`)中,添加以下属性: ``` listeners=SASL_PLAINTEXT://<Kafka_server_host>:<Kafka_server_port> security.inter.broker.protocol=SASL_PLAINTEXT sasl.mechanism.inter.broker.protocol=GSSAPI sasl.kerberos.service.name=kafka ``` 2. 配置 ZooKeeper 服务器以支持 Kerberos 认证。在 ZooKeeper 配置文件(通常是 `zoo.cfg`)中,添加以下属性: ``` authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider requireClientAuthScheme=sasl jaasLoginRenew=3600000 jaasLoginRefresh=3600000 ``` 3. 生成 Kafka 和 ZooKeeper 的 Kerberos Keytab 文件。Keytab 文件包含了用于服务认证的凭证信息。可以使用 `kadmin` 命令行工具生成 Keytab 文件。 4. 在 Kafka 服务器上配置 Kerberos 客户端。将 Kafka 和 ZooKeeper 相关的 Keytab 文件分发到 Kafka 服务器上,并配置 Kerberos 客户端以使用这些文件。 5. 启动 Kafka 服务器和 ZooKeeper 服务器。确保 Kafka 服务器和 ZooKeeper 服务器都已正确配置并启动。 6. 使用 Kafka 客户端连接到 ZooKeeper。在代码中,使用适当的配置和认证信息创建 Kafka 客户端,并指定 ZooKeeper 的连接字符串,例如: ```java Properties props = new Properties(); props.put("bootstrap.servers", "<Kafka_server_host>:<Kafka_server_port>"); props.put("security.protocol", "SASL_PLAINTEXT"); props.put("sasl.kerberos.service.name", "kafka"); props.put("group.id", "<consumer_group_id>"); KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props); consumer.subscribe(Arrays.asList("<topic_name>")); while (true) { ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100)); // 处理消费记录 } ``` 请注意,上述步骤是一个基本的指南,实际操作中可能会有其他配置和设置需求。详细的步骤和配置可以参考 Kafka 和 ZooKeeper 的官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值