在 Kubernetes 中,Kubelet TLS Bootstrap 是一种机制,用于自动为 kubelet 生成 TLS 证书和密钥。它避免了手动为每个 kubelet 生成证书的繁琐工作,简化了集群证书管理的过程。
Kubelet TLS Bootstrap 的主要作用是:
- 自动为 kubelet 生成客户端证书和密钥,用于访问 API 服务器。
- 实现 kubelet 证书的自动轮转和过期管理。
- 简化证书管理,避免手动为每个节点生成证书。
Kubelet TLS Bootstrap 的工作流程是:
- 启用 kubelet TLS Bootstrapping 机制,通过 Kubernetes API 服务器参数或 kubelet 配置。
- kubelet 首次启动时向 Kubernetes API 发起证书签名请求 (CSR)。
- CSR 会被 Kubernetes 的 CSR 签名控制器自动批准。
- API 服务器使用集群 CA 对 CSR 进行签名,得到 kubelet 客户端证书。
- kubelet会定期主动向 API 服务器刷新证书,实现证书的自动轮转。
Kubelet TLS Bootstrap 中的几个重要概念:
- Bootstrap Token:kubelet 首次向 API 服务器请求证书时使用的一组随机数据。
- CSR(证书签名请求):kubelet 向 API 服务器发起的证书请求。
- Kubernetes CA(证书颁发机构):使用该 CA 对 CSR 进行签名。
- CSR 工作控制器:Kubernetes 内置的自动批准 kubelet CSR 的控制器。
示例:
- 启用 Kubelet Bootstrap,在 kube-apiserver 中添加:
–kubelet-client-certificate=/etc/kubernetes/pki/kube-apiserver.crt
–kubelet-client-key=/etc/kubernetes/pki/kube-apiserver.key
–kubelet-preferred-address-types=InternalIP,InternalDNS,Hostname,ExternalIP,ExternalDNS
–requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt
–requestheader-allowed-names=front-proxy-client
–requestheader-extra-headers-prefix=X-Remote-Extra-
–requestheader-group-headers=X-Remote-Group
–requestheader-username-headers=X-Remote-User - kubelet 启动时使用 Bootstrap Token 访问 API 服务器申请证书。
- CSR 被 CSR 工作控制器自动批准。
- API 服务器使用 CA 对 CSR 进行签名得到 kubelet 客户端证书。
- kubelet 会定期刷新证书并轮转。
所以总结来说,Kubelet TLS Bootstrap 的主要作用是实现 kubelet 证书的自动化管理,其主要特征是:
- Kubelet 首次启动时使用 Bootstrap Token 申请证书。
- CSR 被自动批准并生成 kubelet 客户端证书。
- Kubelet 会定期主动刷新证书实现证书轮转。
- 避免了手动为每个节点生成 kubelet 证书的工作。
它的工作流程是:
- 启用 Kubelet Bootstrap 机制。
- Kubelet 首次访问 API 服务器时申请证书。
- CSR 被自动签署得到 kubelet 客户端证书。
- Kubelet 定期主动刷新证书且证书会自动轮转。