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 |