zookeeper和kafka的SASL認(rèn)證以及生產(chǎn)實(shí)踐

https://developer.aliyun.com/article/708449

zookeeper在生產(chǎn)環(huán)境中,如果不是只在內(nèi)網(wǎng)開放的話,就需要設(shè)置安全認(rèn)證,可以選擇SASL的安全認(rèn)證。以下是和kafka的聯(lián)合配置,如果不需要kafka可以去掉kafka相關(guān)的權(quán)限即可,以下基于zk3.5.5和kafka2.12進(jìn)行操作。
下面就是詳細(xì)的部署步驟:

zookeeper的安全認(rèn)證配置

1、導(dǎo)入kafka的相關(guān)jar

從kafka/lib目錄下復(fù)制以下幾個(gè)jar包到zookeeper的lib目錄下:

kafka-clients-2.3.0.jar
lz4-java-1.6.0.jar
slf4j-api-1.7.25.jar
slf4j-log4j12-1.7.25.jar
snappy-java-1.1.7.3.jar

2、zoo.cfg文件配置

添加如下配置:

authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
requireClientAuthScheme=sasl
jaasLoginRenew=3600000
3、編寫JAAS文件,zk_server_jaas.conf,放置在conf目錄下

這個(gè)文件定義需要鏈接到Zookeeper服務(wù)器的用戶名和密碼。JAAS配置節(jié)默認(rèn)為Server:

Server {
org.apache.kafka.common.security.plain.PlainLoginModule required 
    username="admin" 
    password="admin-2019" 
    user_kafka="kafka-2019" 
    user_producer="prod-2019";
};

這個(gè)文件中定義了兩個(gè)用戶,一個(gè)是kafka,一個(gè)是producer,這些用user_配置出來(lái)的用戶都可以提供給生產(chǎn)者程序和消費(fèi)者程序認(rèn)證使用。還有兩個(gè)屬性,username和password,其中username是配置Zookeeper節(jié)點(diǎn)之間內(nèi)部認(rèn)證的用戶名,password是對(duì)應(yīng)的密碼。

4、修改zkEnv.sh

在zkEnv.sh添加以下內(nèi)容,路徑按你直接的實(shí)際路徑來(lái)填寫:

export SERVER_JVMFLAGS=" -Djava.security.auth.login.config=/mnt/tools/zookeeper/apache-zookeeper-3.5.5/conf/zk_server_jaas.conf "

5、在各個(gè)節(jié)點(diǎn)分別執(zhí)行bin/zkServer.sh start啟動(dòng)zk。如果啟動(dòng)異常查看日志排查問(wèn)題。

kafka的安全認(rèn)證配置

zookeeper啟動(dòng)之后,就配置kafka,下面步驟的配置在所有節(jié)點(diǎn)上都相同。

1、在kafka的config目錄下,新建kafka_server_jaas.conf文件,內(nèi)容如下:
KafkaServer {
      org.apache.kafka.common.security.plain.PlainLoginModule required
    username="admin"
    password="admin-2019"
    user_admin="admin-2019"
    user_producer="prod-2019"
    user_consumer="cons-2019";
};

Client {
  org.apache.kafka.common.security.plain.PlainLoginModule required
    username="kafka"
    password="kafka-2019";
};

KafkaServer配置的是kafka的賬號(hào)和密碼,Client配置節(jié)主要配置了broker到Zookeeper的鏈接用戶名密碼,這里要和前面zookeeper配置中的zk_server_jaas.conf中user_kafka的賬號(hào)和密碼相同。

2、配置server.properties,同樣的在config目錄下(我沒有配置)
listeners=SASL_PLAINTEXT://0.0.0.0:9092
advertised.listeners=SASL_PLAINTEXT://node1:9092
security.inter.broker.protocol=SASL_PLAINTEXT  
sasl.enabled.mechanisms=PLAIN  
sasl.mechanism.inter.broker.protocol=PLAIN  
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
allow.everyone.if.no.acl.found=true

這里注意listeners配置項(xiàng),將主機(jī)名部分(本例主機(jī)名是node1)替換成當(dāng)前節(jié)點(diǎn)的主機(jī)名。其他在各個(gè)節(jié)點(diǎn)的配置一致。注意,allow.everyone.if.no.acl.found這個(gè)配置項(xiàng)默認(rèn)是false,若不配置成true,后續(xù)生產(chǎn)者、消費(fèi)者無(wú)法正常使用Kafka。

3、在server啟動(dòng)腳本JVM參數(shù),在bin目錄下的kafka-server-start.sh中,將
export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G -Djava.security.auth.login.config=/mnt/tools/kafka/kafka_2.12/config/kafka_server_jaas.conf"

4、配置其他節(jié)點(diǎn)

配置剩余的kafka broker節(jié)點(diǎn),注意server.properties的listeners配置項(xiàng)

5.啟動(dòng)各個(gè)節(jié)點(diǎn)的kafka服務(wù)端,在bin目錄下執(zhí)行

./kafka-server-start.sh ../config/server.properties

我只配置了zookeeper的,所以對(duì)微服務(wù)不影響,如果增加了kafka的用戶密碼,就參考原鏈接

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容