【发布时间】:2021-12-02 12:54:21
【问题描述】:
我最近将ingress-nginx 升级到了 1.0.3 版。
因此,我从 ingress 中删除了 kubernetes.io/ingress.class 注释,并改为使用 .spec.ingressClassName。
我正在运行cert-manager-v1.4.0。
今天早上我收到一封电子邮件,说我的 Let's Encrypt 证书将在 10 天后过期。我试图弄清楚它出了什么问题 - 不能肯定这完全是由于 ingress-nginx 升级造成的。
我删除了CertificateRequest,看看它是否会自行修复。我收到了一个新的Ingress 挑战,但是:
-
挑战入口正确设置了
kubernetes.io/ingress.class注释,尽管我的入口改为.spec.ingressClassName- 不知道如何或为什么,但似乎应该没问题。 -
但是,入口控制器没有接收到挑战入口,它说:
ingress class annotation is not equal to the expected by Ingress Controller
我想它只需要.spec.ingressClassName,尽管我认为注释应该也可以工作。
所以我在挑战入口手动设置.spec.ingressClassName。入口控制器立即看到了它,其余过程运行顺利,我得到了一个新证书 - 耶。
在我看来,这种情况会再次发生,所以我需要知道如何:
-
说服
cert-manager使用.spec.ingressClassName而不是kubernetes.io/ingress.class创建挑战入口。也许这在 1.5 或 1.6 中已修复? -
说服
ingress-nginx尊重挑战入口的kubernetes.io/ingress.class注释。我不知道为什么这不起作用。
【问题讨论】:
-
你是从哪个版本升级 ingress 的?所以我安装在 GKE 集群
ingress-nginx1.0.4+cert-managerv.1.4.0上,我无法重现这种行为,一旦它由于不同的错误而被卡住,我看到我的challenge ingress没有 @987654343 @ 指定,但是在修复另一个错误后,证书已成功颁发。如果您可以再次复制此错误,请分享此链certificate->certificate request->order->challenge以查看卡住的位置和原因。 -
@moonkotte:我是从
0.48.1升级的。由于这是一个非生产系统,我不介意在cert-manager决定更新证书之前尝试重现此故障。如何手动触发续订过程以查看是否发生这种情况?删除Certificate?Secret? -
我也测试了
nginx的不同版本,从1.0.0开始,ingressClass已包含在内(我通过helm安装/升级/降级所有内容)。要重新启动整个过程,删除secret就足够了,这样证书将保持不变,新的certificateRequest和其他链将被创建 -
另外,在文档中找到了证书续订的正确方法 - check this out
-
@moonkotte - 很高兴知道。试了一下,它成功了。一定是升级失败之前的一些较旧的订单/挑战。我希望是最好的,这似乎有效。感谢您的帮助!
标签: kubernetes cert-manager ingress-nginx