无法在 Kubernetes 上完成 letsencrypt 的 HTTP 质询

Can't complete HTTP challenge for letsencrypt on Kubernetes

我有一个 k3s 集群,我正在尝试将其配置为从 let's encrypt 获取 SSL 证书。我遵循了很多指南,我认为我真的很接近管理它,但问题是 Kubernetes 中的 Challenge 对象报告了这个错误:

Waiting for HTTP-01 challenge propagation: failed to perform self check GET request 'http://devstore.XXXXXXX.com/.well-known/acme-challenge/kVVHaQaaGU7kbYqnt8v7LZGaQvWs54OHEe2WwI_MOgk': Get "http://devstore.XXXXXXX.com/.well-known/acme-challenge/kVVHaQaaGU7kbYqnt8v7LZGaQvWs54OHEe2WwI_MOgk": dial tcp: lookup devstore.XXXXXXX.com on 10.43.0.10:53: no such host

证书管理员似乎在某种程度上试图在内部解析我的 public DNS 名称,但未能成功,因此挑战无效。你能帮我解决这个问题吗,我用谷歌搜索了但找不到解决方案...

谢谢

您想要证书的域的 DNS 记录可能不存在。 如果是,并且您正在使用水平分割 DNS 配置(劫持本地网络中的 .com 域),请确保它指向您的 public ip(例如您的家庭网关)

[编辑]

此外,您必须弄清楚 LE 在网络中访问您的集群,因此将端口转发 80/443 到您集群的 IP。

你可以摆脱它,因为 k3s 在负载均衡器中默认为 cluster traffic policy

这可能是由多种不同的原因造成的。如果您发现这是一个暂时性问题(或者可能是您之前错误配置了 coredns),您可能需要仔细检查您的 coredns 配置映射(在 kube-system 命名空间中)。

例如您可以 remove/reduce 缓存,或指向不同的 DNS 名称服务器。

Here's a description 的问题,切换到 Google DNS + 缓存删除有助于解决问题。

谢谢 DarthHTTP,我终于成功了!问题是,正如我在评论中提到的,防火墙没有使用来自私有网络端的 public IP 正确路由 HTTP 请求。我解决了配置内部 DNS 服务器的问题,该服务器使用 K3S 节点的私有 IP 地址解析名称,并将该服务器用作 K3S 节点的 DNS 服务器。最终我的 HTTP 网络应用获得了一个有效的 let's encrypt 证书!