做者:linux
Nassos Michas丨European Dynamics SA, CTOnginx
若是你正在使用由Rancher提供的Helm Chart在Rancher管理的Kubernetes集群中安装cert-manager,那么你最近也许收到了Let’s Encrypt发给你的提醒:git
在集群中检查cert-manager的日志,你能够看到Let’s Encrypt拒绝更新证书的请求,由于“你的ACME客户端版本过旧,请升级到更新的版本”。那么,咱们如今就开始吧!github
我想你脑海里的第一想法应该和个人相似:使用相关的最新版本的Helm Chart升级cert-manager。你们能够不用考虑这个选项,由于Rancher提供的cert-manager Helm Chart目前最新的是0.5.2版本,因此别想着一键式升级啦!web
参考连接:https://forums.rancher.com/t/update-on-cert-manager-application-in-the-catalog/15598json
计划十分简单:只须要将Rancher提供的cert-manager的Helm Chart移除,并使用Helm中由Jetstack维护的chart替换便可。api
在开始以前,咱们须要保持谨慎。从v0.5.2到目前stable的版本v0.11.0,许多内容都有所更改。新引入的CRDs和相应的配置格式将深入地影响你的部署。所以,更新升级后,你须要将资源定义更新为新格式。幸运的是,cert-manager为咱们提供了升级脚本,咱们会在下文中用到它。浏览器
移除Rancher提供的Helm Chartapp
一、 登陆你的Rancher UI工具
二、 切换到最初安装cert-manager的项目(多是System)
三、 点击“APPs”
四、 点击垂直省略号按钮,而后选择“删除”。
如今,你已经移除了最开始安装的cert-manager。请注意,这一操做不会影响此前已经建立的证书,而且你的ingress配置应该像以前同样工做。
Tiller是Helm的服务端组件,因此为了能在咱们的CLI中使用Helm,咱们须要在Kubernetes集群中安装Tiller。你能够经过运行如下命令来验证Tiller是否已经安装:
helm version
若是你的输出结果与以上结果相似,那么Tiller并无安装好。若是你已经完成安装,那么请跳过这一部分。
好,如今咱们来安装Tiller。首先,咱们须要建立一个服务帐号,授予咱们远程安装Tiller的权限,而后再授予安装Chart的权限。
kubectl -n kube-system create serviceaccount tiller kubectl create clusterrolebinding tiller \ --clusterrole=cluster-admin \ --serviceaccount=kube-system:tiller
要启动安装Tiller:
helm init --service-account tiller
几秒钟以后,你可以经过从新输入命令helm version
来验证Tiller是否已经安装,或者经过下列命令来验证你的Kubernetes Tiller部署:
kubectl -n kube-system rollout status deploy/tiller-deploy:
安装cert-manager
在安装cert-manager以前,咱们须要作如下准备:
一、 禁用资源验证,以容许cert-manager的webhook组件正常工做
二、 安装新的(v0.11.1)的CRDs
三、 添加Jetstack repos
kubectl label namespace cert-manager certmanager.k8s.io/disable-validation=true kubectl apply --validate=false -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.11/deploy/manifests/00-crds.yaml helm repo add jetstack https://charts.jetstack.io && helm update
此时,咱们就准备好安装而且验证cert-manager
helm install \ --name cert-manager \ --namespace cert-manager \ --version v0.11.0 \ jetstack/cert-manager kubectl get pods --namespace cert-manager
cert-manager v0.11.0安装成功
参考连接:
https://cert-manager.io/docs/installation/upgrading/upgrading-0.10-0.11/
若是你检查你的ingress证书,你会发现什么都没有改变。这在乎料之中,由于以前的版本v0.5.2中使用的ingress定义的配置不适用于v0.11.0。cert-manager为咱们提供了简便的代码来查找哪一个集群资源依旧引用旧的注释:
kubectl get ingress \ --all-namespaces \ -o json | \ jq '.items[] | select(.metadata.annotations| to_entries | map(.key)[] | test("certmanager")) | "Ingress resource \(.metadata.namespace)/\(.metadata.name) contains old annotations: (\( .metadata.annotations | to_entries | map(.key)[] | select( . | test("certmanager") ) ))"'
根据你的Kubernetes集群部署数量,以上列表可能会更短也可能会更长。而尝试去手动更改全部部署的旧注释可能会花费至关长的时间。如下CLI工具能够自动执行这一过程,但它不会对你的集群形成任何更改:
# 首先,根据你的平台下载二进制文件 wget -O api-migration https://github.com/jetstack/cert-manager/releases/download/v0.11.0/api-migration-linux # 或者根据Darwin wget -O api-migration https://github.com/jetstack/cert-manager/releases/download/v0.11.0/api-migration-darwin # 将二进制文件标记为可执行文件,而后对集群运行二进制文件 chmod +x api-migration && ./api-migration --kubeconfig /path/to/my/kubeconfig.yaml # 查看CLI的输出结果而且检查文件中的差别 diff ingress.yaml ingress-migrated.yaml # 最后,review了新的ingress资源以后,应用manifest kubectl apply -f ingress-migrated.yaml --kubeconfig /path/to/my/kubeconfig.yaml
请确保更新全部Ingress资源,以保证您的证书保持最新状态。
咱们如今基本上完成了,最后一步是咱们须要从新引入集群Issuer(若是你只但愿将kind注释更改成Issuer,也能够选择每一个命名空间的Issuer)。
使用Let’s Encrypt stage和Production以及HTTP01建立两个集群Issuer,如下是代码摘要:
--- apiVersion: cert-manager.io/v1alpha2 kind: ClusterIssuer metadata: name: letsencrypt-staging spec: acme: email: example@example.com server: https://acme-staging-v02.api.letsencrypt.org/directory privateKeySecretRef: name: letsencrypt-staging-account-key solvers: - http01: ingress: class: nginx --- apiVersion: cert-manager.io/v1alpha2 kind: ClusterIssuer metadata: name: letsencrypt-prod spec: acme: email: example@example.com server: https://acme-v02.api.letsencrypt.org/directory privateKeySecretRef: name: letsencrypt-prod-account-key solvers: - http01: ingress: class: nginx
在一两分钟以后,你的全部ingress都将更新为指向新颁发的证书。可是请记住,若是你以前的证书不在续订窗口内,那么你不会发现任何差别。
PS:针对Rancher自己的应用,cert-manager支持的最高版本是v0.9,若是是自有的应用服务,能够支持最新版本。
PPS:因为众所周知的缘由,在国内不推荐使用cert-manager,建议使用10年有效期的自签名证书。
今天晚上20:30,最后一期在线培训课程《Rancher 2.3集群模板及新特性》将准时开播!集群模板功能、Google认证、与k8s解耦、k8s1.16的支持……一节课统统解锁!复制如下地址到浏览器报名吧: