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的用戶密碼,就參考原鏈接