Skip to content

Instantly share code, notes, and snippets.

@adolli
Last active September 6, 2019 01:41
Show Gist options
  • Save adolli/de63b76e4ed6760400c62b6db3d7adbc to your computer and use it in GitHub Desktop.
Save adolli/de63b76e4ed6760400c62b6db3d7adbc to your computer and use it in GitHub Desktop.
renew certs for k8s components after expiration

给k8s集群手动更新tls证书

如果集群内所有components的证书都还没有过期时,更新证书很容就一个命令

kubeadm alpha certs renew all

然后他会自动在/etc/kubernetes/pki目录下把所有证书都更新一遍。但是如果过期的话,那我就不知道了,不过可以通过手动签发证书来生成

以下已apiserver为例,其余的组件etcd、controller manager、scheduler类似

获取原证书的信息

查看证书的Common Name、Organization、Serial Number(没有的话忽略),并记下来

openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text -noout

生成csr

csr即为certificate signing request,用于提出签发申请,输入必要的证书签发信息,等待下一步的ca同意签发

在生成csr的时候输入跟之前一样的Common Name、Organization、Serial Number,原来就是空的话就不用输,其余字段随意,空着就好

openssl req -new -key apiserver.key -out apiserver.csr

用ca去签发一个新证书

{Serial Number}填回跟之前证书一样的,-days 3650表示10年有效

openssl x509 -req -in apiserver.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -set_serial {Serial Number} -days 3650 -out apiserver.crt

重启component

control plane上可以直接用下面命令一键重启,也可以用kubectl(如果kubectl还能用的话)

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

对于剩下的components也一样处理

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment