Rancher2.4替换权威证书

简述

一开始安装rancher时使用的是自签名证书,现需要替换成权威证书,方便内部的一些使用和流程

替换如下:

rancher.zerchin.com(自签名) → rancher.zerchin.xyz(权威证书)

前提

  • k8s-v1.17.14

  • rancher-v2.4.12

架构

Rancher是以7层负载均衡的方式部署在集群中,用户访问rancher地址后,首先解析到nginx负载均衡上,然后在nginx负载均衡上作为ssl终止,最后nginx负载均衡反向代理到后端的rancher server的80端口上。

所以,替换证书的操作,只需要在nginx负载均衡上进行替换即可

Architecture_diagram

步骤

查看当前rancher使用的证书

在浏览器地址栏中可以看到,由于当前的证书是自签名证书,所以显示是不安全的

ui-1

申请权威证书

这里我是用腾讯云申请的证书(免费为腾讯打了波广告)

appli_cert

证书颁发之后,将证书下载下来,并上传到nginx负载均衡上,并重新命名

1
2
# mv 1_rancher.zerchin.xyz_bundle.crt tls_new.crt
# mv 2_rancher.zerchin.xyz.key tls_new.key

修改nginx配置

默认的配置如下:

nginx_conf

其中主要关注这几个信息:

  1. server_name:证书的签发地址
  2. ssl_certificate:证书存放的地址
  3. ssl_certificate_key:证书的key存放的地址
  4. proxy_set_header:访问后端rancher的地址

修改成:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
http {
server {
listen 443 ssl;
server_name rancher.zerchin.xyz; ## 替换成新的域名
ssl_certificate /etc/nginx/ssl/tls_new.crt; ## 替换新的证书地址
ssl_certificate_key /etc/nginx/ssl/tls_new.key; ## 替换新的key的地址

location / {
proxy_set_header Host rancher.zerchin.xyz; ## 替换新的访问地址
...
...
server {
server_name rancher.zerchin.xyz; ## 替换新的域名
...
...

修改完后重启nginx

1
2
nginx -t
nginx -s reload

helm更新rancher配置

rancher部署在后端的k8s上,并通过ingress-nginx暴露出来,由于我们在nginx负载均衡上更改了访问地址,所以需要更新rancher的ingress

获取rancher的chart value

1
helm get values -n cattle-system rancher

会输出如下结果:

1
2
3
4
USER-SUPPLIED VALUES:
hostname: rancher.zerchin.com
privateCA: true
tls: external

使用helm更新rancher,并填充上一步获取的value,其中将hostname配置成新的访问地址

1
helm upgrade rancher rancher-stable/rancher -n cattle-system --set hostname=rancher.zerchin.xyz --set privateCA=true --set tls=external --version v2.4.12

由于使用了权威证书,所以privateCA这个参数不用加上去,另外version为具体的rancher版本,需要带v

浏览器查看证书

rancher更新完之后,浏览器查看证书是否替换成功

使用新地址去访问

ui-2

可以看到,已经能够使用新的域名去访问,并且显示的是可以信任的安全连接

修改server_url

登录进去后,我们需要修改server_url地址

在 全局 -> 系统设置 -> 高级设置 中,找到server-url,并替换成现在新的地址

server_conf

更新下游k8s集群

之前rancher创建和纳管的k8s集群,还是监听旧的rancher地址,所以我们需要更新下游k8s集群访问rancher的地址

  1. 打开集群API

api-1

  1. 找到clusterRegistrationTokens,点进去

api-2

  1. 找到id为system,复制insecureCommand后面的命令到k8s集群中执行

api-3

  1. 执行第三步复制的命令

api-4

  1. 所有的集群都需要执行该操作,等待cattle-cluster-agent和cattle-node-agent启动完毕可以了

finished

替换成功