我们使用的是sasl_tls
机制和bitnami/kafka头盔图。我们使用加密和证书管理器来颁发证书。从“让我们加密生成的证书”中创建一个秘密,并将该秘密传递给舵图中的existingSecrets
参数。现在,当我使用KafkaJS库连接到Kafka时,使用ssl: true
会抛出一个错误:
KafkaJSConnectionError: Connection error: unable to verify the first certificate
详细步骤/如何生成:
externalAccess.enabled: true
externalAccess.autoDiscovery.enabled: true
externalAccess.service.type: LoadBalancer
externalAccess.service.ports.external: 9094
externalAccess.service.domain: ""
xyz.com
tls.crt
和tls.key
kubectl create secret generic kafka-tls-0 --from-file=tls.crt=kafka-0.tls.crt --from-file=tls.key=kafka-0.tls.key
tls.type: pem
tls.pemChainIncluded: true
tls.existingSecrets: ["kafka-tls-0"]
ip:9094
或xyz.com:9094
格式将值传递给brokers
参数,也传递了ssl:true
。我的问题:
后续问题:
发布于 2022-11-21 18:07:17
可能有多种原因。我将试着列出要使这一方法奏效所需的内容:
几年前,让我们对交换的根CA进行加密,如果您有一个旧版本的node.js,可能就是它。
您应该检查链中有哪些证书。您可以使用OpenSSL CLI:openssl x509 -in cert.pem -text -noout
来完成这一任务。
关于Bitnami Kafka图表的具体建议:我们在图表中包含的脚本如何处理PEM键和证书链方面遇到了困难,在处理PEM时,它有时不会提取整个链,然后Kafka只会看到部分链。
我会尝试使用JKS格式(Java密钥库和信任库),看看这是否有帮助。您将使用您的密钥创建一个JKS密钥存储库,并创建一个具有链中所有证书的信任存储库。
关于证书的自动更新,您应该能够通过证书管理器来实现这一点,但是这可能会对Bitnami Kafka图表产生挑战,因为它不适合定期更新证书,并且不太适合来自CA的短期证书,比如“让我们加密”。通常,我们使用像NGINX这样的负载平衡器加密,通常有一个Kubernetes入口控制器处理注意到新证书和重新加载负载均衡器。
在您的示例中,由于您试图生成TLS证书供后端服务使用,以便与Kafka通信,您可能会更容易地使用用于服务间通信(让我们不加密)的内容,比如SPIRE和匹配的Kubernetes操作符。
尖顶,它是一个CNCF项目,负责验证工作负载标识并以密码方式表示它们--在您的示例中,它是卡夫卡服务器的TLS键区。它处理诸如更新证书之类的事情。
为了使the易于在Kubernetes中使用,将其与Otterize积分算子一起部署,后者使用SPIRE生成TLS凭据,将它们保存在Kubernetes的机密中,并负责刷新证书需要由SPIRE更新的机密。您可以在集群中部署它,而不是用您希望调用的保存证书的秘密来注释豆荚,并且可以使用其他注释来配置诸如格式是PEM还是JKS或TTL是什么之类的内容。这组配置应该可以使它更容易地与Bitnami一起工作。我们成功地将它与Bitnami图表一起使用,如果只需要TLS,则在配置all的部分停止甚至有一个关于如何使用Bitnami的教程。。
因为您还提到使用SASL,所以您可能希望完全用证书替换用户名/密码,然后切换到mTLS。如果您还希望将Kafka添加到混合中,并且只允许在某些工作负载下访问某些主题/操作,则还可以部署Otterize意图算子。它允许您声明工作负载需要访问哪些主题,并与SPIRE和内置的Kafka ACL一起工作,这样工作负载只能访问它们声明的内容。
https://stackoverflow.com/questions/74519426
复制相似问题