【问题标题】:how to change start date of k8s api-server /other core component certificate system date change如何更改k8s api-server /其他核心组件证书系统日期更改的开始日期
【发布时间】:2022-01-25 16:51:28
【问题描述】:

我在centos 7上安装了一个Kubernetes集群v1.22.3(masterworker1worker2)。安装后我发现我的电脑日期/时间不正确。它显示我比当前时间提前 1 年。

当我更改日期/时间后,它开始出现与 Kubernetes 不同组件证书相关的错误,如下所示

Unable to connect to the server: x509: certificate has expired or is not yet valid: current time 2021-12-25T23:09:56Z is before 2022-12-08T18:55:46Z

然后我按照下面的方法更新了证书,但它只更新了过期时间。

我的步骤如下:

Step1:通过openssl command检查证书的有效性:

openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep ' Not '

        Not Before: Dec  8 18:55:46 2022 GMT
        Not After : Dec  8 18:55:46 2023 GMT

Step2:我已经使用以下命令更新了证书:

kubeadm certs check-expiration

kubeadm certs renew all

kubeadm certs check-expiration

现在我看到它已将到期日期从 8 Dec 2023 更新为 23 Dec 2022,但开始日期仍然相同 - 8 Dec 2022

有什么方法可以更新这些证书的开始日期?

【问题讨论】:

  • 您可以选择重新创建集群吗?因为它将是最快的。还是你有限制?
  • @Andrew 好吧,我可以重新创建集群,这是一个选项,但我只是想尝试解决这个问题,因为它可能由于某种原因再次发生。所以这就是我解决这个问题的观点,目前我已经搜索了一下,但找不到任何更新证书开始日期的线索,每个论坛/讨论都会显示更新过期证书的方式。
  • @Andrew 好吧,我忙于其他任务,无法确定前进的方向,尽管我应用了一种解决方案,要求我删除所有证书,但它不会更改开始日期。我需要删除所有公钥/私钥并重新生成它们。但不幸的是,我没有时间进行此程序。

标签: kubernetes


【解决方案1】:

由于我们无法更新Not Before 日期,我们可以重新生成证书。 以下是两种可能的解决方法。


在开始之前,我建议对位于/etc/kubernetes//var/lib/kubelet 文件夹和etcd 存储中的文件进行备份。


解决方案 1 - 漫长的道路

在主节点上

  1. 停止 kubelet: systemctl stop kubelet

  2. 删除文件夹: rm -rf /etc/kubernetes/ /var/lib/kubelet/pki

  3. 停止运行容器(命令取决于您使用的运行时)

  4. 执行初始化阶段:

kubeadm init phase certs all
kubeadm init phase kubeconfig all
kubeadm init phase kubelet-start
kubeadm init phase control-plane all
kubeadm init phase etcd local
kubeadm init phase upload-config all
kubeadm init phase mark-control-plane
kubeadm init phase bootstrap-token
kubeadm init phase kubelet-finalize all

如果您在使用 kubectl 时收到错误 x509: certificate signed by unknown authority,请使用以下命令:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

现在主节点应该处于Ready 状态。

在工作节点上

  1. 停止 kubelet:systemctl stop kubelet

  2. 删除带有配置的文件夹:

rm -rf /var/lib/kubelet/pki/ /etc/kubernetes/pki/ /etc/kubernetes/kubelet.conf

  1. 运行命令:

kubeadm join phase kubelet-start \<master_node_ip>:6443 --token \<token> --discovery-token-ca-cert-hash sha256:\<hash>

如果您需要令牌,请在主节点上运行此命令:

kubeadm token create --print-join-command

对所有工作节点重复此操作。

完成后,所有节点都应处于具有新证书的Ready 状态。


解决方案 2 - 捷径

在主节点上

  1. 停止 kubelet: systemctl stop kubelet

  2. 删除文件夹: rm -rf /etc/kubernetes/ /var/lib/kubelet/pki

  3. 停止运行容器(命令将取决于使用的运行时)。

  4. 运行命令: kubeadm init --ignore-preflight-errors=DirAvailable--var-lib-etcd

  5. 如果您在使用 kubectl 时收到错误 x509: certificate signed by unknown authority,请使用以下命令:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

现在主节点应该处于Ready 状态。

在工作节点上

查看Long way解决方案中的相同部分。


其他材料。 为了更好地理解,以下材料可能会有所帮助:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 2012-05-09
    相关资源
    最近更新 更多