web-dev-qa-db-ja.com

Helmのstable / cert-managerからjetstack / cert-managerへのアップグレード

Let's Encrypt証明書の使用を許可するためにstable/cert-manager helmチャートがインストールされている本番AKSクラスターがあります。現在インストールされているバージョンは、cert-manager-v0.6.0名前空間のkube-systemです。

Let's Encryptは、2019年11月1日から、cert-manager 8.0より前のバージョンからのトラフィックのサポートを停止します。

アップグレードしたいのですが、最新のstableチャートバージョンはv0.6.7です。移動する方法はjetstack/cert-managerに切り替えることです。

これに最もよく対処するにはどうすればよいですか?現在のstable/cert-managerチャートをアンインストールし、jetstack/cert-managerを使用して最初からインストールしますか?本番環境でダウンタイムを発生させることなくこれに対処する方法についてのあらゆるリソースをいただければ幸いです。詳細を教えてください。

6
RVid

同じ質問をする人のために、私はテストクラスターでクリーンインストールを実行しようとしましたが、これはかなりスムーズに動作するように見えました。ヘルムリリースの名前はhelm listを実行してわかりました

次に、次の手順を実行しました。

1.Backup

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

ソース

2.Delete

# 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で説明 ここ

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

説明 ここ

4。復元

走ってみた

kubectl apply -f cert-manager-backup.yaml

説明したように here ですが、この手順は実際には完全には機能しませんでした。発行者は作成されましたが(自己署名およびCA)、CertificatesおよびClusterIssuerを再作成できませんでした。これらは私が受け取ったエラーでした:

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を作成することができました

2
RVid

上記で動作することが確認できました。 (@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

証明書マネージャの新しいインスタンスは、秘密を破壊することなく、所有しているすべての証明書の同期を開始します。最終的に、すべての証明書は新しいcert-managerで更新されます。

乾杯。

1
bzumby