我正在从 GitLab 管理的 Kubernetes 集群迁移到自我管理的集群。在这个自我管理的集群中需要安装 nginx-ingress 和 cert-manager。我已经设法为用于审查环境的集群做同样的事情。我使用最新的 Helm3 RC 来管理这个,所以我不需要 Tiller。
到目前为止,我运行了这些命令:
# Add Helm repos locally
helm repo add stable https://kubernetes-charts.storage.googleapis.com
helm repo add jetstack https://charts.jetstack.io
# Create namespaces
kubectl create namespace managed
kubectl create namespace production
# Create cert-manager crds
kubectl apply --validate=false -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.11/deploy/manifests/00-crds.yaml
# Install Ingress
helm install ingress stable/nginx-ingress --namespace managed --version 0.26.1
# Install cert-manager with a cluster issuer
kubectl apply -f config/production/cluster-issuer.yaml
helm install cert-manager jetstack/cert-manager --namespace managed --version v0.11.0
这是我的cluster-issuer.yaml
:
# Based on https://docs.cert-manager.io/en/latest/reference/issuers.html#issuers
apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: XXX # This is an actual email address in the real resource
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- selector: {}
http01:
ingress:
class: nginx
我安装了自己的 Helm 图表,名为docs
. Helm 图表中的所有资源都按预期安装。使用 cURL,我可以通过 HTTP 获取页面。谷歌浏览器将我重定向到证书无效的 HTTPS 页面。
已创建其他以下资源:
$ kubectl get secrets
NAME TYPE DATA AGE
docs-tls kubernetes.io/tls 3 18m
$ kubectl get certificaterequests.cert-manager.io
NAME READY AGE
docs-tls-867256354 False 17m
$ kubectl get certificates.cert-manager.io
NAME READY SECRET AGE
docs-tls False docs-tls 18m
$ kubectl get orders.acme.cert-manager.io
NAME STATE AGE
docs-tls-867256354-3424941167 invalid 18m
似乎一切都被无效状态的 cert-manager 命令阻止。为什么会无效?我该如何解决这个问题?