无需重新搭建集群,轻松替换证书!RancherLabs

作者简介王海龙,Rancher中国社区技术经理,负责Rancher中国技术社区的维护和运营。拥有6年的云计算领域经验,经历了OpenStack到Kubernetes的技术变革,无论底层操作系统Linux,还是虚拟化KVM或是Docker容器技术都有丰富的运维和实践经验。

RancherServer的证书问题一直是Rancher技术社区里被频繁提到的问题。如果用户在首次搭建Rancher环境时没有考虑充分,后期需要替换证书时一般操作是重新搭建集群。

本文将介绍如何在原有集群中替换Rancher证书,从而免去重新搭建集群的操作。

撰写本文时使用的Rancher版本为v2.5.x,其他版本操作可能略有不同。

下文将分别介绍单节点和高可用的RancherServer如何替换证书。

本节将演示如何把单节点Rancher的默认证书替换为自签名证书。

前期准备

假设你已经搭建了一个单节点的Rancher,并且创建了一个下游业务集群:

接下来,从浏览器查看Rancher证书为dynamic,颁发者为dynamiclistener-ca,这是Rancher生成的默认证书:

因为替换证书之后,RancherAgent需要使用域名连接RancherServer,业务集群会出现无法连接的情况,所以需要提前从RancherUI下载业务集群的kubeconfig,并且将context切换到demo-rancher-demo2。切换后,可以不通过Rancherapi直接访问k8sapi-server。

1.#kubectlconfigget-contexts2.CURRENTNAMECLUSTERAUTHINFO3.NAMESPACE4.demodemodemodemo-rancher-demo2demo-rancher-demo2demo5.Listitem6.#kubectlconfiguse-contextdemo-rancher-demo27.Switchedtocontext"demo-rancher-demo2".8.Listitem9.#kubectlconfigcurrent-context10.demo-rancher-demo211.Listitem12.#kubectlgetnodes13.NAMESTATUSROLESAGE14.VERSION15.rancher-demo2Readycontrolplane,etcd,worker58mv1.19.6RancherServer替换为自签名证书

1、备份RancherServer

参考官方文档【升级单节点Rancher】:

1.#dockerps2.CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES3.b0e3062667a2rancher/rancher"entrypoint.sh"2hoursagoUp2hours0.0.0.0:80->80/tcp,0.0.0.0:443->443/tcpsilly_swanson4.Listitem5.#dockerstopsilly_swanson6.silly_swanson7.Listitem8.#dockercreate--volumes-fromsilly_swanson--namerancher-datarancher/rancher9.aca6f6c791f7caa870e96e1c9f6370a6f015af62c65d73f1f6f80c56587a75422、基于备份,使用自定义证书启动RancherServer

dockerrun-d--privileged--volumes-fromrancher-data\--restart=unless-stopped\-p80:80-p443:443\-v$PWD/certs/cert.pem:/etc/rancher/ssl/cert.pem\-v$PWD/certs/key.pem:/etc/rancher/ssl/key.pem\-v$PWD/certs/ca.pem:/etc/rancher/ssl/cacerts.pem\--privileged\rancher/rancher:v2.5.5注意:

并且,cluster-agent容器报错:

kubectllogs-fcattle-cluster-agent-77cfbbff8b-ldt9n-ncattle-systemtime="2021-02-09T09:32:08Z"level=errormsg="Remotedialerproxyerror"error="x509:cannotvalidatecertificatefor192.168.64.55becauseitdoesn'tcontainanyIPSANs"W020909:32:15.1064481warnings.go:77]apiextensions.k8s.io/v1beta1CustomResourceDefinitionisdeprecatedinv1.16+,unavailableinv1.22+;useapiextensions.k8s.io/v1CustomResourceDefinitiontime="2021-02-09T09:32:18Z"level=infomsg="Connectingtowss://192.168.64.55/v3/connectwithtokenj6t7l2wkvz9k9xbdfnlf6kgxngfl89htl2svnmb4qgkrv7wl9ccp5m"time="2021-02-09T09:32:18Z"level=infomsg="Connectingtoproxy"url="wss://192.168.64.55/v3/connect"time="2021-02-09T09:32:18Z"level=errormsg="Failedtoconnecttoproxy.Emptydialerresponse"error="x509:cannotvalidatecertificatefor192.168.64.55becauseitdoesn'tcontainanyIPSANs"3、通过kubectl删除daemonset.apps/cattle-node-agent和deployment.apps/cattle-cluster-agent

1.kubectl-ncattle-systemdeletedaemonset.apps/cattle-node-agentdeployment.apps/cattle-cluster-agent2.daemonset.apps"cattle-node-agent"deleted3.deployment.apps"cattle-cluster-agent"deleted4、进入到Setting->AdvancedSettings页面,修改server-url的地址为你定义的域名,本例为:rancher-demo.kingsd.top

5、导出集群YAML

在RancherUI上创建APItoken(用户->API&Keys)并保存BearerToken

选择集群后,在RancherUI(格式为c-xxxxx)中找到其clusterid,并在地址栏中找到它。

根据以上获取的变量替换:RANCHERURL、CLUSTERID、TOKEN(主机需要安装curl和jq)

稍等片刻,cattle-cluster-agent和cattle-node-agent将会重新运行:

kubectl-ncattle-systemgetpodsNAMEREADYSTATUSRESTARTSAGEcattle-cluster-agent-c9774fcdd-rwdk51/1Running22m14scattle-node-agent-r58w41/1Running02m13s业务集群状态重新变为Active:

此时,再次查看RancherServer的证书,已经替换为自签名的证书:

本节将演示如何将RancherHA从自签名证书替换为可信证书

本例RancherHA的采用L4的搭建方式,如果L7方式搭建的RancherHA,从LB中替换证书即可。

假设你已经搭建了一个高可用的自签名Rancher集群,并且创建了一个下游业务集群:

接下来,从浏览器查看Rancher证书为自签的rancher.kingsd.top,颁发者为ca-rancher.kingsd.top:

将自签名证书替换为可信证书

1、从secret中移除自签名证书

1.kubectl-ncattle-systemdeletesecrettls-rancher-ingress2.kubectl-ncattle-systemdeletesecrettls-ca2、使用可信证书重新创建tls-rancher-ingress

1.kubectl-ncattle-systemcreatesecrettlstls-rancher-ingress\2.--cert=rancher.kingsd.top.pem\3.--key=rancher.kingsd.top.key3、从当前安装的RancherHelmchart中获取用--set传递的值。

1.#helmgetvaluesrancher-ncattle-system2.USER-SUPPLIEDVALUES:3.hostname:rancher.kingsd.top4.ingress:5.tls:6.source:secret7.privateCA:true4、将上一步中的所有值用--setkey=value追加到命令中。

1.#helmupgraderancherrancher-latest/rancher\2.--namespacecattle-system\3.--sethostname=rancher.kingsd.top\4.--setingress.tls.source=secret因为只有自签名证书才需要使用参数:privateCA:true,所以更新集群为可信证书时,需要删除该参数

以上是一个例子,可能有更多上一步的值需要追加。另外,也可以将当前的值导出到一个文件中,并在升级时引用该文件。

参考中文文档中【高可用升级指南】部分:

本例是将证书替换为可信证书,如果要替换为其他类型的证书,请参考【高可用升级指南】里其他选项的参数。

验证

稍等片刻,Rancherpod更新成功之后即可通过浏览器访问RancherServer。

此时,再次查看RancherServer的证书,已经替换为可信证书:

无论是单节点还是高可用的RancherServer替换证书,思路基本一致,都是使用新的证书去更新原集群,如果替换证书过程中域名有变更或出现业务集群agent无法连接RancherServer的情况,可以参考本文中替换单节点RancherServer证书的步骤修改server-url,然后重新创建cattle-cluster-agent即可。

THE END
1.harbor自签名证书rke2rancher自签名证书harbor 自签名证书 rke2 rancher自签名证书 权威ssl 证书与默认自签名 ssl 证书或者自己生成的自签名证书有所不同,在权威 ssl 证书模式下,agent 通过 IP 访问无法通过证书的校验。因为 ssl 证书在生成的时候会与 IP 或者域名有一个绑定关系,而权威证书生成时候是基于申请证书时使用的域名,所以当用其他 IP 访问https://blog.51cto.com/u_16213634/10588302
2.使用Docker将Rancher安装到单个节点中Rancher选项D:Let's Encrypt 证书 选项E:Localhost 隧道,不使用证书 选项A:使用 Rancher 生成的默认自签名证书? 如果你在不考虑身份验证的开发或测试环境中安装 Rancher,可以使用 Rancher 生成的自签名证书安装 Rancher。这种安装方式避免了自己生成证书的麻烦。 https://ranchermanager.docs.rancher.com/zh/pages-for-subheaders/rancher-on-a-single-node-with-docker
3.<自用文儿制作(自签名)证书脚本>script:certificate脚本生成的是“自签名证书”,非互联网使用的。 server.csr 实际上是一个中间文件,正规的 CA 机构使用这个 CSR 文件生成正式的证书给你/你的组织。 99.99% 能上自签名证书的主儿,都用不到 server.csr 这个文件。 如果你是那 0.001% ,可以移除脚本中的倒数第二行注释。https://blog.csdn.net/davenian/article/details/145417172
4.CDN上传证书时的格式要求CDN(CDN)CDN只支持上传PEM格式的证书和私钥,针对不同证书颁发机构的证书,对证书内容的上传有不同的要求。 Root CA机构颁发的证书 Root CA机构可以颁发多个证书,这些证书可以用于Apache、IIS、Nginx和Tomcat等Web服务器。阿里云CDN使用的证书格式与Nginx兼容,包含后缀为.crt(证书)和后缀为.key(私钥)的这两个文件。 https://help.aliyun.com/zh/cdn/user-guide/certificate-formats
5.nginx配置证书和私钥进行SSL通信验证@[toc]一背景正常项目的这将使用私钥和证书请求生成一个自签名证书文件,名为 certificate.crt。 5. 使用证书:现在你已经生成了自签名证书 certificate.crt,可以将其用于服务器或应用程序的 SSL/TLS 配置中。具体步骤取决于你使用的服务器软件或编程语言。 请注意,自签名证书不会被公共信任的根证书颁发机构所信任,因此在使用自签名证书时,https://article.juejin.cn/post/7464036507452981260
6.车辆安全中的证书与密钥介绍与配置模拟电子头条此外,还有一些其他常见的证书文件格式,如CSR(Certificate Signing Request,证书签名请求)文件。证书申请者在生成私钥的同时,也会生成一个CSR文件,这个文件包含了申请者的公钥和身份信息等内容。将CSR文件提交给证书颁发机构后,证书颁发机构会使用其根证书的私钥对CSR文件进行签名,从而生成一个包含公钥的证书文件,也就是颁https://www.eeworld.com.cn/emp/aes/a392712.jspx
7.Pengcheng'sBlogLet's Encrypt 免费泛域名 SSL 证书申请教程分享2024/07/14鹏程 图解彻底搞懂HTTPS教程分享2024/07/21鹏程 部署自己的私人图床-兰空图床 Lsky Pro安装部署2024/07/28鹏程 12个SQL优化方法教程分享2024/08/04鹏程 Oracle 11G-Docker部署安装部署2024/08/11鹏程 https://blog.pengcheng.team/
8.如何在CentOS7上配置SSL?1、生成自签名证书(可选):如果只是内部测试环境,可以使用OpenSSL生成自签名证书,首先创建密钥文件和证书请求文件,如openssl genrsa outServer.key 2048生成私钥,openssl req new key server.key out server.csr生成证书签名请求,然后根据证书签名请求生成自签名证书,openssl x509 req days 365 in server.csr signkey https://blog.huochengrm.cn/pc/23861.html
9.K8S集群内部署Rancher2.5.16其他实例文章**部署 Rancher2.5.16 到 K8S 集群** 本文将指导您如何在 Kubernetes(简称 K8S)集群中部署 Rancher2.5.16。Rancher 是一个开源的容器管理平台,用于管理和监控 Kubernetes 集群。 **前提条件** * 您已经安装并配置了 K8S 集群。 * 您有一个可用的 Docker Registry(例如 Docker Hub)。 http://www.shili8.cn/article/detail_20002693966.html
10.2025013015:32:21·OpenDocCN/rhcenoteswizardforcel committed Jan 30, 2025 1 parent 8530385 commit d4b8b2a Showing 18 changed files with 269 additions and 0 deletions. Whitespace Ignore whitespace Split Unified docs img dead6a5aefa3c4fbb5f15393940a7be1_1.png dead6a5aefa3c4fbb5f15393940a7be1_11.png dead6a5aefa3c4fbb5fhttps://github.com/OpenDocCN/rhce-notes-zh/commit/d4b8b2ac82754fe788318244c6a0a37be6e9fed8
11.20200623rancher自签名ca证书问题1、生成自签名ca证书(rancher官方) 生成自签名ssl证书 https://rancher2.docs.rancher.cn/docs/installation/options/self-signed-ssl/_index 生成的内容有 2、将证书导入rancher 菜单: 资源=》密文=》证书列表 将生成的 tls.key(或gitlab.cost.tcl.com.key,两者一致)内容复制粘贴到“私钥”处, https://www.jianshu.com/p/9eb3766b2967
12.准备5自签名ssl证书《Rancherv2.0使用手册》5 - 自签名ssl证书一、HTTP over SSL二、数字证书(Certificate)数字证书拥有以下几个优点:证书类型扩展名三、自签名证书及自签名类型自签名类型四、生成自签名证书1、一键生成ssl自签名证书脚本2、脚本说明五、验证证书 Rancher是一套容器管理平台,它可以帮助组织在生产环https://www.bookstack.cn/read/rancher-v2.x/43c8d247182c02a2.md
13.在Rancher中使用证书管理器进行自签名证书腾讯云开发者社区在本教程中,我们将向您展示如何在Ubuntu 18.04上设置用于Apache Web服务器的自签名SSL证书。https://cloud.tencent.com/developer/ask/sof/106865380
14.Rancher高可用安装自签名证书+4层LB权威教程本文介绍如何使用自签名证书来安装高可用的 Rancher,更多安装方式,可参考官网文档。 关于DNS 生产环境安装 Rancher 高可用,需要有一个 DNS 服务器来解析 Rancher 的域名。 这个DNS 不是必须的,可以通过在 hosts 文件中映射 Rancher 的域名来解决没有 DNS 服务器的问题,但无论是测试环境和生产环境都不推荐使用 hostshttps://forums.rancher.cn/t/rancher-4-lb/1681
15.安装Rancher并使用SSLRancher中文文档v1.6除了一般的Rancher Server需求外,你还需要: 有效的SSL证书:如果你的证书并不是标准的Ubuntu CA bundle,请参考以下内容使用自签名证书。 相关域名的DNS配置 Rancher Server 标签 Rancher Server当前版本中有2个不同的标签。对于每一个主要的release标签,我们都会提供对应版本的文档。 https://www.wenjiangs.com/doc/3rrilhwycl
16.TLS使用指南(一):如何在Rancher2.x中进行TL在这一状态下,Rancher会为你到达的任何主机名自动生成一个证书。如果是一个IP(如10.11.12.13),那么Rancher会为该IP生成一个自签名(使用cattle-ca)证书。如果是以一个主机名(如my-rancher.example.org)到达此新的Rancher安装目录,同样也会以相同的方式生成一个自签名证书。 http://shouzuofang.com/article/gjdeid.html
17.使用OpenSSL生成Kubernetes证书的介绍docker证书签名请求文件 命令:openssl req -new -key server.key -subj “/CN=host121” -out server.csr 1 2 [root@host121 k8scert]# openssl req -new -key server.key -subj "/CN=host121" -out server.csr [root@host121 k8scert]# subj中设定的subject的信息为用户自己的数据,一般将CN设定为域名/机https://www.jb51.net/article/153852.htm
18.使用Rancher管理Kubernetes集群个人文章证书生成 Rancher Server 默认需要 SSL/TLS 配置来保证访问的安全性。 提示:如果您想要将 SSL/TLS 访问在外部终止,请查看使用外部 TLS 负载均衡器。 有三种关于证书来源的推荐选项,证书将用来在 Rancher Server 中终止 TLS: Rancher 生成的自签名证书:在这种情况下,您需要在集群中安装cert-manager。 Rancher 利用https://segmentfault.com/a/1190000040132513
19.Rancher安装部署云运维将K8S集群导入Rancher:(master 执行) bash 1 kubectl apply -f https://rancher-dev.gao7ts.cn/v3/import/9jmlljkzdmw9jngv868f7dzpdfjmqxzhb569l9jh77pptcm47lwdnn_c-m-9fstsww4.yaml 如果您收到“由未知授权机构签名的证书”错误,则Rancher安装具有自签名或不受信任的SSL证书。运行以下命令以绕过证书验https://www.172173.com/2023/02/22/k8s-rancher-install/
20.科学网—原创Rancher2.0离线部署详解另外,请注意,在默认情况下SSL连接没有启用,如果你的SMTP服务器需要SSL,那么你应该通过设置email_ssl = TRUE参数来启用SSL,但不支持STARTTLS。如果电子邮件服务器使用自签名证书或不受信任证书,则需要设置email_insecure = true。有关email_identity的详细说明,请参阅rfc2595https://blog.sciencenet.cn/blog-50618-1137575.html