加密配置
为确保通信安全,访问 Kafka前,请务必对 Kafka 进行加密配置。
下述操作可在集群中任一节点上进行。
一、配置 CA 证书
-
生成 CA 证书。
$ kubectl -n {Kafka 实例所在命名空间} get secret {Kafka 实例名称-cluster-ca-cert} -o jsonpath='{.data.ca\.crt}' | base64 -d > ca.crt
-
生成 CA 证书的密码。请记录此密码。
$ kubectl -n {Kafka 实例所在命名空间} get secret {Kafka 实例名称-cluster-ca-cert} -o jsonpath='{.data.ca\.password}' | base64 -d
-
将 CA 证书导入 user-truststore.jks 文件。
$ keytool -keystore user-truststore.jks -alias CARoot -import -file ca.crt Enter keystore password:CA 证书的密码 Re-enter new password:CA 证书的密码 Trust this certificate? [no]:y Certificate was added to keystore
二、配置用户证书(仅 TLS 认证方式)
-
生成用户证书。
$ kubectl -n {Kafka 实例所在命名空间} get secret {KafkaUser 实例名称} -o jsonpath='{.data.user\.p12}' | base64 -d > user.p12
-
生成用户证书的密码。请记录此密码。
$ kubectl -n {Kafka 实例所在命名空间} get secret {KafkaUser 实例名称} -o jsonpath='{.data.user\.password}' | base64 -d
-
将用户证书导入 user-keystore.jks 文件。
$ keytool -importkeystore -srckeystore user.p12 -destkeystore user-keystore.jks -deststoretype pkcs12 Importing keystore user.p12 to user-keystore.jks... Enter destination keystore password:用户证书的密码 Re-enter new password:用户证书的密码 Enter source keystore password:用户证书的密码 Entry for alias my-user successfully imported. Import command completed: 1 entries successfully imported, 0 entries failed or cancelled
三、配置客户端连接文件
client-ssl.properties (TLS 认证方式)
-
集群内访问
$ cat << EOF > client-ssl.properties security.protocol=SSL ssl.truststore.location=/home/kafka/user-truststore.jks ssl.truststore.password={CA 证书密码} ssl.keystore.location=/home/kafka/user-keystore.jks ssl.keystore.password={用户证书密码} ssl.key.password={用户证书密码} EOF
-
集群外访问
$ cat << EOF > client-ssl.properties security.protocol=SSL ssl.truststore.location={客户端所在路径}/user-truststore.jks ssl.truststore.password={CA 证书密码} ssl.endpoint.identification.algorithm= ssl.keystore.location=/root/ssl/user-keystore.jks ssl.keystore.password={用户证书密码} ssl.key.password={用户证书密码} EOF
client.properties (scram-sha-512 认证方式)
说明:KafkaUser 密码 可在容器平台的 配置 > 保密字典 页面,从名称与 KafkaUser 实例同名的保密字典中查得。
- 集群内访问
$ cat << EOF > client.properties
security.protocol=SSL
ssl.truststore.location=/home/kafka/user-truststore.jks
ssl.truststore.password={CA 证书的密码}
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \
username="{KafkaUser 名称}" \
password="{KafkaUser 密码}";
security.protocol=SASL_SSL
sasl.mechanism=SCRAM-SHA-512
EOF
- 集群外访问
$ cat << EOF > client.properties
security.protocol=SSL
ssl.truststore.location={客户端所在路径}/user-truststore.jks
ssl.truststore.password={CA 证书的密码}
ssl.endpoint.identification.algorithm=
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \
username="{KafkaUser 名称}" \
password="{KafkaUser 密码}";
security.protocol=SASL_SSL
sasl.mechanism=SCRAM-SHA-512
EOF
四、将文件拷贝至客户端
包括 user-keystore.jks、user-truststore.jks 和客户端连接文件。
集群内访问
$ kubectl cp ./{文件名称} {Kafka 实例所在命名空间}/{Pod 名称}:/home/kafka/ -c kafka
说明:Pod 名称 示例为 {Kafka 实例名称-kafka-0}
。
集群外访问
请确保 user-keystore.jks、user-truststore.jks 文件放置在客户端连接文件中提及的路径下。