k8s学习(32):集群证书年限修改

默认的证书是有年限的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[root@k8s-master ~]# cd /etc/kubernetes/pki/
[root@k8s-master pki]# ls
apiserver.crt apiserver-kubelet-client.key devuser.kubeconfig front-proxy-client.crt
apiserver-etcd-client.crt ca.crt devuser.pem front-proxy-client.key
apiserver-etcd-client.key ca.key etcd sa.key
apiserver.key devuser.csr front-proxy-ca.crt sa.pub
apiserver-kubelet-client.crt devuser-key.pem front-proxy-ca.key
[root@k8s-master pki]# openssl x509 -in apiserver.crt -text -noout
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 8026942590652842542 (0x6f656dc1f451022e)
Signature Algorithm: sha256WithRSAEncryption
Issuer: CN=kubernetes
Validity
Not Before: Jan 28 08:20:48 2020 GMT
Not After : Jan 27 08:20:48 2021 GMT
...
...省略
...
[root@k8s-master pki]# openssl x509 -in ca.crt -text -noout
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 0 (0x0)
Signature Algorithm: sha256WithRSAEncryption
Issuer: CN=kubernetes
Validity
Not Before: Jan 28 08:20:48 2020 GMT
Not After : Jan 25 08:20:48 2030 GMT

有些是一年,有些是10年

例如apiserver是1年,ca是10年

为什么是1年,老师说,可能是因为更新集群的时候会自动更新证书,如果1年内有更新集群,则不需要考虑证书到期,但是有些时候,离线业务并不会去手动更新集群

如果需要手动更改证书年限,需要改代码

1 首先需要先安装go语言环境

1
2
3
4
5
6
7
8
9
10
# 下载go包
# 解压go
[root@k8s-master local]# pwd
/usr/local
[root@k8s-master local]# tar -zxvf go1.13.7.linux-amd64.tar.gz

# 添加环境变量 /etc/profile
vi /etc/profile
export PATH=$PATH:/usr/local/go/bin
source /etc/profile

2 下载源码

1
2
3
4
cd /data git clone  https://github.com/kubernetes/kubernetes.git
## 查看kubeadm版本
kubeadm version
git checkout -b remotes/origin/release-1.15.1 v1.15.1

这里如果是通过浏览器下载的话,直接下载对应版本的压缩包

3 修改kubeadm源码包更新证书策略

1
2
3
4
5
6
7
8
9
10
vim staging/src/k8s.io/client-go/util//cert/cert.go # kubeadm1.14版本之前
vim cmd/kubeadm/app/util/pkiutil/pki_helpers.go # kubeadm1.14之后
## 在func NewSignedCert下加
const duration365d = time.Hour * 24 * 365
const duration3650d = time.Hour * 24 * 365 * 10 // 新增
NotAfter: time.Now().Add(duration365d0).UTC(), // 修改

## 编译kubeadm
make WHAT=cmd/kubeadm GOFLAGS=-v
cp _output/bin/kubeadm /root/kubeadm-new

1.14和1.15是通过修改这个文件,1.16、1.17就不确定了,可以查看官方文档

4 更新kubeadm

1
2
3
4
# 将kubeadm进行替换
cp /usr/bin/kubeadm /usr/bin/kubeadm.old
cp /root/kubeadm-new /usr/bin/kubeadm
chmod a+x /usr/bin/kubeadm

5 更新各个节点证书至Master节点

1
2
3
4
5
6
7
# 首先备份pki目录
cp /etc/kubernetes/pki{,-bak}
## 更新所有证书日期
kukeadm alpha certs renew all --config=kubeadm-config.yaml
## 查看是否更新成功
openssl x509 -in apiserver.crt -text -noout