启用重写目标时,无法访问 cert-manager HTTP01 证书质询

ani*_*ine 6 kubernetes google-kubernetes-engine cert-manager ingress-nginx

我们在 GKE 中使用 ingress-nginx 控制器公开了十几个服务。

为了在同一域名上正确路由流量,我们需要使用重写目标规则。

该服务自 2019 年推出以来一直运行良好,没有任何维护,直到最近;当 cert-manager 突然停止更新 Let's Encrypt 证书时,我们通过暂时从入口定义中删除“tls”部分来“解决”这个问题,强制我们的客户端使用 http 版本。

之后,我们删除了证书管理器的所有痕迹,尝试从头开始设置它。

现在,证书管理器正在创建证书签名请求,生成 acme http 求解器 pod 并将其添加到入口,但是在访问其 url 时,我可以看到它返回空响应,而不是预期的令牌。

这与重写目标注释有关,它扰乱了 acme 挑战的路由。最让我困惑的是,这以前是有效的。(它是由前雇员设立的)

不幸的是,禁用 rewrite-target 不是一个选项,因为它会阻止路由正常工作。

使用 dns01 不起作用,因为我们的 ISP 不支持以编程方式更改 DNS 记录。

有没有办法在不禁用重写目标的情况下完成这项工作?

PS 以下是 Github 上报道的一些类似案例:

他们都没有帮助。

这是我的 ClusterIssuer 的定义

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    # The ACME server URL
    server: https://acme-v02.api.letsencrypt.org/directory
    # Email address used for ACME registration
    email: mail@domain.com
    # Name of a secret used to store the ACME account private key
    privateKeySecretRef:
      name: letsencrypt-prod
    # Enable the HTTP-01 challenge provider
    solvers:
    - http01:
        ingress:
            class: nginx
Run Code Online (Sandbox Code Playgroud)

Har*_*var 4

请分享您正在使用的集群发行者或问题。

入口类

如果指定了ingressClasscert-manager字段,将创建新的Ingress资源,以便将流量路由到 acmesolver负责响应ACME 质询验证请求的 pod。

参考:https://cert-manager.io/v0.12-docs/configuration/acme/http01/#ingressclass

大多数情况下,我们不会看到 HTTP 求解器的挑战,如果 DNS 或 HTTP 工作正常,就会被删除。

另外,请确保您的入口没有 SSL 重定向注释,这也可能是未生成证书的原因。

您是否尝试检查证书管理器的其他对象(例如订单和证书状态请求)?你那里kubectl describe challenge404吗?

如果您不断尝试,则可能会达到让我们加密请求生成证书的速率限制。

故障排除:https ://cert-manager.io/docs/faq/troubleshooting/#troubleshooting-a-failed-certificate-request