【发布时间】:2022-06-16 20:04:04
【问题描述】:
我们在 GKE 中使用 ingress-nginx 控制器公开了十几个服务。
为了在同一个域名上正确路由流量,我们需要使用重写目标规则。
这些服务自 2019 年推出以来运行良好,没有进行任何维护,直到最近;当 cert-manager 突然停止更新 Let's Encrypt 证书时,我们通过暂时从入口定义中删除“tls”部分来“解决”这个问题,迫使我们的客户使用 http 版本。
之后,我们删除了 cert-manager 尝试从头开始设置它的所有痕迹。
现在,cert-manager 正在创建证书签名请求,生成一个 acme http 求解器 pod 并将其添加到入口,但是在访问其 url 时,我可以看到它返回一个空响应,而不是预期的令牌。
这与混淆了 acme 挑战的路由的 rewrite-target 注释有关。 最让我困惑的是,这曾经可以工作。 (它是由一位前雇员设置的)
不幸的是,禁用重写目标不是一个选项,因为它会阻止路由正常工作。
使用 dns01 不起作用,因为我们的 ISP 不支持以编程方式更改 DNS 记录。
有没有办法在不禁用重写目标的情况下完成这项工作?
附: 以下是 Github 上报道的一些类似案例:
- https://github.com/cert-manager/cert-manager/issues/2826
- https://github.com/cert-manager/cert-manager/issues/286
- https://github.com/cert-manager/cert-manager/issues/487
它们都没有帮助。
这是我的 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
【问题讨论】:
-
你能确认这在没有重写目标的情况下有效吗? (可能在另一个环境中)
-
@ChenA。是的,禁用重写目标似乎有帮助。
-
在下面查看我的答案。您可以尝试修改此特定入口上的 rewrite-targets 注释
标签: kubernetes google-kubernetes-engine cert-manager ingress-nginx