【发布时间】:2022-07-08 00:45:38
【问题描述】:
我在尝试使用 GKE 集群中的 cert-manager 创建证书时遇到问题。这一定是我正在做的事情,因为我已经尝试了 1.7.1、1.7.0 和 1.6.2 版本,但都遇到了相同的错误。
我看到的错误是:
E0219 00:57:39.270717 1 sync.go:186] cert-manager/controller/challenges "msg"="propagation check failed" "error"="failed to perform self check GET request 'http://mysubdomain.mmydomain.com/.well-known/acme-challenge/secretKey': Get \"https://mysubdomain.mmydomain.com:443/.well-known/acme-challenge/secretKey\": remote error: tls: unrecognized name" "dnsName"="mysubdomain.mmydomain.com" "resource_kind"="Challenge" "resource_name"="elasticsearch-tls-cert-somenumbers" "resource_namespace"="elastic-stack" "resource_version"="v1" "type"="HTTP-01"
这是我安装的设置:
安装 CRD
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.7.1/cert-manager.crds.yaml
Helm 安装证书管理器
helm install \
cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--version v1.7.1
确认安装良好:
➜ ~ helm list -n cert-manager
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
cert-manager cert-manager 1 2022-02-18 16:07:57.258172 -0800 PST deployed cert-manager-v1.6.2 v1.6.2
➜ ~
应用了 ClusterIssuer:
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt
spec:
acme:
email: "myemail@myemail.com"
server: https://acme-v02.api.letsencrypt.org/directory
privateKeySecretRef:
name: letsencrypt
solvers:
- http01:
ingress:
class: nginx
部署了我的入口:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: kibana-ingress
namespace: elastic-stack
annotations:
cert-manager.io/cluster-issuer: letsencrypt
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
spec:
rules:
- host: mysubdomain.mmydomain.com
http:
paths:
- path: /
backend:
serviceName: kibana-kb-http
servicePort: 5601
tls:
- hosts:
- mysubdomain.mmydomain.com
secretName: kibana-tls-cert
然后,当我跟踪 cert-manager pod 时,我看到了 remote error: tls: unrecognized name" "dnsName 错误。
对证书挑战的描述也说了同样的话:
Status:
Presented: true
Processing: true
Reason: Waiting for HTTP-01 challenge propagation: failed to perform self check GET request 'http://mysubdomain.mmydomain.com/.well-known/acme-challenge/secretKey': Get "https://mysubdomain.mmydomain.com:443/.well-known/acme-challenge/secretKey": remote error: tls: unrecognized name
State: pending
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Started 8m45s cert-manager Challenge scheduled for processing
Normal Presented 8m45s cert-manager Presented challenge using HTTP-01 challenge mechanism
这在另一个集群中完全正常,所以我无法弄清楚我在这里做错了什么。
【问题讨论】:
-
添加 service.beta.kubernetes.io/do-loadbalancer-hostname 注解并使用 kubectl edit service ingress-nginx-controller -n ingress-nginx 编辑资源。请记住,您可能有不同的名称和命名空间。 Reference
-
@AbhijithChitrapu 我相信注释仅适用于 AWS,但我可能是错的。问题实际上是我使用了不同的 NGINX 图表,因此入口的配置不同。当我将 NGINX 聊天切换到我在另一个集群中使用的图表时,一切正常。
标签: google-kubernetes-engine lets-encrypt cert-manager