从Helm stable / cert-manager升级到jetstack / cert-manager

时间:2019-08-15 07:52:51

标签: kubernetes kubernetes-helm lets-encrypt azure-aks cert-manager

我们有一个生产AKS集群,该集群已安装stable/cert-manager舵图以允许使用“加密我们的证书”。已安装的当前版本是cert-manager-v0.6.0名称空间中的kube-system

从2019年11月1日起,我们的加密将停止支持cert-manager 8.0之前版本的流量。

我想升级,但是最新的stable图表版本是v0.6.7。好像要走的路是切换到jetstack/cert-manager

如何最好地解决这个问题?我是否应该卸载当前的stable/cert-manager图表并使用jetstack/cert-manager从头开始安装?任何有关如何在不停机的情况下解决此问题的资源将不胜感激。如果可以提供更多详细信息,请告诉我。

2 个答案:

答案 0 :(得分:2)

对于任何问相同问题的人,我都尝试在我的测试集群上执行全新安装,这似乎运行得很顺利。通过运行helm list

,我发现了掌舵版本的名称是什么

然后我执行了以下步骤:

1。备份

kubectl get -o yaml \
   --all-namespaces \
   issuer,clusterissuer,certificates,orders,challenges > cert-manager-backup.yaml

Source

2。删除

# Uninstall the Helm chart
helm delete --purge <your release name here>

# Ensure the cert-manager CustomResourceDefinition resources do not exist:
kubectl delete crd \
    certificates.certmanager.k8s.io \
    issuers.certmanager.k8s.io \
    clusterissuers.certmanager.k8s.io

步骤2 here

中所述

3。安装新的jetstack版本

# Install the CustomResourceDefinition resources separately
kubectl apply -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.9/deploy/manifests/00-crds.yaml

# Create the namespace for cert-manager
kubectl create namespace cert-manager

# Label the cert-manager namespace to disable resource validation
kubectl label namespace cert-manager certmanager.k8s.io/disable-validation=true

# Add the Jetstack Helm repository
helm repo add jetstack https://charts.jetstack.io

# Update your local Helm chart repository cache
helm repo update

# Install the cert-manager Helm chart
helm install --name <your release name here> --namespace cert-manager --version v0.9.1 jetstack/cert-manager

描述了here

4。还原

我尝试跑步

kubectl apply -f cert-manager-backup.yaml

here所述,但实际上这一步对我而言并不完全有效。创建了发行​​者(自签名和CA),但是我无法重新创建CertificatesClusterIssuer。这些是我收到的错误:

Error from server (InternalError): Internal error occurred: failed calling webhook "clusterissuers.admission.certmanager.k8s.io": the server is currently unable to handle the request
Error from server (InternalError): Internal error occurred: failed calling webhook "certificates.admission.certmanager.k8s.io": the server is currently unable to handle the request

我有原始的yaml文件,并且能够通过应用它们来创建ClusterIssuerCertificate

答案 1 :(得分:1)

我可以确认上述方法有效。 (@RVid答案)

尽管如此,我已经将0.5.0升级到0.9.1,并且必须创建一个单独的命名空间才能进行“无停机时间”升级。

#1 delete old CRDs
kubectl delete crd \
    certificates.certmanager.k8s.io \
    issuers.certmanager.k8s.io \
    clusterissuers.certmanager.k8s.io

#2 create SEPARATE namespace
$ kubectl create namespace cert-manager-new

#3 install new CRDs that corresponds to the new version of cert-manager

$ kubectl apply \
    -f https://raw.githubusercontent.com/jetstack/cert-manager/<VERSION>/deploy/manifests/00-crds.yaml


#4 ensure the NEW namespace has an additional label on it in order for the deployment to succeed
$ kubectl label namespace cert-manager-new certmanager.k8s.io/disable-validation="true"

#5 copy secrets to cert-manager-new namespace (For DNS, HTTP and Let's Encrypt account)

## Install the cert-manager helm chart
#  jetstack/cert-manager
$ helm install --name cert-manager-new --namespace cert-manager-new jetstack/cert-manager --values <your values file>

#6 apply ClusterIssuer with kubectl apply -f <file.yaml> 
Use config from: https://docs.cert-manager.io/en/latest/reference/issuers.html

证书管理器的新实例将开始同步您拥有的所有证书,而不会破坏机密。 最终,所有证书都将使用新的证书管理器进行续订。

干杯。