cert-managerのバージョンを0.5から0.12まで上げた

 このブログはHTTPSで配信している。証明書はLet's Encryptを使っているが、Kubernetesでそこをよしなにやってくれるcert-managerを使っている。
 cert-managerが”ある状況下で証明書発行リクエストを送り過ぎる”ということがあったため、0.8未満のバージョンの発行リクエストが受け付けられなくなった。そのため証明書自動更新が働かず、証明書期限が近付いていた。なのでcert-managerのバージョンアップを行った。


 最初はcert-manager公式を読んで一つずつバージョンを上げていこうとしたが、0.6→0.7をやろうとしたところでエラーが出たので方法を切り替えた。

 端的にいえば、cert-managerを入れて、あとはClusterIssuerとCertificateを定義して、Secretへ証明書を吐き出しているというのが稼動中の状況。証明書が入っているSecretがおかしな内容に変更されない限りは正常に配信が続けられると判断して、まずcert-managerをアンインストールし、ClusterIssuerとCertificateも消した。
 そして新しくcert-managerの0.12を入れ、ClusterIssuerとCertificateも新しいSecretへ証明書を出力するように変更し、Kubernetesへ適用した。新しいSecretが出力されていることを確認し、Ingressで読み込むSecretを変更して証明書更新を行った。
というわけで以下詳細。

cert-manager0.12のインストール
kubectl apply --validate=false -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.12/deploy/manifests/00-crds.yaml

kubectl create namespace cert-manager
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install --name cert-manager --namespace cert-manager --version v0.12.0 jetstack/cert-manager


IssuerCertificate
apiVersion: cert-manager.io/v1alpha2

kind: ClusterIssuer
metadata:
name: tetsujin-issuer
spec:
acme:
email: ---
server: https://acme-v02.api.letsencrypt.org/directory
privateKeySecretRef:
name: blog-tetsujin-net-tls
solvers:
- http01:
ingress:
class: nginx


apiVersion: cert-manager.io/v1alpha2

kind: Certificate
metadata:
name: blog-tetsujin-net
namespace: tetsujin
spec:
secretName: blog-tetsujin-net-tls
duration: 2160h # 90d
renewBefore: 360h # 15d
dnsNames:
- blog.hmatoba.net
issuerRef:
name: tetsujin-issuer
kind: ClusterIssuer


 上記リソースを適用して、新しいSecretが出力されているのを確認できたら、ingress設定を変えた。
  tls:

- hosts:
- blog.hmatoba.net
- secretName: tls-secret
+ secretName: blog-tetsujin-net-tls


 以上の手順で、cert-managerのバージョンアップを終えることができた。
comment: 0