Kubernetes 中的 Kubelet TLS Bootstrap 是什么?

在 Kubernetes 中,Kubelet TLS Bootstrap 是一种机制,用于自动为 kubelet 生成 TLS 证书和密钥。它避免了手动为每个 kubelet 生成证书的繁琐工作,简化了集群证书管理的过程。

Kubelet TLS Bootstrap 的主要作用是:

  • 自动为 kubelet 生成客户端证书和密钥,用于访问 API 服务器。
  • 实现 kubelet 证书的自动轮转和过期管理。
  • 简化证书管理,避免手动为每个节点生成证书。

Kubelet TLS Bootstrap 的工作流程是:

  1. 启用 kubelet TLS Bootstrapping 机制,通过 Kubernetes API 服务器参数或 kubelet 配置。
  2. kubelet 首次启动时向 Kubernetes API 发起证书签名请求 (CSR)。
  3. CSR 会被 Kubernetes 的 CSR 签名控制器自动批准。
  4. API 服务器使用集群 CA 对 CSR 进行签名,得到 kubelet 客户端证书。
  5. kubelet会定期主动向 API 服务器刷新证书,实现证书的自动轮转。

Kubelet TLS Bootstrap 中的几个重要概念:

  • Bootstrap Token:kubelet 首次向 API 服务器请求证书时使用的一组随机数据。
  • CSR(证书签名请求):kubelet 向 API 服务器发起的证书请求。
  • Kubernetes CA(证书颁发机构):使用该 CA 对 CSR 进行签名。
  • CSR 工作控制器:Kubernetes 内置的自动批准 kubelet CSR 的控制器。

示例:

  1. 启用 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
  2. kubelet 启动时使用 Bootstrap Token 访问 API 服务器申请证书。
  3. CSR 被 CSR 工作控制器自动批准。
  4. API 服务器使用 CA 对 CSR 进行签名得到 kubelet 客户端证书。
  5. kubelet 会定期刷新证书并轮转。

所以总结来说,Kubelet TLS Bootstrap 的主要作用是实现 kubelet 证书的自动化管理,其主要特征是:

  1. Kubelet 首次启动时使用 Bootstrap Token 申请证书。
  2. CSR 被自动批准并生成 kubelet 客户端证书。
  3. Kubelet 会定期主动刷新证书实现证书轮转。
  4. 避免了手动为每个节点生成 kubelet 证书的工作。

它的工作流程是:

  1. 启用 Kubelet Bootstrap 机制。
  2. Kubelet 首次访问 API 服务器时申请证书。
  3. CSR 被自动签署得到 kubelet 客户端证书。
  4. Kubelet 定期主动刷新证书且证书会自动轮转。