kubelet证书的由来

要修改 Kubernetes 中 kubelet 证书的默认签发期限,可以通过调整 kube-controller-manager 组件的 --cluster-signing-duration 参数来实现。这个参数控制了签发证书的有效期限。以下是具体的步骤:

  1. 修改 kube-controller-manager 配置: 你需要编辑 kube-controller-manager 的配置文件,通常这个文件位于 /etc/kubernetes/manifests/kube-controller-manager.yaml。在这个文件中,你需要添加或修改 --cluster-signing-duration 参数,例如,将其设置为10年(87600小时):

    yaml
    spec:
      containers:
      - command:
        - kube-controller-manager
        - --cluster-signing-duration=87600h # 设置证书有效期为10年
  2. 重启 kube-controller-manager: 修改配置后,你需要重启 kube-controller-manager 以使更改生效。由于 kube-controller-manager 是以静态 Pod 的形式运行的,你可以通过删除对应的 Pod 来触发重启:

    bash
    kubectl -n kube-system delete pod -l component=kube-controller-manager
  3. 检查更改是否生效: 使用以下命令检查证书的有效期是否已经更新:

    bash
    kubeadm alpha certs check-expiration

请注意,这些更改应该在集群的每个控制平面节点上执行。此外,确保在进行任何更改之前备份相关配置文件和证书,以防需要回滚到之前的状态。修改证书有效期是一个重要的安全决策,需要根据你的安全策略和合规要求来决定。

 
 
 
 

experimental-cluster-signing-duration和cluster-signing-duration 什么区别

 

experimental-cluster-signing-durationcluster-signing-duration 是 Kubernetes 中用于控制证书签发期限的两个参数,它们的主要区别在于:

  1. 参数状态:experimental-cluster-signing-duration 是在 Kubernetes 1.19 版本之前的实验性参数,而 cluster-signing-duration 是在 Kubernetes 1.19 版本及以后成为稳定特性的参数

  2. 使用时机:在 Kubernetes 1.19 版本之前,如果你想要设置证书的签发期限,你需要使用 --experimental-cluster-signing-duration 参数。从 Kubernetes 1.19 版本开始,这个参数被 --.cluster-signing-duration 替代,成为正式支持的配置选项

  3. 功能相同:尽管名称不同,但这两个参数的功能是相同的,即控制由 kube-controller-manager 签发的证书的有效期。在 1.19 版本之前,使用 --experimental-cluster-signing-duration 参数来指定证书的有效期;从 1.19 版本开始,使用 --cluster-signing-duration 参数来实现相同的功能

总结来说,experimental-cluster-signing-duration 是早期的实验性参数,而 cluster-signing-duration 是在 Kubernetes 1.19 版本中正式采用的参数,用于控制证书的签发期限。在新的版本中,推荐使用 cluster-signing-duration 参数。

 

kubelet证书是kube-controller-manager签发的吗

 
 

Kubelet 的证书并不是直接由 kube-controller-manager 签发的,而是由 Kubernetes 集群的证书颁发机构(CA)签发的。kube-controller-manager 在这个过程中扮演了批准证书签名请求(Certificate Signing Requests, CSR)的角色。以下是详细的流程和解释:

  1. Kubelet 发起 CSR:当 kubelet 启动时,如果配置为自举(使用 --bootstrap-kubeconfig 参数),它会使用初始证书连接到 Kubernetes API,并发送一个 CSR

  2. CSR 状态:最初,来自节点上 kubelet 的 CSR 处于 Pending 状态

  3. 自动批准:如果 CSR 满足特定条件,kube-controller-manager 会自动批准这个请求,此时请求会处于 Approved 状态

  4. 证书签发:一旦 CSR 被批准,kube-controller-manager 会使用集群的 CA 来签署这个请求,生成一个新的证书,并将这个证书返回给 kubelet

  5. 证书更新:kubelet 会从 Kubernetes API 取回签署的证书,并将其写入磁盘,存储位置通过 --cert-dir 参数指定。然后 kubelet 会使用新的证书连接到 Kubernetes API

  6. 证书轮换:当签署的证书即将到期时,kubelet 会再次使用 Kubernetes API 发起新的 CSR,这个过程会重复,以实现证书的自动轮换

总结来说,kube-controller-manager 负责批准 CSR,而实际的证书签发是由 Kubernetes 集群的 CA 完成的。kubelet 的证书有效期默认为一年,

这个期限可以通过 --cluster-signing-duration 参数(在 1.19 版本之前为 --experimental-cluster-signing-duration)来修改

Kubelet 的认证方法除了使用 --bootstrap-kubeconfig 进行 TLS Bootstrap 外,还包括以下几种:

  1. X509 客户端证书认证:

    • 通过 --client-ca-file 标志启动 kubelet,提供一个 CA 证书包以供验证客户端证书。
    • 通过 --kubelet-client-certificate 和 --kubelet-client-key 标志启动 API 服务器,用于客户端证书的认证。
  2. API Bearer Token 认证(包括服务账户令牌):

    • 确保在 API 服务器中开启了 authentication.k8s.io/v1beta1 API 组。
    • 通过 --authentication-token-webhook 和 --kubeconfig 标志启动 kubelet,kubelet 调用已配置的 API 服务器上的 TokenReview API,以根据持有者令牌确定用户信息。
posted @ 2024-11-03 22:31  滴滴滴  阅读(24)  评论(0编辑  收藏  举报