TOS etcd ca 及相关证书续签

目录

1. 背景

1.1. 背景

1.2 影响版本

2. 续签 etcd-ca 证书

2.1 备份节点上原有证书目录

2.2 续签 etcd-ca.pem

2.4 拷贝新的 ca 证书

3. 续签其他证书

3.2 依赖 etcd-ca.pem 相关证书

3.2.1 etcd 证书

4. 重启服务

4.1 重启 etcd 服务

4.2 重启 apiserver 服务

4.3 重启 Prometheus operator

5. 更新metainfo目录下的证书和manager数据库

5.1 更新metainfo目录下证书(开启ha时所有manager节点都要改)

5.2 更新manager数据库


1. 背景

1.1. 背景

tos 老版本环境上 ca 系统证书都即将到期,etcd-ca.pem 及 transwarp-warpdrive-ca.pem 将于 2023 年到期,ca.pem 将于 2025 年到期,可以进入到 /srv/kubernetes/ (tdc环境)目录下,使用下面命令查看过期时间:

# openssl x509 -text -in ca.pem | grep "Not"

            Not Before: Dec 10 05:07:35 2015 GMT

            Not After : Dec  7 05:07:35 2025 GMT

# openssl x509 -text -in etcd-ca.pem | grep "Not"

            Not Before: Mar 11 10:30:00 2018 GMT

            Not After : Mar 10 10:30:00 2023 GMT

# openssl x509 -text -in transwarp-warpdrive-ca.pem | grep "Not"

            Not Before: Aug 14 09:05:00 2018 GMT

            Not After : Aug 13 09:05:00 2023 GMT

另外依赖于上述 ca 证书的其他证书也都在对应时间到期,针对这种情况,本文主要讲解 etcd-ca 及依赖证书的续期。其他ca证书的续签后续会更新,具体的操作步骤如下:

  1. 续签CA证书
  2. 续签CA证书签发的所有证书
  3. 更新secret token
  4. 保证CA续签完成后,业务重启正常运行

1.2 影响版本

 TDC:

  • 1.9.x <= tos <= 2.0.x

TDH:

  • 1.9.x <= tos <= 2.1.x

tos 1.8.x etcd 未使用证书,不受影响

2. 续签 etcd-ca 证书

续签 ca 证书需要对应的 ca-key 文件,默认环境部署完成 etcd-ca.key 及 transwarp-warpdrive-ca-key.pem 会不存在,需要从安装包拷贝 gencerts 目录,没有安装包的可以从本文最后下载,上传到第一台 master 节点上,后续续签及生成证书的操作默认都在第一台 master 节点。

gencerts 目录见,直接解压即可(tar -zxvf gencerts.tar.gz):gencerts.tar.gz

arm64 环境 安装包见:ftp://tosftp.transwarp.io/pub/tools/arm64/gencerts-arm64.tar.gz

2.1 备份节点上原有证书目录

集群的所有节点都可以备份下证书目录

# cp -r /srv/kubernetes /srv/kubernetes-20221116

2.2 续签 etcd-ca.pem

# cd market-web-installer/ansible-deploy/util/gencerts

# openssl x509 -in etcd-ca.pem -days 36500 -out etcd-ca-new.pem -signkey etcd-ca-key.pem     ## 依赖于原 etcd-ca.pem 和 etcd-ca-key.pem 生成 etcd-ca-new.pem

Getting Private key

# openssl x509 -text -in etcd-ca-new.pem | grep "Not"      ## 查看新 etcd-ca 证书过期时间

            Not Before: Nov 16 07:29:44 2022 GMT

            Not After : Oct 23 07:29:44 2122 GMT

# openssl verify -CAfile etcd-ca-new.pem /srv/kubernetes/etcd.pem   ## 使用任一个依赖于 etcd-ca.pem 生成的证书进行证书比对,这边使用的是 etcd.pem

/srv/kubernetes/etcd.pem: OK

到此 etcd-ca.pem 证书续期完毕,此时依赖于 etcd-ca.pem 的其他证书(etcd.pem)的有效期即为使用 openssl 命令查看的有效期。

2.4 拷贝新的 ca 证书

# cd market-web-installer/ansible-deploy/util/gencerts

# cp etcd-ca-new.pem /srv/kubernetes/etcd-ca.pem

# cd /srv/kubernetes     ## 拷贝 ca.pem etcd-ca.pem 到另外2台 master 节点的 /srv/kubernetes/ 目录下

# scp etcd-ca.pem tos156:/srv/kubernetes/

# scp etcd-ca.pem tos157:/srv/kubernetes/

3. 续签其他证书

续签证书也依赖于 gencerts 目录,下面有相关的 config 文件及 cfssl 工具,安装包下有这个目录,没有安装包的可以从本文最后下载,上传到第一台 master 节点上,后续续签及生成证书的操作默认都在第一台 master 节点。

3.2 依赖 etcd-ca.pem 相关证书

目前只有 etcd 证书依赖于 etcd-ca.pem,所以 etcd-ca.pem 证书更新,我们只需重新生成 etcd 相关证书就可以了。在生成 etcd 证书之前,首先确认下 config.json 文件,expiry 为 876000h,表示过期时间为 100 年,不是 876000h 记得修改下。

3.2.1 etcd 证书

# cd market-web-installer/ansible-deploy/util/gencerts

# ./cfssl gencert -ca=/srv/kubernetes/etcd-ca.pem -ca-key=etcd-ca-key.pem -config=config.json -profile=etcd -hostname=poc19,poc20,poc21,127.0.0.1,10.10.0.1,172.31.30.19,172.31.30.20,172.31.30.21 kubernetes-csr.json | ./cfssljson -bare etcd  ## 10.10.0.1 是 kubernetes的svc ip,可以通过kubectl get svc 的方式查看(若kubectl命令不可用,openssl x509 -text -in /srv/kubernetes-20221116/etcd.pem | grep DNS 查看备份文件的svc ip),以及 hostname ip 根据情况自行修改,生成 etcd.pem etcd-key.pem etcd-csr.pem

# openssl x509 -text -in etcd.pem | grep "Not"      ## 查看新生成 etcd 证书过期时间

            Not Before: Nov 16 07:29:44 2022 GMT

            Not After : Oct 23 07:29:44 2122 GMT

  

# cp etcd.* etcd-key.pem /srv/kubernetes/    ## 拷贝新生成的证书覆盖掉原来旧的

# scp etcd.* etcd-key.pem poc20:/srv/kubernetes/

# scp etcd.* etcd-key.pem poc21:/srv/kubernetes/

4. 重启服务

4.1 重启 etcd 服务

请注意: TDC 上 ETCD 是2379端口,TDH 上是 4001 端口

重启 etcd 服务前首先确认 etcd 集群正常运行

# ETCDCTL_API=3 etcdctl --cacert=/srv/kubernetes/etcd-ca.pem --cert=/srv/kubernetes/etcd.pem --key=/srv/kubernetes/etcd-key.pem --endpoints="https://tos156:2379,https://tos155:2379,https://tos157:2379" endpoint status

https://tos155:2379, 6cad647b758f935f, 3.4.14, 21 MB, false, false, 2, 1180668, 1180668,

https://tos156:2379, 61c379144f719920, 3.4.14, 21 MB, true, false, 2, 1180668, 1180668,

https://tos157:2379, 1c3310ae54285dc4, 3.4.14, 21 MB, false, false, 2, 1180668, 1180668,

3 台master 节点依次操作

# docker ps | grep k8s-etcd

03961bec748c   44476ed802de                           "sh -c 'etcd --data-…"    12 days ago   Up 12 days             k8s_etcd_k8s-etcd-test00_kube-system_b1bd8a3068d60f681eaf0334989d1975_0

3b1efa73106c   google_containers/pause:3.0            "/pause"                  12 days ago   Up 12 days             k8s_POD_k8s-etcd-test00_kube-system_b1bd8a3068d60f681eaf0334989d1975_0

# cd /opt/kubernetes/manifests-multi/

# mv etcd.manifest ../

# docker ps | grep k8s-etcd    ## 若等待10s后etcd的容器没有自动退出,手动docker rm -vf掉还在的etcd的容器;确认container 不存在后,继续后面步骤

# mv ../etcd.manifest .

# docker ps | grep k8s-etcd   ## 确保 container 正常运行

# ETCDCTL_API=3 etcdctl --cacert=/srv/kubernetes/etcd-ca.pem --cert=/srv/kubernetes/etcd.pem --key=/srv/kubernetes/etcd-key.pem --endpoints="https://tos156:2379,https://tos155:2379,https://tos157:2379" endpoint status    ## 查看 etcd 集群状态是否正常

4.2 重启 apiserver 服务

3 台master 节点依次操作

# docker ps | grep apiserver

67073242af85   8883a54794ca                           "sh -c 'kube-apiserv…"    5 days ago    Up 5 days              k8s_apiserver_k8s-apiserver-test00_kube-system_df2672a744aed3c038b31cac1325bcbb_0

df7e63f88254   google_containers/pause:3.0            "/pause"                  5 days ago    Up 5 days              k8s_POD_k8s-apiserver-test00_kube-system_df2672a744aed3c038b31cac1325bcbb_0

# cd /opt/kubernetes/manifests-multi/

# mv kube-apiserver.manifest ../

# docker ps | grep apiserver    ## 若等待10s后apiserver的容器没有自动退出,手动docker rm -vf掉还在的apiserver的容器,确认container 不存在后,继续后面步骤

# mv ../kube-apiserver.manifestt .

# docker ps | grep apiserver   ## 确保 container 正常运行

4.3 重启 Prometheus operator

tdh 集群此步不需要操作。

# kubectl delete secret -n monitor kube-etcd-certs

# kubectl create secret -n monitor generic kube-etcd-certs --from-file=/srv/kubernetes/etcd-ca.pem --from-file=/srv/kubernetes/etcd.pem --from-file=/srv/kubernetes/etcd-key.pem

# kubectl delete po -n monitor prometheus-prometheus-operator-prometheus-0 prometheus-prometheus-operator-prometheus-1

# kubectl get po -n monitor | grep prometheus-operator-prometheus   ## 确保pod 正常 running

5. 更新metainfo目录下的证书和manager数据库

manager-6.0.1811a之后的版本会存储tos证书到数据库中分发到各个节点,同时生成其他证书相关的逻辑会使用metainfo中的etcd-ca.pem,所以需要更新相关文件和数据库数据,防止后续角色变更分发证书导致证书再次失效

注:新装和升级环境(9.2之前版本):

  1. 需要先直接更新升级或新装版本manager产品包下metainfo目录下的etcd-ca证书文件,文件地址在安装包解压目录下installer/service_meta/TOS/tos版本/templates/gencerts,并更新改目录下的config.json文件中的expiry 为 876000h
  2. 升级环境还需要按照5.2步骤操作一下

5.1 更新metainfo目录下证书(开启ha时所有manager节点都要改)

已安装暂不升级环境,找到当前tos版本的对应的metainfo目录,将上面新生成的etcd-ca.pem证书替换到对应的/var/lib/transwarp-manager/master/connent/meta/services/TOS/tos版本/templates/gencerts/目录下

更新改目录下的config.json文件中的expiry 为 876000h

5.2 更新manager数据库

数据库登录方式 如何查看后台数据

备份原表

create table manager_info_bak20220214 like manager_info;
 
insert into manager_info_bak20220214 select from manager_info;

涉及的表 manager_info,需要update更新下该表中key为etcd-ca.pem、etcd.pem、etcd-key.pem的数据,防止下次证书分发为旧的证书内容
更新方式有下面两种,注意:之前未更新只删除表数据的环境,后续也需要执行下下面的脚本或者手动insert和update,对manager数据库表做更新操作,否则扩容slave时会报错

  • 可以直接在manager节点上执行下面的脚本更新数据库数据,执行脚本前需保证/srv/kubernetes/目录下的证书文件为更新过的文件
    update_manager_info.sh
  • 直接执行update的sql命令

    update manager_info set `value`="etcd-ca.pem证书内容" where `key`="etcd-ca.pem";

    update manager_info set `value`="etcd.pem证书内容" where `key`="etcd.pem";

    update manager_info set `value`="etcd-key.pem证书内容" where `key`="etcd-key.pem";

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值