[英]Error using Let's Encrypt in Ingress:Issuing certificate as Secret does not exist using
[英]what does "Issuing certificate as Secret does not exist" error mean when using cert manager to add ssl to my domain in k8s
我尝试使用 k8s 中的证书管理器将 ssl 设置为我的域。
首先,我创建了 2 个服务并应用了入口,这样我就可以通过 http 请求访问我的服务。
然后我用 yml 文件安装了 cert-manager
$ kubectl apply -f https://github.com/jetstack/cert-manager/releases/latest/download/cert-manager.yaml
之后,我设置了颁发者和证书
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: letsencrypt-staging
namespace: default
spec:
acme:
# Staging API
server: https://acme-staging-v02.api.letsencrypt.org/directory
email: xxx@xxx.xxx
privateKeySecretRef:
name: letsencrypt-staging
solvers:
- selector: {}
http01:
ingress:
class: nginx
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: miniapi-staging
namespace: default
spec:
secretName: miniapi-staging-certificate
issuerRef:
name: letsencrypt-staging
commonName: xx1.xx.xxx
dnsNames:
- xx1.xx.xxx
- xx2.xx.xxx
我描述了证书,它向我展示了
颁发证书作为 Secret 不存在
然后我描述了挑战,它向我展示了一些未决错误
等待 HTTP-01 挑战传播:无法执行自检 GET 请求 'http://xxx.xxx.xx/.well-known/acme-challenge/AsGBYEbUD8VRYoJsXQQu5b0ntGSS5quq2M7kRx0sFZs':获取“http://xx.xxx.xx/ .well-known/acme-challenge/AsGBYEbUD8VRYoJsXQQu5b0ntGSS5quq2M7kRx0sFZs”:EOF
我检查了上面的 url 是有效的,它向我显示了一个 ong 行字符串(我已经修改了真实的网址)。
我试了很多次,但都是同样的错误,所以我做错了什么,希望有人能帮我解决这个问题。
BTW k8s好难学,你们是怎么学的
为了解决此错误消息,我遵循了证书生命周期流程。
总而言之,我们感兴趣的资源是certificate
、 certificaterequest
、 order
和challenge
。 我使用kubectl get
和kubectl describe
来了解这些资源的状态。
我开始删除已经创建的资源,删除后应该立即重新创建。 鉴于流程是:
certificate
-> certificaterequest
-> order
-> challenge
我从流程末尾开始删除并观察效果,因此遵循相反的流程顺序: challenge
,然后是order
,然后是certificaterequest
,最后是certificate
。 这没有用,但在再次仔细查看所有资源后,我注意到删除challenge
失败了。 正因为如此,已经创建的第二个挑战没有得到处理。 这很可能是因为第一个挑战在 DNS 区域中被手动删除,而它仍在处理中。
为了解决这个问题,有必要删除第一个挑战。 在这个 GitHub 答案中,您可以了解如何做到这一点。
该消息意味着 cert-manager 可以看到您已经请求了一个证书,但它还没有一个,因此它需要为您创建(颁发)一个。
至于为什么发行卡在自检上,请确认从集群内部检索该 URL 以及从外部检索该 URL 都有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.