时隔16年Jeff Barr重返10.23-25 QCon上海站,带你看透AI如何重塑软件开发! 了解详情
写点什么

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

评论

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

Linux Lab 进阶: Rootfs 文件系统 &Linux 与 Uboot 调试

贾献华

Linux Linux Kenel rootfs uboot usb

停车、投票、领证,区块链如何在「智慧城市」建设中大显身手?

CECBC

区块链

大作业(二)

bing5tui3

架构师训练营第2期

字节跳动面试必问:从外包月薪5K到阿里月薪15K,学习路线+知识点梳理

欢喜学安卓

android 程序员 面试 移动开发

架构2期-大作业(二)

浮生一梦

大作业 2组 架构师训练营第2期

杜绝“萝卜章”风险,区块链电子签章助力企业降本“保真”

CECBC

电子签名

如何在数据库中进行RBAC权限应用

BinTools图尔兹

数据库 权限管理 数据管理 rbac

产品经理训练营笔记-业务流程与产品文档(一)

.nil?

产品经理训练营

排查指南 | 当 mPaaS 小程序真机扫码时提示 "应用更新错误(50002)"

蚂蚁集团移动开发平台 mPaaS

小程序 问题排查 mPaaS

欢度春节|新用户专属福利

InfoQ写作社区官方

热门活动

话题讨论 | 新年将至, 程序员如何以代码送出新春祝福

孙叫兽

Java 程序员 大前端 话题讨论 新春祝福

2 期架构师训练营 - 第六周作业与总结

云飞扬

架构师训练营第2期

百度大脑 EasyData 智能数据服务平台上线文本数据清洗功能

百度大脑

2 期架构师训练营 - 第四周作业与总结

云飞扬

架构师训练营第2期

Java函数式编程Stream.collect()为什么这么受欢迎?

李尚智

Java 架构 函数式编程

架构师训练营第六周作业

跳蚤

执行、管理、领导做不好,都有懒的因素

刘华Kenneth

领导力 管理 软件开发

机器学习·笔记之:Inverse and Transpose

Nydia

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

云飞扬

架构师训练营第2期

大作业(一)

bing5tui3

极客时间架构师二期

kafka的实现原理

八两

kafka Kafka知识点 kafka实现原理 kafka架构

百度大脑 EasyEdge 推出端云协同服务,大幅提升本地部署模型迭代效率

百度大脑

注册中心 Nacos 异常实例需要30s才能剔除 Nacos心跳时间设置(踩坑)

laker

Spring Cloud nacos spring cloud alibaba

无意间发现 Google 代码模板,分享给大家!

C语言与CPP编程

c++ JavaScript objective-c 代码规范 Python 编码格式

搜索引擎简述

跳蚤

字节跳动架构师讲解Android开发!2021年展望Android原生开发的现状,分享一点面试小经验

欢喜学安卓

android 程序员 面试 移动开发

区块链还可以这么玩?“点亮莫高窟”背后的腾讯云区块链

CECBC

区块链

架构师训练营第十一周作业

zamkai

架构2期-大作业(一)

浮生一梦

大作业 2组 架构师训练营第2期

驱动力读书笔记之五

张老蔫

28天写作

日记 2021年2月7日(周日)

Changing Lin

个人感悟 2月春节不断更

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