kubelet证书的由来
要修改 Kubernetes 中 kubelet 证书的默认签发期限,可以通过调整 kube-controller-manager
组件的 --cluster-signing-duration
参数来实现。这个参数控制了签发证书的有效期限。以下是具体的步骤:
-
修改 kube-controller-manager 配置: 你需要编辑
kube-controller-manager
的配置文件,通常这个文件位于/etc/kubernetes/manifests/kube-controller-manager.yaml
。在这个文件中,你需要添加或修改--cluster-signing-duration
参数,例如,将其设置为10年(87600小时):yamlspec: containers: - command: - kube-controller-manager - --cluster-signing-duration=87600h # 设置证书有效期为10年
-
重启 kube-controller-manager: 修改配置后,你需要重启
kube-controller-manager
以使更改生效。由于kube-controller-manager
是以静态 Pod 的形式运行的,你可以通过删除对应的 Pod 来触发重启:bashkubectl -n kube-system delete pod -l component=kube-controller-manager
-
检查更改是否生效: 使用以下命令检查证书的有效期是否已经更新:
bashkubeadm alpha certs check-expiration
请注意,这些更改应该在集群的每个控制平面节点上执行。此外,确保在进行任何更改之前备份相关配置文件和证书,以防需要回滚到之前的状态。修改证书有效期是一个重要的安全决策,需要根据你的安全策略和合规要求来决定。
experimental-cluster-signing-duration和cluster-signing-duration 什么区别
experimental-cluster-signing-duration
和 cluster-signing-duration
是 Kubernetes 中用于控制证书签发期限的两个参数,它们的主要区别在于:
-
参数状态:
experimental-cluster-signing-duration
是在 Kubernetes 1.19 版本之前的实验性参数,而cluster-signing-duration
是在 Kubernetes 1.19 版本及以后成为稳定特性的参数 。 -
使用时机:在 Kubernetes 1.19 版本之前,如果你想要设置证书的签发期限,你需要使用
--experimental-cluster-signing-duration
参数。从 Kubernetes 1.19 版本开始,这个参数被--.cluster-signing-duration
替代,成为正式支持的配置选项 。 -
功能相同:尽管名称不同,但这两个参数的功能是相同的,即控制由 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)的角色。以下是详细的流程和解释:
-
Kubelet 发起 CSR:当 kubelet 启动时,如果配置为自举(使用
--bootstrap-kubeconfig
参数),它会使用初始证书连接到 Kubernetes API,并发送一个 CSR。 -
CSR 状态:最初,来自节点上 kubelet 的 CSR 处于
Pending
状态。 -
自动批准:如果 CSR 满足特定条件,kube-controller-manager 会自动批准这个请求,此时请求会处于
Approved
状态。 -
证书签发:一旦 CSR 被批准,kube-controller-manager 会使用集群的 CA 来签署这个请求,生成一个新的证书,并将这个证书返回给 kubelet。
-
证书更新:kubelet 会从 Kubernetes API 取回签署的证书,并将其写入磁盘,存储位置通过
--cert-dir
参数指定。然后 kubelet 会使用新的证书连接到 Kubernetes API。 -
证书轮换:当签署的证书即将到期时,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 外,还包括以下几种:
-
X509 客户端证书认证:
- 通过
--client-ca-file
标志启动 kubelet,提供一个 CA 证书包以供验证客户端证书。 - 通过
--kubelet-client-certificate
和--kubelet-client-key
标志启动 API 服务器,用于客户端证书的认证。
- 通过
-
API Bearer Token 认证(包括服务账户令牌):
- 确保在 API 服务器中开启了
authentication.k8s.io/v1beta1
API 组。 - 通过
--authentication-token-webhook
和--kubeconfig
标志启动 kubelet,kubelet 调用已配置的 API 服务器上的TokenReview
API,以根据持有者令牌确定用户信息。
- 确保在 API 服务器中开启了