首页 > 解决方案 > 找不到预期的 Java 密钥库 (JKS) 文件!当使用 Kafka Bitnami helm chart 启用通过 TLS 加密时,它们是强制性的

问题描述

我正在为外部客户端部署启用了 TLS 的 kafka bitnami 图表以进行测试。

我按照说明进行操作,但是出现以下错误。我的配置有什么问题?

$ kubectl logs my-release-kafka-0
Couldn't find the expected Java Key Stores (JKS) files! They are mandatory when encryption via TLS is enabled.

秘密创造是这样的。

kubectl create secret generic kafka-jks --from-file=./kafka.truststore.jks --from-file=./kafka-0.keystore.jks

部署舵图如下。

helm install my-release \
  --set externalAccess.enabled=true \
  --set externalAccess.service.type=LoadBalancer \
  --set externalAccess.service.port=9094 \
  --set externalAccess.autoDiscovery.enabled=true \
  --set serviceAccount.create=true \
  --set rbac.create=true \
  --set auth.clientProtocol=tls \
  --set auth.jksSecret=kafka-jks \
  --set auth.jksPassword=<MY_JKS_PASSWORD> \
bitnami/kafka

根据 kubectl describe pod,它看起来已成功安装。

    Mounts:
      /bitnami/kafka from data (rw)
      /certs from kafka-certificates (ro)
      /opt/bitnami/kafka/logs from logs (rw)
      /scripts/setup.sh from scripts (rw,path="setup.sh")
      /shared from shared (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from my-release-kafka-token-bkqgt (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             False 
  ContainersReady   False 
  PodScheduled      True 
Volumes:
  data:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  data-my-release-kafka-0
    ReadOnly:   false
  scripts:
    Type:      ConfigMap (a volume populated by a ConfigMap)
    Name:      my-release-kafka-scripts
    Optional:  false
  shared:
    Type:       EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:     
    SizeLimit:  <unset>
  kafka-certificates:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  kafka-jks
    Optional:    false
             :

$ kubectl describe secret kafka-jks
Name:         kafka-jks
Namespace:    default
Labels:       <none>
Annotations:  <none>

Type:  Opaque

Data
====
kafka-0.keystore.jks:  5181 bytes
kafka.truststore.jks:  1346 bytes

我还测试了密钥库是否正常工作。它看起来工作。

$ keytool -keystore kafka-0.keystore.jks -export -alias localhost -rfc -file signed_exported.crt
Enter keystore password:  
Certificate stored in file <signed_exported.crt>

标签: sslapache-kafkabitnami

解决方案


github repo 的 README 页面有不一致的地方。参数auth.jksSecretauth.jksPassword已弃用,现在支持 JKS 和 PEM。以下是要使用的参数:

helm install my-release \
...
--set=auth.tls.existingSecret=kafka-jks \
--set=auth.tls.password=<MY_JKS_PASSWORD> \
...
bitnami/kafka

推荐阅读