k8s证书续签

介绍

安装k8s集群时,kubelet组件默认是1年,如果到期,需要手动更新该证书,1.8版本之后也可配置自动更新。

手动更新

删除原证书

1
2
# 进入到ssl配置目录,删除 kubelet 证书
rm -f kubelet-client-current.pem kubelet-client-2019-05-10-09-57-21.pem kubelet.key kubelet.crt

重启kubelet

1
systemctl restart kubelet && systemctl status kubelet

查看csr证书请求

1
kubectl get csr

手动签发

1
kubectl certificate approve node-csr--k3G2G1EoM4h9w1FuJRjJjfbIPNxa551A8TZfW9dG-g

验证

1
2
kubectl get csr
kubectl get nodes

自动更新

添加kubelet组件参数,也就是启动时的参数:

1
2
# 自动重载证书
--rotate-certificates

重启服务

1
2
systemctl restart kubelet
systemctl status kubelet

添加kube-controller-manager组件参数,也就是启动时的参数:

1
2
# 自动允许签发证书
--feature-gates=RotateKubeletServerCertificate=true

重启服务

1
2
systemctl restart kube-controller-manager
systemctl status kube-controller-manager

创建自动批准相关 CSR 请求的 ClusterRole

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
cat >> tls-instructs-csr.yaml << EOF
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: system:certificates.k8s.io:certificatesigningrequests:selfnodeserver
rules:
- apiGroups: ["certificates.k8s.io"]
resources: ["certificatesigningrequests/selfnodeserver"]
verbs: ["create"]
EOF

kubectl apply -f tls-instructs-csr.yaml

# 自动批准 kubelet-bootstrap 用户 TLS bootstrapping 首次申请证书的 CSR 请求
kubectl create clusterrolebinding node-client-auto-approve-csr --clusterrole=system:certificates.k8s.io:certificatesigningrequests:nodeclient --user=kubelet-bootstrap

# 自动批准 system:nodes 组用户更新 kubelet 自身与 apiserver 通讯证书的 CSR 请求
kubectl create clusterrolebinding node-client-auto-renew-crt --clusterrole=system:certificates.k8s.io:certificatesigningrequests:selfnodeclient --group=system:nodes

# 自动批准 system:nodes 组用户更新 kubelet 10250 api 端口证书的 CSR 请求
kubectl create clusterrolebinding node-server-auto-renew-crt --clusterrole=system:certificates.k8s.io:certificatesigningrequests:selfnodeserver --group=system:nodes

重启docker

1
2
systemctl daemon-reload
systemctl status kube-controller-manager

测试

1
2
3
4
5
6
7
8
# 进入到ssl配置目录,删除 kubelet 证书
rm -f kubelet-client-current.pem kubelet-client-2019-05-10-09-57-21.pem kubelet.key kubelet.crt

# 重启启动,启动正常后会颁发有效期10年的ssl证书
systemctl restart kubelet

# 进入到ssl配置目录,查看证书有效期
openssl x509 -in kubelet-client-current.pem -noout -text | grep "Not"

kubeadm证书续签

1
2
3
4
5
6
# 查看证书时间
kubeadm alpha certs check-expiration
# 更新证书
kubeadm alpha certs renew all
# 重启组件
docker ps |grep -E 'k8s_kube-apiserver|k8s_kube-controller-manager|k8s_kube-scheduler|k8s_etcd_etcd' | awk -F ' ' '{print $1}' |xargs docker restart

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!