k3s&&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
重要:本文提到要备份的地方,请老老实实的备份,否则集群损坏启动不了只能重装
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
# 在其他master另外的主机执行
# 注意,网上有文章说是把主master的pki文件夹复制覆盖到其他机器,但是经过实践,有一定的概率导致etcd启动不了,etcd报错tls错误。这是因为etcd使用tls链tls进行连接,每一个etcd实例都有单独的tls证书。如果因为参考复制覆盖了pki目录,而没有备份文件导致集群无法启动的情况下
# 重新生成新的证书
# kubeadm init phase certs all
# 将重新生成的pki目录中的etcd改名为etcd2
# 复制主master证书pki目录的所有文件到目标主机
# 将ectd2目录的 **peer.crtcrt** **server.crtcrt** 覆盖到ect目etcd目录
# 使用 kubeadm certs renew all 重新生成证书
# 重启kubelet
systemctl restart kubelet
# 重新部署3个4个容器(删除POD即可)
# etc 、 kube-apiserver 、 kube-scheduler 、 kube-controlle
rancher证书过期
# 查看rancher证书是否过期状态
curl -vvv https://ip:port
# 删除rancher证书目录,或者移动备份
/data/vpclub/rancher-2.0/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其他注意事项
- 更换机器后,主机名重复不能加入集群解决办法
# 在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