cert-manager中的Emtpy“ ca.crt”文件

时间:2019-07-04 19:33:19

标签: ssl kubernetes tls1.2 cert-manager

我使用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")。其他两个文件看起来像普通证书。

那是什么意思?

3 个答案:

答案 0 :(得分:1)

使用cert-manager,您必须使用nginx-ingress控制器,它将作为暴露点。

ingress nginx控制器将创建一个负载均衡器,您可以在其中设置应用程序tls证书。

cert-manager的pod内没有关于证书的任何内容。

因此使用cert-manager设置nginx入口,这将有助于管理tls证书。该证书将存储在kubernetes机密中。

有关更多详细信息,请遵循此指南:

  

https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nginx-ingress-with-cert-manager-on-digitalocean-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.

和文档中的相关行:

https://docs.cert-manager.io/en/latest/tasks/issuing-certificates/index.html?highlight=gce#temporary-certificates-whilst-issuing

他们解释说,生成两个现有证书是为了实现某种兼容性,但是它们在发行者完成其工作之前是无效的。

因此,这表明发行人的设置不正确。


编辑:是的。 DNS挑战失败了,提供帮助的调试行是

kubectl describe challenge --all-namespaces=true

更普遍地

kubectl describe clusterissuer,certificate,order,challenge --all-namespaces=true