当前位置: 首页> 房产> 政策 > 【 Kubernetes 风云录 】- Cert证书更新

【 Kubernetes 风云录 】- Cert证书更新

时间:2025/7/13 8:33:41来源:https://blog.csdn.net/weixin_45133467/article/details/142255968 浏览次数:0次

Cert证书更新

文章目录

  • Cert证书更新
    • 生成新的 CA 证书和私钥
      • 生成 CA 配置文件(可选)
      • 使用 `cfssl` 生成 CA 证书
    • 生成 Kubernetes 组件证书和私钥
      • 准备 JSON 配置文件
      • 生成私钥和 CSR(证书签名请求)
    • 使用 CA 签署组件证书**
      • `ca-config.json` 示例
      • 文件说明
      • 使用 `ca-config.json` 签发证书
    • 替换现有证书
    • 重启 Kubernetes 组件
    • 验证证书更新
    • 总结

⚡️: 在安装K8S 节点的时候,使用的是手动签发 1年后Kubernetes 集群日志中出现 certificate has expired or is not yet valid 错误信息时,表明证书过期。

如果你没有现有的 CA 证书(如 ca.pemca-key.pem),你需要先创建一个新的 CA(Certificate Authority)来签署 Kubernetes 组件的证书。以下是如何在没有 CA 证书的情况下生成新的 CA 证书并更新集群中其他组件证书的步骤。

生成新的 CA 证书和私钥

首先,生成新的 CA 证书和私钥。这将为你创建用于签署其他 Kubernetes 组件证书的根 CA。

生成 CA 配置文件(可选)

你可以创建一个 CA 的配置 JSON 文件来定义 CA 证书的内容,比如 ca-csr.json

{"CN": "Kubernetes-CA","key": {"algo": "rsa","size": 2048},"names": [{"C": "CN","ST": "SuZhou","L": "SuZhou","O": "k8s","OU": "System"}]
}

使用 cfssl 生成 CA 证书

使用 cfssl 工具生成新的 CA 证书和私钥:

[root@ycloud proxy-client]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca

此命令将生成两个文件:

  • ca.pem: CA 根证书。
  • ca-key.pem: CA 私钥。

这些文件将用于签署 Kubernetes 组件的证书。

生成 Kubernetes 组件证书和私钥

现在你可以使用新生成的 CA 来为 Kubernetes 组件(如 API server、controller manager、scheduler 等)创建证书。

准备 JSON 配置文件

为每个组件创建一个 JSON 文件来定义证书请求参数。例如,kube-apiserver-csr.json

{"CN": "kube-apiserver","hosts": ["127.0.0.1","kubernetes.default.svc","10.96.0.1"],"key": {"algo": "rsa","size": 2048},"names": [{"C": "US","L": "San Francisco","O": "Kubernetes","OU": "Kubernetes The Hard Way"}]
}

生成私钥和 CSR(证书签名请求)

使用 cfssl 生成私钥和 CSR 文件:

[root@ycloud proxy-client]#  cfssl genkey kube-apiserver-csr.json | cfssljson -bare kube-apiserver

此命令将生成:

  • kube-apiserver-key.pem: 私钥。
  • kube-apiserver.csr: 证书签名请求文件。

使用 CA 签署组件证书**

使用新生成的 CA 证书和私钥来签署 Kubernetes 组件证书,例如签署 kube-apiserver 证书:

[root@ycloud proxy-client]# cfssl sign -ca ca.pem -ca-key ca-key.pem -config ca-config.json -profile kubernetes kube-apiserver.csr | cfssljson -bare kube-apiserver

生成的 kube-apiserver.pem 是新的 API server 证书。

ca-config.json 是 CA(Certificate Authority)配置文件,它定义了 CA 签发证书时的一些全局配置和策略,比如有效期、不同证书类型的 profile 等。通常在使用 cfssl 工具时,这个文件用来指定 CA 签发证书的行为。

如果你还没有 ca-config.json 文件,你可以创建一个。例如,这里是一个典型的 ca-config.json 文件的示例:

ca-config.json 示例

{"signing": {"default": {"expiry": "87600h"},"profiles": {"kubernetes": {"expiry": "87600h","usages": ["signing", "key encipherment", "server auth", "client auth"]}}}
}

文件说明

  • signing: 定义 CA 可以用来签发证书。

  • default: 设置默认的证书有效期,这里 87600h 表示十年。

  • profiles
    定义不同的证书类型。这里我们定义了 kubernetes 这个 profile。
    • expiry: 设置该 profile 下生成的证书有效期,87600h 同样表示十年。

    • usages
      定义证书的使用场景,常见的有:
      • signing: 表示证书可以用来签署其他证书。
      • key encipherment: 表示证书用于密钥加密。
      • server auth: 表示证书用于服务器认证(如 Kubernetes API Server)。
      • client auth: 表示证书用于客户端认证(如 kubelet、kubectl)。

使用 ca-config.json 签发证书

有了 ca-config.json 文件后,你可以在签发证书时指定它。例如:

[root@ycloud proxy-client]# cfssl sign -ca ca.pem -ca-key ca-key.pem -config ca-config.json -profile kubernetes kube-apiserver.csr | cfssljson -bare kube-apiserver
  • -ca: 指定 CA 证书。
  • -ca-key: 指定 CA 私钥。
  • -config: 指定 ca-config.json 文件,用于签发证书时的配置。
  • -profile: 使用 kubernetes profile 来签发证书,这个 profile 是我们在 ca-config.json 中定义的。

这样,你的 CA 就会根据配置文件中指定的有效期和用途来签发符合 Kubernetes 需求的证书。

替换现有证书

将新生成的证书和私钥替换过期的证书。例如:

[root@ycloud proxy-client]# mv /etc/kubernetes/pki/kube-apiserver.pem /etc/kubernetes/pki/kube-apiserver.pem.bak
[root@ycloud proxy-client]# cp kube-apiserver.pem /etc/kubernetes/pki/kube-apiserver.pem[root@ycloud proxy-client]# mv /etc/kubernetes/pki/kube-apiserver-key.pem /etc/kubernetes/pki/kube-apiserver-key.pem.bak
[root@ycloud proxy-client]# cp kube-apiserver-key.pem /etc/kubernetes/pki/kube-apiserver-key.pem

重启 Kubernetes 组件

替换证书后,重启相关的 Kubernetes 组件:

[root@ycloud proxy-client]# sudo systemctl restart kube-apiserver
[root@ycloud proxy-client]# sudo systemctl restart kube-controller-manager
[root@ycloud proxy-client]# sudo systemctl restart kube-scheduler
[root@ycloud proxy-client]# sudo systemctl restart kubelet

验证证书更新

验证 Kubernetes 集群是否正常工作:

[root@ycloud proxy-client]# kubectl get nodes

验证证书过期时间:

[root@ycloud proxy-client]# openssl x509 -in /etc/kubernetes/proxy-client/kube-apiserver.pem -noout -dates
notBefore=Sep 14 05:12:00 2024 GMT
notAfter=Sep 12 05:12:00 2034 GMT

总结

在没有 CA 证书的情况下,你需要先创建一个新的 CA 证书,并使用它签署 Kubernetes 组件的证书。通过 cfssl 工具,你可以生成新的 CA 和组件证书,然后替换集群中过期的证书并重启服务。这可以恢复集群的正常功能。

关键字:【 Kubernetes 风云录 】- Cert证书更新

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: