Kubernetes 404使用cert manager和Nginx入口进行质询响应
我正试着通过掌舵图跑步。K8s集群位于数字海洋上 我已按照建议成功安装,并已为登台创建了一个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
集群发行器
,为生产创建了一个集群发行器。(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类,因此它将为挑战创建新的入口。我认为您可以删除注释。我认为您正在运行证书管理器的旧实例。当我尝试此操作时,我的证书管理器不会对注释作出反应。