查看证书过期时期

[root@node1 ~]# openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep ' Not '
Not Before: Sep 4 08:29:00 2019 GMT
Not After : Sep 3 08:29:02 2020 GMT

备份etcd

[root@node1 etcd-backup]# export ETCDCTL_API=3
[root@node1 etcd-backup]# etcdctl snapshot save "/root/$(date +%Y%m%d_%H%M%S)_snapshot.db" --cacert=/etc/ssl/etcd/ssl/ca.pem --cert=/etc/ssl/etcd/ssl/node-node1.pem --key=/etc/ssl/etcd/ssl/node-node1-key.pem --endpoints=https://192.168.10.132:2379
Snapshot saved at /root/20200814_142210_snapshot.db

master1备份证书

cp -ar /etc/kubernetes{,.bak}

Kubespray部署的k8s会生成以下证书

K8s组件之间认证需要的证书

ca.crt ca.key

apiserver.crt apiserver.key

apiserver-kubelet-client.crt apiserver-kubelet-client.key

front-proxy-ca.crt front-proxy-ca.key front-proxy-client.crt front-proxy-client.key

sa.key sa.pub

Etcd认证的证书

ca.pem ca-key.pem

admin-node*.pem admin-node*-key.pem

member-node*.pem member-node*-key.pem

node-node*.pem node-node*-key.pem

ca.crt默认是10年,apiserver.crt apiserver-kubelet-client.crt默认一年,front-proxy-ca.crt是独立的ca证书,默认是10年, front-proxy-client.crt默认1年。Etcd的证书默认是100年

我们只需要更新apiserver.crt apiserver-kubelet-client.crt front-proxy-client即可

Master1节点重新生成证书,并同步证书至其他master节点

kubeadm alpha certs renew apiserver --config "/etc/kubernetes/kubeadm-config.yaml"
kubeadm alpha certs renew apiserver-kubelet-client --config "/etc/kubernetes/kubeadm-config.yaml"
kubeadm alpha certs renew front-proxy-client --config "/etc/kubernetes/kubeadm-config.yaml"

删除所有主机组件之间认证的kubeconfig

Kubeconfig是k8s其他组件与apiserver通信的认证密钥,apiserver证书更新了,这些密钥文件都需要更新。

ansible -i /tools/kubespray/inventory/inventory.cfg all -m shell -a "cd /etc/kubernetes && rm -rf admin.conf scheduler.conf controller-manager.conf kubelet.conf bootstrap-kubelet.conf"

Master节点分别再次生成kubeconfig(所有master节点都需要执行)

kubeadm init phase kubeconfig all --config "/etc/kubernetes/kubeadm-config.yaml"

安装有kubectl的节点覆盖config

\cp /etc/kubernetes/admin.conf /root/.kube/config

master1节点重启k8s相关组件

docker ps |grep apiserver|grep -v pause|awk '{print $1}'|xargs docker kill -s HUP

docker ps |grep kube-scheduler|grep -v pause|awk '{print $1}'|xargs docker kill -s HUP

docker ps |grep kube-controller|grep -v pause|awk '{print $1}'|xargs docker kill -s HUP

systemctl restart kubelet

拷贝master1的证书到master2上

scp -r /etc/kubernetes/ssl root@192.168.10.133:/etc/kubernetes/

master2上删除旧配置

cd /etc/kubernetes && rm -rf admin.conf scheduler.conf controller-manager.conf kubelet.conf bootstrap-kubelet.conf

重新生成新配置

kubeadm init phase kubeconfig all --config "/etc/kubernetes/kubeadm-config.yaml"

master2节点重启k8s相关组件

docker ps |grep apiserver|grep -v pause|awk '{print $1}'|xargs docker kill -s HUP

docker ps |grep kube-scheduler|grep -v pause|awk '{print $1}'|xargs docker kill -s HUP

docker ps |grep kube-controller|grep -v pause|awk '{print $1}'|xargs docker kill -s HUP

systemctl restart kubelet

查看节点状态

kubectl get node

worker node节点无需操作,证书会通过kubelet自动更新,各节点执行以下命令验证续签是否生效:

# Cert from api-server

echo -n | openssl s_client -connect localhost:6443 2>&1 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | openssl x509 -text -noout | grep Not

# Cert from controller manager

echo -n | openssl s_client -connect localhost:10257 2>&1 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | openssl x509 -text -noout | grep Not

# Cert from scheduler

echo -n | openssl s_client -connect localhost:10259 2>&1 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | openssl x509 -text -noout | grep Not

kubespray续签k8s证书的更多相关文章

  1. k8s 证书反解

    k8s证书反解 1.将k8s配置文件(kubelet.kubeconfig)中client-certificate-data:内容拷贝 2.echo "client-certificate- ...

  2. 关于K8S证书生成方面的脚本草稿

    周日在家里计划的. 俺不加班,但在家学习的时间一样没少! 还没弄完,只粗粗弄了etcd证书. #! /usr/bin/env bash set -e set -u set -x THIS_HOST=$ ...

  3. k8s 证书之ca-csr.json,ca-config.json

    这是后面生成的所有证书的基础. 但如果是公司内使用,使用基于这些证书生成的ca, 在保证安全性的情况下,可以更方便的部署. ca-csr.json { "CN": "ku ...

  4. k8s 证书更新操作

    kubernetes证书更新 版本:1.14.2,以下操作在3台master节点上操作 1.各个证书过期时间 /etc/kubernetes/pki/apiserver.crt #1年有效期 /etc ...

  5. k8s证书之etcd,api,front-proxy配置文件

    这几个文件,是要结合前面的master安装脚本的. 所以有的json文件中会出现一些LOCAL_HOSTS_L,THIS_HOST之类的变量. 如果手工单独使用这些文件,要将这些变量替换为合适的IP或 ...

  6. kubespray部署k8s

    0.把外网的/usr/local/bin/*拷过来覆盖 1.把部署好的集群的 calicoctl cni-plugins-linux-amd64-v0.8.1.tgz kubeadm-v1.16.3- ...

  7. K8S-kubeadm-集群证书续签

    ETCD证书 自签证书颁发机构(CA) ca.crt ca.key etcd集群中相互通信事业的客户端证书 peer.crt peer.key pod中定义Liveness探针事业的客户端证书 hea ...

  8. k8s采坑记 - 解决二进制安装环境下证书过期问题

    前言 上一篇k8s采坑记 - 证书过期之kubeadm重新生成证书阐述了如何使用kubeadm解决k8s证书过期问题. 本篇阐述使用二进制安装的kubernetes环境,如何升级过期证书? k8s配置 ...

  9. 一键安装基于dns的高可用k8s集群(3节点,etcd https)

    在公司,使用dns切换,可能会比keepalived+haproxy,更精简的易维护. 毕竟,高可用只是偶尔切换,不是时时切换. 且dns解析在自己可控时,更不会影响k8s线上使用了. (部分代码,由 ...

随机推荐

  1. CentOS7安装Kafka2.6.0

    1:下载 wget https://mirror.bit.edu.cn/apache/kafka/2.6.0/kafka_2.12-2.6.0.tgz 点击前往官网 2:解压 tar -zxvf ka ...

  2. Vue项目的创建、路由、及生命周期钩子

    目录 一.Vue项目搭建 1.环境搭建 2.项目的创建 3.pycharm配置并启动vue项目 4.vue项目目录结构分析 5.Vue根据配置重新构建依赖 二.Vue项目创建时发生了什么 三.项目初始 ...

  3. Python 基础学习笔记(超详细版)

    1.变量 python中变量很简单,不需要指定数据类型,直接使用等号定义就好.python变量里面存的是内存地址,也就是这个值存在内存里面的哪个地方,如果再把这个变量赋值给另一个变量,新的变量通过之前 ...

  4. vue封装一个弹框组件

    这是一个提示框和对话框,例:   这是一个组件 eject.vue <template> <div class='kz-cont' v-show='showstate'> &l ...

  5. 简述Python垃圾回收机制和常量池的验证

    目录 通过代码验证python解释器内部使用了常量池 Python的引入 变量的引入 为什么要有变量 定义变量 常量引入 常量池引入 Python解释器 Python变量存储机制 Python垃圾回收 ...

  6. sql之对top语句理解

    起因 事情的起因是在群里和大佬讨论问题,讨论select top x后加*的问题,这时突发奇想,想搞清楚这个看起来在sql中略显突兀的语句结构,就有了这篇文 先看例子 select * from 表 ...

  7. Windows下的Linux子系统

    强调!!!必须是Windows专业版!!! 一.安装运行过程 第一步:打开开发人员模式 第二步:进入 '控制面板 '--'程序'--'启用的Windows功能'--勾选Linux子系统(根据提示进行重 ...

  8. 《进击吧!Blazor!》系列入门教程 第一章 7.图表

    <进击吧!Blazor!>是本人与张善友老师合作的Blazor零基础入门教程视频,此教程能让一个从未接触过Blazor的程序员掌握开发Blazor应用的能力. 视频地址:https://s ...

  9. python ORM之sqlalchemy

    前沿对象关系映射ORM是在实际应用编程中常用到的技术,它在对象和关系之间建立了一条桥梁,前台的对象型数据和数据库中的关系型的数据通过这个桥梁来相互转化.简单来说就是开发人员在使用ORM模型编程时,不需 ...

  10. ImportError: No module named site

    cmd中执行python提示:ImportError: No module named site 运行python.exe Fatal Python error: initfsencoding: un ...