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

Cert证书更新

⚡️: 在安装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 和组件证书,然后替换集群中过期的证书并重启服务。这可以恢复集群的正常功能。

Nebula 是一个开源的高性能网络库,支持点对点加密通信。在使用 Nebula 时,生成 CA (Certificate Authority) 证书及其绑定是配置安全通信的关键步骤。以下是生成 CA 证书和绑定的一个基本流程: 1. 安装 Nebula:首先需要在系统上安装 Nebula。 2. 生成 CA 证书:使用 Nebula 提供的工具来生成 CA 证书和私钥。通常这可以通过命令行工具完成,需要提供一些基本参数,比如组织名称等。 示例命令: ```shell nebula-cert ca --country US --province CA --city SanFrancisco --org "Example Org" --server ``` 3. 生成节点证书:在生成 CA 证书之后,可以使用相同的工具为每个 Nebula 节点生成证书。每个节点的证书都由 CA 签名,确保了节点的身份验证。 示例命令: ```shell nebula-cert sign --country US --province CA --city SanFrancisco --org "Example Org" --ip "192.168.1.1" --server ``` 4. 绑定证书:生成的节点证书需要在对应的 Nebula 节点上进行配置。通常需要在 Nebula 的配置文件中指定证书和密钥的路径。 配置文件示例: ```yaml host: "192.168.1.1" cert: "/etc/nebula/certs/node.crt" key: "/etc/nebula/certs/node.key" ca: "/etc/nebula/certs/ca.crt" ``` 5. 启动 Nebula:配置完成后,可以启动 Nebula 服务,节点之间将使用所配置的证书进行身份验证和加密通信。 请注意,以上步骤仅供参考,具体命令和参数可能会随着 Nebula 版本的更新而有所变化。务必参考最新官方文档以获取准确的安装和配置指南。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力做一名技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值