Lets Encrypt using Certbot 在 kubernetes 中失败(尽管与 cert-manager 一起工作)

Lets Encrypt using Certbot fails in kubernetes (works with cert-manager though)

我在 Azure 中有一个 Kubernetes 集群版本 1.15.5,我在其中安装了 cert-manager 版本 v0.14.0

它可以很好地自动颁发针对有效 DNS 名称的加密证书:MY_DOMAIN 指向入口控制器的外部 IP 地址。

我也希望能够使用例如certbot。我尝试在我的集群上使用 运行 certbot:

kubectl run --generator=run-pod/v1 certbot-shell --rm -i --tty --image certbot/certbot:amd64-latest -- -d MY_DOMAIN --manual --preferred-challenges http certonly

但它失败了:

Create a file containing just this data:

QAPu****-klNq1RBgY

And make it available on your web server at this URL:

http://MY_DOMAIN/.well-known/acme-challenge/QAPu****-klNq1RBgY

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


Press Enter to Continue
Waiting for verification...
Challenge failed for domain MY_DOMAIN
http-01 challenge for MY_DOMAIN
Cleaning up challenges
Some challenges have failed.

IMPORTANT NOTES:
 - The following errors were reported by the server:

   Domain: MY_DOMAIN
   Type:   unauthorized
   Detail: Invalid response from
   http://MY_DOMAIN/.well-known/acme-challenge/QAPuDTHa****1qlLLOg
   [13.x.x.x]: 404

   To fix these errors, please make sure that your domain name was
   entered correctly and the DNS A/AAAA record(s) for that domain

所以 cert-manager 以某种方式自动负责在挑战期间创建文件并在以下位置提供:

http://MY_DOMAIN/.well-known/acme-challenge/QAPu****-klNq1RBgY

但是我不确定在使用 certbot 时我是怎么做到的,或者是否有其他方法可以做到这一点??

根据以下建议,我尝试安装 Kube lego (0.1.2)(对于旧版 1.8 集群),但似乎失败了:

level=error msg="Error while processing certificate requests: 403 urn:acme:error:unauthorized: Account creation on ACMEv1 is disabled. Please upgrade your ACME client to a version that supports ACMEv2 / RFC 8555. See https://community.letsencrypt.org/t/end-of-life-plan-for-acmev1/88430 for details." context=kubelego 

所以我尝试升级到:

https://acme-staging-v02.api.letsencrypt.org/directory

但后来我得到:

level=error msg="Error while processing certificate requests: Head : unsupported protocol scheme \"\"" context=kubelego

我发现:

https://github.com/jetstack/kube-lego/issues/301

看起来 kube-lego 不能与 ACME 版本 2 一起使用:-(

评论的简短版本:DNS 模式下的 certbot 可能会工作,HTTP01 不会,因为您需要动态调整 Ingress 设置,这正是 cert-manager 所做的。总的来说,这是一个很好的例子,说明为什么 运行 2.5 年前的 Kube 版本不好。