15

如何在Rancher 2.x中升级cert-manager?

 4 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzIyMTUwMDMyOQ%3D%3D&%3Bmid=2247492691&%3Bidx=1&%3Bsn=e22c0061e7050c8b5da90210ee4f6f56
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

R

明天晚上20:30,最后一期在线培训课程 《Rancher 2.3集群模板及新特性》 将准时开播!集群模板功能、Google认证、与k8s解耦、k8s1.16的支持……一节课通通解锁!点击【阅读原文】或复制以下地址到浏览器报名吧:

http://www.itdks.com/Home/Live/detail?id=28601

作者:

Nassos Michas丨European Dynamics SA, CTO

如果你正在使用由Rancher提供的Helm Chart在Rancher管理的Kubernetes集群中安装cert-manager,那么你最近也许收到了Let’s Encrypt发给你的提醒:

6FvQnan.png!web

在集群中检查cert-manager的日志,你可以看到Let’s Encrypt拒绝更新证书的请求,因为“你的ACME客户端版本过旧,请升级到更新的版本”。那么,我们现在就开始吧!

iAZZvaB.jpg!web

使用Rancher提供的Helm Chart进行更新

我想你脑海里的第一想法应该和我的类似:使用相关的最新版本的Helm Chart升级cert-manager。大家可以不用考虑这个选项,因为Rancher提供的cert-manager Helm Chart目前最新的是0.5.2版本,所以别想着一键式升级啦!

iAZZvaB.jpg!web

使用官方Helm Chart升级

参考链接: https://forums.rancher.com/t/update-on-cert-manager-application-in-the-catalog/15598

计划十分简单:只需要将Rancher提供的cert-manager的Helm Chart移除,并使用Helm中由Jetstack维护的chart替换即可。

在开始之前,我们需要保持谨慎。从v0.5.2到目前stable的版本v0.11.0,许多内容都有所更改。新引入的CRDs和相应的配置格式将深刻地影响你的部署。因此,更新升级后,你需要将资源定义更新为新格式。幸运的是,cert-manager为我们提供了升级脚本,我们会在下文中用到它。

移除Rancher提供的Helm Chart

1、 登录你的Rancher UI

2、 切换到最初安装cert-manager的项目(可能是System)

3、 点击“APPs”

4、 点击垂直省略号按钮,然后选择“删除”。

aemy2aU.png!web

现在,你已经移除了最开始安装的cert-manager。请注意,这一操作不会影响此前已经创建的证书,并且你的ingress配置应该像之前一样工作。

安装Tiller

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之前,我们需要做以下准备:

1、 禁用资源验证,以允许cert-manager的webhook组件正常工作

2、 安装新的(v0.11.1)的CRDs

3、 添加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

JNZvInE.png!web

此时,我们就准备好安装并且验证cert-manager

helm install \

--name cert-manager \

--namespace cert-manager \

--version v0.11.0 \

jetstack/cert-manager

kubectl get pods --namespace cert-manager

FRNzEbr.png!web

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") ) ))"'

2QzUb2V.jpg!web

根据你的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

我们现在基本上完成了,最后一步是我们需要重新引入集群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: [email protected]

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: [email protected]

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年有效期的自签名证书。

I3i6nqv.png!web

推荐阅读

本周三在线培训 | Rancher 2.3集群模板及新特性

再也不用担心学不会K8S!17个K8S初学者必须掌握的知识点

Rancher 2.3实现K8S一键式升级!再也不用同步升级Rancher啦!

I3i6nqv.png!web

About Rancher Labs

Rancher Labs由CloudStack之父梁胜创建。旗舰产品Rancher是一个开源的企业级Kubernetes管理平台,实现了Kubernetes集群在混合云+本地数据中心的集中部署与管理。Rancher一向因操作体验的直观、极简备受用户青睐,被Forrester评为2018年全球容器管理平台领导厂商,被Gartner评为2017年全球最酷的云基础设施供应商。

目前Rancher在全球拥有超过一亿的下载量,并拥有包括中国人寿、华为、中国平安、兴业银行、民生银行、平安证券、海航科技、厦门航空、上汽集团、海尔、米其林、丰田、本田、中船重工、中联重科、迪斯尼、IBM、Cisco、Nvidia、辉瑞制药、西门子、CCTV、中国联通等全球著名企业在内的共27000家企业客户。

BNNrMjF.jpg!web

点击【阅读原文】,解锁Rancher 2.3所有黑科技!

↓↓↓


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK