Kubernetes 404使用cert manager和Nginx入口进行质询响应

Kubernetes 404使用cert manager和Nginx入口进行质询响应,kubernetes,kubernetes-ingress,Kubernetes,Kubernetes Ingress,我正试着通过掌舵图跑步。K8s集群位于数字海洋上 我已按照建议成功安装,并已为登台创建了一个集群发行器,为生产创建了一个集群发行器。(letsencrypt暂存,letsencrypt产品) 问题:acme质询返回404错误 $ k get challenge -o wide NAME STATE DOMAIN REASON

我正试着通过掌舵图跑步。K8s集群位于数字海洋上

我已按照建议成功安装,并已为登台创建了一个
集群发行器
,为生产创建了一个集群发行器。(
letsencrypt暂存
letsencrypt产品

问题:acme质询返回404错误

$ k get challenge -o wide
NAME                                                      STATE     DOMAIN                 REASON                                                                               AGE
myapp-cert-2315925673-2905389610-1118496475   pending   myapp.example.com   Waiting for http-01 challenge propagation: wrong status code '404', expected '200'   7m55s
tls
块被注释掉时,入口在端口80上工作正常。但是,当我定义tls时,端口80上的请求返回404,这可能就是质询失败的原因

注意:使用我的产品
clustersuiser
时,我会得到相同的响应

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: myapp-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    cert-manager.io/cluster-issuer: letsencrypt-staging
  labels:
    app: myapp
spec:
  rules:
  - host: myapp.example.com
    http:
      paths:
      - backend:
          serviceName: myapp
          servicePort: 80
  tls:
  - hosts:
    - myapp.example.com
    secretName: myapp-cert
::编辑以添加更多配置:

按照@Tubc的请求添加更多配置和日志后,我更新入口时Nginx似乎抛出了一个错误,因为证书不存在

集群发行人清单:

---
apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: me@example.com
    privateKeySecretRef:
      name: letsencrypt-prod
    solvers:
    - http01:
        ingress:
          class: nginx
---
apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
  name: letsencrypt-staging
spec:
  acme:
    server: https://acme-staging-v02.api.letsencrypt.org/directory
    email: me@example.com
    privateKeySecretRef:
      name: letsencrypt-staging
    solvers:
    - http01:
        ingress:
          class: nginx
服务清单:

---
apiVersion: v1
kind: Service
metadata:
  name: myapp
  labels:
    app: myapp
spec:
  ports:
    - port: 80
  selector:
    app: myapp
    tier: fe
  type: NodePort
Nginx日志:

2019/12/08 14:45:44[emerg]62#62:无法加载证书“/etc/nginx/secrets/default myapp cert”:PEM_read_bio_X509_AUX()失败(SSL:error:090909006C:PEM例程:get_name:无起始行:应为受信任的证书) I1208 14:45:44.934644 1 event.go:209]事件(v1.ObjectReference{Kind:“Ingress”,命名空间:“default”,名称:“myapp Ingress”,UID:“610c3304-0565-415d-8cde-0863bf9325ca”,APIVersion:“extensions/v1beta1”,ResourceVersion:“319124”,FieldPath:“}):键入:“警告”原因:“AddedOrUpdatedWithError”已添加或更新默认/myapp入口的配置,但未应用:为默认/myapp入口重新加载NGINX时出错:NGINX重新加载失败:命令/usr/sbin/NGINX-s reload stdout:” stderr:“nginx:[emerg]无法加载证书\”“/etc/nginx/secrets/default myapp cert\”:PEM\u read\u bio\u X509\u AUX()失败(SSL:错误:090909006C:PEM例程:获取\u名称:无起始行:应为:受信任的证书)\n” 已完成,但出现错误:退出状态1


尽管复制了文档,但结果证明入口上的注释键是错误的


它应该是:
certmanager.k8s.io/群集颁发者
(而不是文档中的
certmanager.io/群集颁发者


进行此更改后,404消失,证书已颁发并正确配置。

您能提供更多信息吗?nginx日志,cert/issuer应用程序是否有“/”路由?,如果没有,这可能就是您获得404的原因。@Tubc I添加了配置和日志。Nginx显示了一个与证书不存在相关的错误,我想这是预期的。只是不确定这是否阻止它在端口80上服务,以便可以读取质询。@debarshi路径默认为/。不过,我只是在定义了路径的情况下运行了一个测试,这没有什么区别。对于那些使用Traefik的人来说,这里有一个类似的问题:certmanager.k8s.io/cluster-issuer已弃用,在最新版本中未使用。您的发卡机构正在使用nginx类,因此它将为挑战创建新的入口。我认为您可以删除注释。我认为您正在运行证书管理器的旧实例。当我尝试此操作时,我的证书管理器不会对注释作出反应。