Skip to main content

更换前端证书

介绍如何使用自定义证书替换系统前端默认的证书。

tip

本文只适用于使用 ocboot 部署的环境。

如果是使用 Helm 部署的环境,请在自己的 kubernetes 集群里面更换证书。

另外 docker compose 部署的环境一般只用于测试,还不支持更换证书。

默认部署完成后,访问前端界面,浏览器会提示不安全的 SSL 连接,原因是前端默认使用的是自签发的证书。本文介绍如何使用自定义证书替换掉前端默认的证书。

更换前端证书操作步骤

假设已经准备好的证书文件为:cert.pemcert.key,域名为 foo.bar.com

1. 将证书导入 kubernetes 集群

将证书以 secret 的形式保存到 kube-system namespace 中。

# 创建证书 secret
$ kubectl create secret tls default-ssl-cert --key cert.key --cert cert.pem -n kube-system

2. 创建 TLSStore 设置默认证书

K3s 使用 Traefik 作为 Ingress Controller,通过 Traefik 的 TLSStore CRD 可以设置全局默认证书。

创建文件 default-tls-store.yaml

apiVersion: traefik.io/v1alpha1
kind: TLSStore
metadata:
name: default
namespace: kube-system
spec:
defaultCertificate:
secretName: default-ssl-cert
warning

TLSStore 的 name 必须为 default,Traefik 只识别这个名字作为全局默认证书配置。

$ kubectl apply -f default-tls-store.yaml

应用后 Traefik 会自动加载新证书,正常情况下无需重启。如果等待一段时间后证书仍未生效,可以尝试重启 Traefik:

$ kubectl get pods -n kube-system | grep traefik | awk '{print $1}' | xargs kubectl delete pods -n kube-system

修改服务 api_server 入口配置

完成以上证书替换步骤后,如果使用域名 foo.bar.com 访问,还需要修改云平台的默认 api_server 配置,这个配置会影响前端 VNC 连接的地址。将旧的 https://ip 访问地址改为 https://foo.bar.com,操作如下:

$ climc service-config-edit common
default:
api_server: https://foo.bar.com
...

然后重启 webconsole 服务,操作如下:

$ kubectl delete pods -n onecloud $(kubectl get pods -n onecloud | egrep 'webconsole|apigateway' | awk '{print $1}')

配置完成后,等待 webconsole 和 apigateway pod 重启后,就可以通过 https://foo.bar.com 访问前端了。

更改前端HTTPS 443端口为其它端口的方法步骤

假设平台登陆地址为 https://10.127.90.221,更改443端口为8443,步骤如下:

第一个控制节点执行下面的命令:

# 进入对应 manifests 目录
$ cd /var/lib/rancher/k3s/server/manifests

# 编辑 traefik-ds.yaml
$ vim traefik-ds.yaml

修改里面的entrypoints.websecure.address端口。

......
containers:
- args:
- --entrypoints.web.address=:80/tcp
# 修改这里的 entrypoints.websecure.address 为 8443 端口
- --entrypoints.websecure.address=:8443/tcp
- --api.dashboard=false
- --ping=false
.....

等待 traefik pod 重建变为 Runing :

$ kubectl get pods -n kube-system | grep traefik	
traefik-t5b6l 1/1 Running 0 21s

浏览器输入 https://10.127.90.221:8443 访问控制台,ip为原控制台的地址。