Kubernetes 证书
PKI证书
kubernetes是需要PKI才能执行多数操作:
- kubelet的客户端证书:用于API服务器身份验证
- kubelet服务证书:用于API服务器与Kubelet的会话
- API服务器端点证书:用于HTTPS加密,确保通信加密
- 集群管理员的客户端证书:管理员(我)的工作证明
- API 服务器的客户端证书:用于和 Kubelet 的会话
- API 服务器的客户端证书:用于和 etcd 的会话
- 控制器管理器的客户端证书或 kubeconfig:用于和 API 服务器的会话
- 调度器的客户端证书或 kubeconfig:用于和 API 服务器的会话
- 前端代理的客户端及服务端证书

自定义证书
- 首先用kubeadm创建的kubernetes会生成集群所需地全部证书。
- 其次你可以自定义,通过--cert-dir来指定不同的目录
- 默认位置/etc/kubernetes/pki里面
- kubeadm init --cert-dir /自定义目录/或者在kubeadm自定义的config的- certificatesDir字段进行目录指定
外部CA
指在 Kubernetes 集群中使用由外部证书颁发机构(CA)签发的证书,而不是由 kubeadm 自行生成和管理 CA 证书。这种模式下,所有的证书和密钥都是由外部的 CA 签发的,提供更高的安全性和信任度,尤其在有严格合规性要求的环境中。
使用外部 CA 模式配置 Kubernetes 集群
- 准备外部 CA 签发的证书和密钥 - 你需要从外部 CA 获取以下证书和密钥:- CA 证书 (ca.crt)
- kube-apiserver 证书及其密钥 (apiserver.crt和apiserver.key)
- kube-controller-manager 证书及其密钥(可选,如果需要)
- kube-scheduler 证书及其密钥(可选,如果需要)
- 其他组件所需的证书及其密钥(如 etcd 等)
 
- CA 证书 (
 
- 你需要从外部 CA 获取以下证书和密钥:
- 创建并配置 Kubernetes 配置文件 - 创建一个 kubeadm 配置文件,如 kubeadm-config.yaml,并在其中指定certificatesDir和ClusterConfiguration。示例如下:apiVersion: kubeadm.k8s.io/v1beta2 
 kind: ClusterConfiguration
 kubernetesVersion: stable-1.21
 certificatesDir: /etc/kubernetes/pki
 apiServer:
 certSANs:
 - "your.domain.com"
 extraArgs:
 "tls-cert-file": "/etc/kubernetes/pki/apiserver.crt"
 "tls-private-key-file": "/etc/kubernetes/pki/apiserver.key"
 
- 创建一个 kubeadm 配置文件,如 
- 将外部 CA 签发的证书和密钥放置在指定目录 - 复制外部 CA 签发的证书和密钥到 /etc/kubernetes/pki目录或你在配置文件中指定
 
- 复制外部 CA 签发的证书和密钥到 
| sudo cp /path/to/ca.crt /etc/kubernetes/pki/ca.crt | 
- 运行 kubeadm 初始化命令
- 使用 kubeadm 初始化命令并指定配置文件来初始化 Kubernetes 集群:sudo kubeadm init --config kubeadm-config.yaml 
检查证书
| kubeadm certs check-expiration | 

ps:
- kubeadm不能管理外部ca 
- 没有kubelet.conf的原因是kubeadm会将kubelet配置为自动更新证书,轮换在 - /var/lib/kubelet/pki
自动更新证书
kubeadm 提供了一种机制,在集群控制面(control plane)升级时自动更新所有证书。这种方式简化了证书管理,并确保在定期升级 Kubernetes 版本时保持集群的安全性。下面是详细的操作步骤和相关说明。
自动更新证书的机制
当你使用 kubeadm upgrade apply 命令升级控制面节点时,kubeadm 会自动更新所有的证书。
进。
禁用自动证书更新
如果你有更复杂的证书管理需求,可以选择在升级时禁用自动证书更新。可以通过传递 --certificate-renewal=false 参数来实现。
- 升级控制面节点时禁用证书更新: - sudo kubeadm upgrade apply v1.xx.x --certificate-renewal=false - 其中 - v1.xx.x为目标 Kubernetes 版本。
- 升级 worker 节点时禁用证书更新: - sudo kubeadm upgrade node --certificate-renewal=false 
手动启用证书更新
在 Kubernetes 1.17 版本之前,kubeadm upgrade node 命令的 --certificate-renewal 参数默认值为 false,需要显式地设置为 true。
显式启用证书更新的操作步骤
- 升级控制面节点时显式启用证书更新: - sudo kubeadm upgrade apply v1.xx.x --certificate-renewal=true 
- 升级 worker 节点时显式启用证书更新: - sudo kubeadm upgrade node --certificate-renewal=true 
手动更新证书
| # 执行完此命令之后你需要重启控制面 Pod,运行了一个 HA 集群,这个命令需要在所有控制面板节点上执行。 | 
ps:kubeadm通常会把admin.conf 证书复制到 $HOME/.kube/config 中,在这样的系统中,为了在更新 admin.conf 后更新 $HOME/.kube/config 的内容, 你必须运行以下命令:
| sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config | 

.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)