我使用cert-manager
通过Let's Encrypt为Kubernetes上的应用程序生成TLS证书。
它正在运行,我可以在应用程序容器(在/etc/letsencrypt/
中看到“ ca.crt”,“ tls.crt”和“ tsl.key”。
但是“ ca.crt”为空,并且应用程序抱怨它(Error: Unable to load CA certificates. Check cafile "/etc/letsencrypt/ca.crt"
)。其他两个文件看起来像普通证书。
那是什么意思?
答案 0 :(得分:1)
使用cert-manager,您必须使用nginx-ingress
控制器,它将作为暴露点。
ingress nginx控制器将创建一个负载均衡器,您可以在其中设置应用程序tls证书。
cert-manager的pod内没有关于证书的任何内容。
因此使用cert-manager设置nginx入口,这将有助于管理tls证书。该证书将存储在kubernetes机密中。
有关更多详细信息,请遵循此指南:
答案 1 :(得分:1)
根据文档,cafile用于其他内容(受信任的根证书),在大多数系统上使用capath / etc / ssl / certs可能更正确。
如果您使用Windows操作系统,则可以遵循本指南: tls。 文章介绍了如何使Mosquitto和客户端使用TLS协议。
建立与Mosquitto代理的安全TLS连接需要密钥和证书文件。使用正确的设置来创建所有这些文件并不是一件容易的事,但是通过与MQTT代理进行通信的安全方式会有所收获。
如果要使用TLS证书,请使用“加密”服务生成。 您需要注意,当前版本的mosquitto在运行时永远不会更新侦听器设置,因此,当重新生成服务器证书时,将需要完全重新启动代理。
如果您使用DigitalOcean Kubernetes,请尝试遵循以下说明:ca-ninx,可以使用Cert-Manager和Ingress nginx控制器,它们将像certbot一样工作。
另一种解决方案是在您的计算机上本地创建证书,然后将其上传到kubernetes secret并在入口处使用secret。
答案 2 :(得分:1)
我注意到了这一点
$ kubectl describe certificate iot-mysmartliving -n mqtt
...
Status:
Conditions:
...
Message: Certificate issuance in progress. Temporary certificate issued.
和文档中的相关行:
他们解释说,生成两个现有证书是为了实现某种兼容性,但是它们在发行者完成其工作之前是无效的。
因此,这表明发行人的设置不正确。
编辑:是的。 DNS挑战失败了,提供帮助的调试行是
kubectl describe challenge --all-namespaces=true
更普遍地
kubectl describe clusterissuer,certificate,order,challenge --all-namespaces=true