ETCD 数据库集群证书更新,用于 Kubernets 外部数据库设置

ETCD 数据库集群证书更新,用于 Kubernets 外部数据库设置

etcdctl version: 3.4.7我已经使用 etcdadm 工具为我的 Kubernetes集群部署了 3 节点外部 ETCD 数据库( )集群v1.18.6。我的证书将在几个月内到期。

我相信kubeadm alpha certs renew all命令将更新 kubernetes 证书。您知道更新外部 ETCD 数据库集群证书的正确步骤吗?

我的集群证书详细信息

# kubeadm alpha certs check-expiration 

CERTIFICATE                EXPIRES                  RESIDUAL TIME   CERTIFICATE AUTHORITY   EXTERNALLY MANAGED
admin.conf                 Jul 20, 2021 14:13 UTC   152d                                    no
apiserver                  Jul 20, 2021 14:13 UTC   152d            ca                      no
apiserver-kubelet-client   Jul 20, 2021 14:13 UTC   152d            ca                      no
controller-manager.conf    Jul 20, 2021 14:13 UTC   152d                                    no
front-proxy-client         Jul 20, 2021 14:13 UTC   152d            front-proxy-ca          no
scheduler.conf             Jul 20, 2021 14:13 UTC   152d                                    no

CERTIFICATE AUTHORITY   EXPIRES                  RESIDUAL TIME   EXTERNALLY MANAGED
ca                      Apr 17, 2030 01:19 UTC   9y              no
front-proxy-ca          Apr 17, 2030 01:19 UTC   9y              no

主节点证书详细信息

/etc/kubernetes/pki/ca.crt,             Apr 17 01:19:52 2030 GMT
/etc/kubernetes/pki/apiserver.crt,             Jul 20 14:13:09 2021 GMT
/etc/kubernetes/pki/apiserver-kubelet-client.crt,             Jul 20 14:13:10 2021 GMT
/etc/kubernetes/pki/front-proxy-ca.crt,             Apr 17 01:19:52 2030 GMT
/etc/kubernetes/pki/front-proxy-client.crt,             Jul 20 14:13:10 2021 GMT


/etc/etcd/pki/ca.crt,             Apr 17 01:19:35 2030 GMT
/etc/etcd/pki/server.crt,             Apr 19 01:19:36 2021 GMT
/etc/etcd/pki/peer.crt,             Apr 19 01:19:36 2021 GMT
/etc/etcd/pki/etcdctl-etcd-client.crt,             Apr 19 01:19:36 2021 GMT
/etc/etcd/pki/apiserver-etcd-client.crt,             Apr 19 01:19:36 2021 GMT

谢谢 SR

答案1

我使用这些步骤来更新 kubernets 集群上的证书v1.18.6

  1. 编译etcdadm证书分支代码

    git clone -b cert https://github.com/pytimer/etcdadm.git
     cd  etcdadm
     docker run --rm -it -v "$PWD":/etcdadm  golang bash
     cd /etcdadm
     make
     cp etcdadm etcdadm-cert 
    
  2. 将文件复制etcdadm-cert 到所有三个服务器。

  3. 更新第一个 master 上的证书

    /opt/bin/etcdadm-cert 证书更新 kubeadm alpha 证书更新全部

  4. 重启第一个 master

  5. 检查 etcd 成员和 kubernetes 证书过期数据

在主节点上重复步骤 2 至 5

使用这些命令来验证

/opt/bin/etcdctl.sh   member list
kubeadm alpha certs check-expiration

谢谢 SR

答案2

对于遇到过此主题的其他任何人(我认为 OP 已经解决了这个问题):

如果您已使用 kubeadm 部署了证书并且它们位于正确的位置,那么您可以执行与对其他 Kubernetes 节点完全相同的操作:

kubeadm alpha certs renew all

这将更新 kubeadm 识别并可以更新的所有证书(可以更新 = 将其作为私钥)。

如果您已像 kubernetes 文档中所述配置了外部 etcd 集群,则与 etcd 关联的私钥 (/etc/kubernetes/pki/etcd/ca.key) 很可能只在第一个 etcd 节点上。这意味着您只能在那里更新与 etcd 相关的证书。

解决此问题的最简单方法是将此密钥复制到所有其他节点的正确默认路径(如上所述),然后 kubeadm 应该能够续订所有证书,您就可以开始了。您无需重置 etcd 容器,它们会自动重新读取证书。

对于较新版本的 kubeadm kubeadm certs renew all(没有“alpha”)应该可以工作。

您可以对其余 kubernetes 节点执行相同操作,当然,这些节点需要访问 etcd API。通常情况下,您应该重新启动 kube-system 中的控制平面节点 pod(apiserver、controller-manager、scheduler)。

相关内容