2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

  • 2020-05-18
  • 本文字数:2698 字

    阅读完需:约 9 分钟

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

作者:

Nassos Michas 丨 European Dynamics SA, CTO


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



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

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

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

使用官方 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、 点击垂直省略号按钮,然后选择“删除”。



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

安装 Tiller

Tiller 是 Helm 的服务端组件,所以为了能在我们的 CLI 中使用 Helm,我们需要在 Kubernetes 集群中安装 Tiller。你可以通过运行以下命令来验证 Tiller 是否已经安装:


helm version
复制代码



如果你的输出结果与以上结果类似,那么 Tiller 并没有安装好。如果你已经完成安装,那么请跳过这一部分。


好,现在我们来安装 Tiller。首先,我们需要创建一个服务账号,授予我们远程安装 Tiller 的权限,然后再授予安装 Chart 的权限。


kubectl -n kube-system create serviceaccount tillerkubectl 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=truekubectl apply --validate=false -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.11/deploy/manifests/00-crds.yamlhelm 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-managerkubectl 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("certmana
复制代码



根据你的 Kubernetes 集群部署数量,以上列表可能会更短也可能会更长。而尝试去手动更改所有部署的旧注释可能会花费相当长的时间。以下 CLI 工具可以自动执行这一过程,但它不会对你的集群造成任何更改:


# 首先,根据你的平台下载二进制文件wget -O api-migration https://github.com/jetstack/cert-manager/releases/download/v0.11.0/api-migration-linux# 或者根据Darwinwget -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资源之后,应用manifestkubectl 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/v1alpha2kind: ClusterIssuermetadata:  name: letsencrypt-stagingspec:  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/v1alpha2kind: ClusterIssuermetadata:  name: letsencrypt-prodspec:  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 年有效期的自签名证书。


2020-05-18 18:07768

评论

发布
暂无评论
发现更多内容

信用卡评测系列——阳光惠生活APP深化服务客户品牌理念,焕新升级7.0版

易观分析

金融 银行 信用卡

元器件科普|变压器的分类及形状构造

元器件秋姐

元器件采购 华秋商城 变压器 电感器 电压

不懂Hybird开发,感觉错过一个亿~

FinFish

小程序 前端框架 APP开发 APP软件开发、 混合开发

度量BGP监测源数量对AS可见性的影响

郑州埃文科技

AS IP地址 BGP数据源

通过实战总结的 使用Go的小技巧

王中阳Go

Go golang 高效工作 学习方法 11月月更

【Ajax】全面了解http协议

坚毅的小解同志

HTTP 11月月更

旺链科技肖慧荣登超级账本2022年第三季度中国贡献榜

旺链科技

区块链 产业区块链 VoneBaaS 企业号十月PK榜

基于Spring-AOP的自定义分片工具

京东科技开发者

aop 数据分片 spring aop 配置文件

【Ajax】如何通过axios发起Ajax请求

坚毅的小解同志

ajax 11月月更

Go定时任务源码 - robfig/cron

人生如梦

Go 定时任务 cron

计算机网络:数据链路层设备

timerring

计算机网络 11月月更 网桥

提升80%上云集成效率, TA是如何做到的

华为云开发者联盟

云计算 后端 华为云 云集成

深度解析KubeEdge EdgeMesh 高可用架构

华为云开发者联盟

云计算 云原生 后端 华为云

4.0体验站|OceanBase 4.0 我回来给你点个赞

OceanBase 数据库

鸿蒙系统ARKUI框架对于分布式计算和请求API的实战研究

恒山其若陋兮

前端 11月月更

5分钟搭建图片压缩应用

华为云开发者联盟

云计算 后端 华为云 函数工作流

传输线路动态巡检探索

鲸品堂

网络 传输网络

“如何实现高效的应用交付”鲁班会开发者训练营厦门站进行时

华为云开发者联盟

云计算 软件开发 华为云 应用集成

OpenHarmony 3.2 Beta多媒体系列——音视频播放框架

OpenHarmony开发者

OpenHarmony

【原生Ajax】全面了解xhr的概念与使用。

坚毅的小解同志

ajax 11月月更

字节跳动基于数据湖技术的近实时场景实践

字节跳动数据平台

数据湖 火山引擎

ArkUI框架基于鸿蒙系统的Scroll和Scroller和自定义组件之插槽的实战案例心得

恒山其若陋兮

前端 11月月更

【web 开发基础】PHP 变量的作用范围 (29)

迷彩

作用域 静态变量 全局变量 局部变量 11月月更

大模型狂欢背后:AI基础设施的“老化”与改造工程

OneFlow

人工智能 深度学习 大模型

一个宁静祥和没有bug的下午和SqlSession的故事

京东科技开发者

mybatis sql Spring Boot CLI SQLSession

【jquery ajax】实现文件上传提交

坚毅的小解同志

ajax 11月月更

数维图智慧化工园区三维系统 助力危化企业安全生产

2D3D前端可视化开发

物联网 数据可视化 数字孪生 智慧化工园区 化工园区三维可视化

基于鸿蒙系统的ArkUI框架的公共剪切类属性和多态样式在前后端分离项目中的表现

恒山其若陋兮

11月月更

Bigkey问题的解决思路与方式探索

vivo互联网技术

redis dba bigkey

【Ajax进阶】跨域和JSONP的学习

坚毅的小解同志

ajax 11月月更

【Ajax】如何通过axios发起Ajax请求

坚毅的小解同志

ajax 11月月更

如何在Rancher 2.x中升级cert-manageer?_文化 & 方法_Rancher_InfoQ精选文章