kubeadm 默认证书为一年,一年过期后,会导致api service不可用,使用过程中会出现:x509: certificate has expired or is not yet valid
如何进行调整,下面给了两个方案,供大家选择
方案一 通过修改kubeadm 调整证书过期时间
修改代码,调整过期时间
克隆代码:git clone https://github.com/kubernetes/kubernetes.git
, 切换到指定的tag或者版本修改vendor/k8s.io/client-go/util/cert/cert.go
文件,git diff
对比如下:
1 | diff --git a/staging/src/k8s.io/client-go/util/cert/cert.go b/staging/src/k8s.io/client-go/util/cert/cert.go |
编译代码
编译环境我已经做了对应的1.11.5、1.12.3、1.13.0、1.13.2、1.13.4、1.14.1、1.15.3,已上传到docker hub 上,大家可下载使用,地址如下:
1 | docker pull icyboy/k8s_build:v1.11.5 # 基于 golang:1.10.3 |
编译
1 | docker run --rm -v 你修改后的代码目录:/go/src/k8s.io/kubernetes -it icyboy/k8s_build:v1.11.5 bash |
对应的kubeadm 文件我也编译好后放到百度云中,大家可放心下载使用,可通过kubeadm version
查看对应的版本信息和官方的进行比对
1 | #编译过后的 |
kubeadm 下载地址:https://pan.baidu.com/s/1PplHyDkYDTusx46j9uHwDA
提取码:dy6f
替换证书
1 | #用新的kubeadm 替换官方的kubeadm |
验证
1 | cd /etc/kubernetes/pki |
方案二 启用自动轮换kubelet 证书
kubelet证书分为server和client两种,
k8s 1.9
默认启用了client证书的自动轮换,但server证书自动轮换需要用户开启
增加 kubelet 参数
1 | # 在/etc/systemd/system/kubelet.service.d/10-kubeadm.conf 增加如下参数 |
增加 controller-manager 参数
1 | # 在/etc/kubernetes/manifests/kube-controller-manager.yaml 添加如下参数 |
创建 rbac 对象
创建rbac对象,允许节点轮换kubelet server证书:
1 | cat > ca-update.yaml << EOF |
如果证书已经过期,如何进行重新签发证书
针对kubeadm 1.13.x 及以上处理
准备kubeadm.conf 配置文件一份
1 | apiVersion: kubeadm.k8s.io/v1beta1 |
重新签发命令
1 | kubeadm alpha certs renew all --config=/root/kubeadm.conf |
更新/etc/kubernetes/*.conf文件
1 | #备份删除旧的/etc/kubernetes/*.conf文件 |
完成后重启kube-apiserver
,kube-controller
,kube-scheduler
,etcd
这4个容器,最后覆盖config文件
1 | cp -i /etc/kubernetes/admin.conf $HOME/.kube/config |
针对kubeadm 1.13.0(不包含1.13.0) 以下处理
移动证书和配置【注意!必须移动,不然会使用现有的证书,不会重新生成】
1 | cd /etc/kubernetes |
创建证书
1 | kubeadm alpha phase certs all --apiserver-advertise-address=${MASTER_API_SERVER_IP} --apiserver-cert-extra-sans=主机内网ip,主机公网ip |
生成新配置文件
1 | kubeadm alpha phase kubeconfig all --apiserver-advertise-address=${MASTER_API_SERVER_IP} |
将新生成的admin配置文件覆盖掉原本的admin文件
1 | mv $HOME/.kube/config $HOME/.kube/config.old |
完成后重启kube-apiserver,kube-controller,kube-scheduler,etcd这4个容器
如果有多台master,则将第一台生成的相关证书拷贝到其余master即可。
离线一键安装包
k8s 离线一键安装包教程&&地址:一键安装
v1.5.2