来自证书管理器的空 "ca.crt" 文件

Emtpy "ca.crt" file from cert-manager

我使用 cert-manager 通过 Let's Encrypt 为我在 Kubernetes 上的应用程序生成 TLS 证书。

它是 运行,我可以在我的应用程序容器中看到 "ca.crt"、"tls.crt" 和 "tsl.key"(在 /etc/letsencrypt/ 中)。

但是"ca.crt"是空的,应用程序抱怨它(Error: Unable to load CA certificates. Check cafile "/etc/letsencrypt/ca.crt")。其他两个文件看起来像普通证书。

这是什么意思?

对于 cert-manager,您必须使用 nginx-ingress 控制器,它将用作曝光点。

入口 nginx 控制器将创建一个负载均衡器,您可以在那里设置您的应用程序 tls 证书。

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

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

请按照本指南了解更多详情:

https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nginx-ingress-with-cert-manager-on-digitalocean-kubernetes

根据文档,cafile 用于其他用途(受信任的根证书),在大多数系统上使用 capath /etc/ssl/certs 可能更正确。

如果您有 Windows 操作系统,则可以按照本指南进行操作: tls。 文章是关于如何让 Mosquitto 和客户端使用 TLS 协议。

与 Mosquitto 代理建立安全的 TLS 连接需要密钥和证书文件。使用正确的设置创建所有这些文件并不是最简单的事情,但可以通过安全的方式与 MQTT 代理通信。

如果您想使用使用 Let's Encrypt 服务生成的 TLS 证书。 您需要注意,当前版本的 mosquitto 在 运行 时从不更新侦听器设置,因此当您重新生成服务器证书时,您将需要完全重新启动代理。

如果您使用 DigitalOcean Kubernetes,请尝试遵循此说明:ca-ninx,您可以使用 Cert-Manager 和入口 nginx 控制器,它们将像 certbot 一样工作。

另一种解决方案是在您的机器上本地创建证书,然后将其上传到 kubernetes secret 并在 ingress 上使用 secret。

我注意到了这一点:

$ 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