HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

如何在 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:07611

评论

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

第三周作业

丁乐洪

架构师训练营 - 第三周课后练习

joshuamai

Week 7 作业一

黄立

一周信创舆情观察(10.26~11.1)

统小信uos

1分钟带你解锁Angular

Leo

学习 大前端 angular

https 握手失败问题排查全记录

程序员与厨子

nginx https 网络 HTTP 抓包

week3 代码重构 学习总结

杨斌

week3 代码重构 -作业一

杨斌

科学家联合提出基于区块链的追溯框架

CECBC

区块链 农业

从广西的新基建耕种,读懂一颗名为智能体的种子

脑极体

【涂鸦物联网足迹】物联网主流通信方式

IoT云工坊

人工智能 云计算 大数据 物联网 云平台

手把手教你如何在Windows安装Anaconda

计算机与AI

Python Anaconda

WSL还是不错的

孙苏勇

WSL2 工具链 wsl

架构师训练营 - 第 7 周课后作业(1 期)

阿甘

区块链追溯系统迎来新突破

CECBC

区块链 溯源 产品溯源

屏读时代,我们患上了注意力缺失候群症

脑极体

一道比较运算符相关的面试题把我虐的体无完肤

Gopher指北

架构师训练营 - 第三周学习总结

joshuamai

【涂鸦物联网足迹】涂鸦云平台全景介绍

IoT云工坊

人工智能 云计算 大数据 物联网平台 物联网

架構師訓練營第 1 期 - 第 07 周總結

Panda

架構師訓練營第 1 期

Week 7 性能优化总结

黄立

穿越时空的回响:华为欧洲创新日的蝴蝶振翅

脑极体

极客大学 - 架构师训练营 第七周作业

9527

解决大中型浏览器(Chrome)插件开发痛点:自定义热更新方案——1.原理分析及构建部署实现

梁龙先森

Java chrome 大前端 浏览器 技术方案

6年Java开发经验,蚂蚁金服面试3+2次,最终有惊无险通过!(已拿offer)

Java架构之路

Java 程序员 架构 面试 编程语言

GrowingIO 响应式编程探索和实践

GrowingIO技术专栏

响应式编程

8张图带你分析Redis与MySQL数据一致性问题

Java架构师迁哥

GitHub上超牛的Java进阶教程,汇总Java生态圈常用技术框架、开源中间件,系统架构、数据库、大公司架构案例、常用三方类库、项目管理、线上问题排查、个人成长、思考等知识

Java架构之路

Java 程序员 架构 面试 编程语言

架构师训练营 第三周作业(手写单例模式)

springH₂O

架构训练营

在Idea中使用JUnit单元测试

jiangling500

单元测试 IDEA JUnit

区块链将颠覆和改变传统金融业底层逻辑

CECBC

区块链 数字经济

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