k3s证书过期&ks8证书过期&rancher 轮换证书



参考网址

https://mp.weixin.qq.com/s?__biz=MzkyNzM4Nzk1NQ==&mid=2247500723&idx=1&sn=64def8cd6ec7fd874440690f1f589a3a
http://kingsd.top/2020/07/01/k3s-cert-rotary/
https://www.cnblogs.com/databank/p/16334715.html

重要：本文提到要备份的地方，请老老实实的备份，否则集群损坏启动不了只能重装
【推荐】使用10年证书一键脚本
仅适用适用kubeadm安装的集群
相关脚本： https://github.com/yuyicai/update-kube-cert
本地加速下载：https://iovhm.com/uploads/software/k8s/update-kubeadm-cert.sh
# 查看证书过期情况
kubeadm certs check-expiration

# 赋予执行权限
chmod 777 update-kubeadm-cert.sh

# 一键更新所有证书
./update-kubeadm-cert.sh all

# 一键更新master证书（既排除etcd证书）
./update-kubeadm-cert.sh master

rancher证书过期
# 查看rancher证书是否过期状态
curl -Ikv https://ip:port

# 进入到容器
docker exec -it <rancher_server_id> /bin/bash

# 执行命令
kubectl --insecure-skip-tls-verify -n kube-system delete secrets k3s-serving
kubectl --insecure-skip-tls-verify delete secret serving-cert -n cattle-system

# 删除或者移动备份证书目录(容器内)
mv /var/lib/rancher/k3s/server/tls /var/lib/rancher/k3s/server/tls-20250507
rm -rf /var/lib/rancher/k3s/server/tls

# 如果容器无法进入
rm -rf data/k3s/server/tls

# 两次重启rancher，第一次为重新生成证书，第二次为加载证书

# 查看rancher-agent的集群代理容器状态
kubectl get po -n cattle-system

# 查看ranche agent容器状态,具体根据rancher版本查看对应的容器
docker ps -a|grep cattle

# 查看cattle-agent日志以获得更多信息
docker logs -f <cattle-agent-container-name>

集群不可用恢复

# 删除 agent，具体的名称要使用kubectl get ns
kubectl -n cattle-system delete daemonset.apps/cattle-node-agent deployment.apps/cattle-cluster-agent

# 更新集群，全局，系统设置，server-url；非必要步骤

# 设置环境变量
RANCHERURL="https://192.168.0.10:8000"

# 集群ID
CLUSTERID="c-8dlc7"

# 在当前登录用户菜单下创建新的toke,用户,api&&keys。把Bearer Token记录下来
# Token
TOKEN="token-8kdfz:f4kgn4ptrq92wxkmqlzjhf9wntbxc4jpnnwq6spnv6mlhm76259wl6"

# 安装jq
yum install -y epel-release
yum install -y jq

# 验证证书
curl -s -H "Authorization: Bearer ${TOKEN}" "${RANCHERURL}/v3/clusterregistrationtokens?clusterId=${CLUSTERID}" | jq -r '.data[] | select(.name != "system") | .command'

# 此时返回新的导入连接
curl -s -k -H "Authorization: Bearer ${TOKEN}" "${RANCHERURL}/v3/clusterregistrationtokens?clusterId=${CLUSTERID}" | jq -r '.data[] | select(.name != "system") | .insecureCommand'

# 重新导入集群
curl --insecure -sfL https://192.168.0.10:8000/v3/import/sztcbkgpcffdvmrd8rn9qvd9flp595np5zcss6xljqk89jqkdx8rhf.yaml |k3s kubectl apply -f -

k3s证书过期

提示：k8s简化了安装过程，后续基础环境不在使用k3s而是已使用k8s
# 如果是k3s（k8s）提示证书过期，则先执行如下操作
# 如果集群证书没过期可以不用加 --insecure-skip-tls-verify=true 这个参数标识指不验证TLS

k3s kubectl --insecure-skip-tls-verify=true delete secret k3s-serving -n kube-system

# 删除k3s集群内的证书

kubectl delete secret k3s-serving -n kube-system

# 备份原文件

mkdir -p tlsbak
cp /var/lib/rancher/k3s/server/tls/** ./tlsbak -rf
rm /var/lib/rancher/k3s/server/tls/dynamic-cert.json

# 查看证书是否过期，或者直接从浏览器点击证书查看
openssl x509 -noout -dates -in server-ca.crt

# 重启k3s
systemctl restart k3s

手动续期k8s证书过期（很大几率导致集群无法启动，不推荐，有诸多排错过程）
# 备份配置文件

mkdir -p /data/vpclub/kubernetes-bak/kubernetes-20240620
cp /etc/kubernetes/** /data/vpclub/kubernetes-bak/kubernetes-20240620 -r

# 在主master执行，查看证书过期情况
kubeadm certs check-expiration

# 重新生成证书，如果你是单机，可以用这个命令
# 如果你是集群，不要用这个命令
# 如果你是集群，不要用这个命令
kubeadm certs renew all

# 如果你是集群，需要逐个更新证书，否则回导致ETCD集群不可用
kubeadm certs renew apiserver
kubeadm certs renew apiserver-etcd-client
kubeadm certs renew apiserver-kubelet-client
kubeadm certs renew etcd-healthcheck-client
kubeadm certs renew etcd-peer
kubeadm certs renew etcd-server
kubeadm certs renew front-proxy-client
kubeadm certs renew scheduler.conf
kubeadm certs renew admin.conf

# 在其他master另外的主机执行如上三步。

# 重启kubelet
systemctl restart kubelet
# 重启docker
systemctl restart docker

# 重新部署4个容器（删除POD即可）
# etcd 、 kube-apiserver 、 kube-scheduler 、	kube-controlle

网上有文章说是把主master的pki文件夹覆盖到其他机器，但是经过实践，有一定的概率导致etcd启动不了，etcd报tls错误。 这是因为etcd使用tls进行连接，每一个etcd实例都有单独的tls证书。如果因为复制覆盖了pki目录、而没有备份文件导致集群无法启动的情况下,此时需要重新生成新的证书
# 重新生成证书
kubeadm init phase certs all

# 将重新生成的pki目录中的etcd改名为etcd2
mv etcd/ etcd2/

# 复制主master证书pki目录的所有文件到目标主机
scp -r /etc/kubernetes/pki/** 172.18.41.4:/etc/kubernetes/pki/

# 将ectd2目录的 **peer.crt** **server.crt** 覆盖到etcd目录
cp etcd2/*peer.crt ./etcd/
cp etcd2/*server.crt ./etcd/

# 使用 kubeadm certs renew all 重新生成证书

K3S其他注意事项

更换机器后，主机名重复不能加入集群解决办法

# 在node主机

cat /etc/rancher/node/password

# 在 control panel （master）

cat /var/lib/rancher/k3s/server/cred/node-passwd

# 将两边的密码保持一致，或者把某行删除

# 可能需要修改k3s.services的token

# 查看集群加入token
cat /var/lib/rancher/k3s/server/node-token

# 替换noded加入token

sed -i "s/<old-token>/<new-token>/g" /usr/lib/systemd/system/k3s.service

# 重新加载服务配置
systemctl daemon-reload

# 重启服务
systemctl restart k3s

