Kubernetes集群证书管理最佳实践
website Kubernetes website and documentation repo: 项目地址: https://gitcode.com/gh_mirrors/webs/website
概述
在Kubernetes集群中,PKI(公钥基础设施)证书是实现TLS加密通信和身份认证的核心组件。本文将深入解析Kubernetes集群中各类证书的作用、使用场景以及管理策略,帮助管理员更好地理解和维护集群的安全基础架构。
Kubernetes证书体系解析
服务器证书
- API Server证书:用于保护Kubernetes API端点
- etcd服务器证书:保护分布式键值存储etcd的通信
- Kubelet服务器证书:每个节点上的kubelet都需要独立的服务器证书
- 前端代理证书(可选):用于聚合层功能
客户端证书
- Kubelet客户端证书:使kubelet能够作为客户端认证到API Server
- API Server etcd客户端证书:API Server访问etcd时使用
- Controller Manager证书:控制器管理器与API Server的安全通信
- Scheduler证书:调度器与API Server的安全通信
- Kube-proxy证书:每个节点的kube-proxy组件认证到API Server
- 管理员证书(可选):集群管理员访问API Server使用
- 前端代理客户端证书(可选)
Kubelet证书的特殊性
API Server与kubelet建立安全连接时,有两种证书使用策略:
- 共享证书方案:API Server使用已有的
apiserver.crt
和apiserver.key
证书对 - 独立证书方案:API Server使用专门生成的
kubelet-client.crt
和kubelet-client.key
证书存储位置
使用kubeadm安装的集群,证书默认存储在以下位置:
- 系统组件证书:
/etc/kubernetes/pki
- 用户账户证书:
/etc/kubernetes
手动配置证书方案
单根CA方案
推荐使用单根CA配合中间CA的层级结构:
| 证书路径 | 默认CN | 描述 | |------------------------|-------------------------|--------------------------| | ca.crt,key | kubernetes-ca | Kubernetes通用CA | | etcd/ca.crt,key | etcd-ca | etcd相关功能CA | | front-proxy-ca.crt,key | kubernetes-front-proxy-ca | 前端代理CA |
此外还需要服务账户密钥对:sa.key
和sa.pub
全证书方案
如需完全控制所有证书,可自行生成全部证书:
| 默认CN | 父CA | O (主题) | 类型 | SAN包含项 | |---------------------------|------------------------|----------------|----------------|-----------------------------------------------| | kube-etcd | etcd-ca | | server, client | 主机名, IP, localhost, 127.0.0.1 | | kube-etcd-peer | etcd-ca | | server, client | 同上 | | kube-etcd-healthcheck-client | etcd-ca | | client | | | kube-apiserver-etcd-client | etcd-ca | | client | | | kube-apiserver | kubernetes-ca | | server | 主机名, IP, 广播IP, 负载均衡IP/DNS | | kube-apiserver-kubelet-client | kubernetes-ca | system:masters | client | | | front-proxy-client | kubernetes-front-proxy-ca | | client | |
证书路径规范
各组件证书应按照标准路径存放:
| 组件 | 私钥路径 | 证书路径 | |--------------------------|---------------------------|--------------------------| | etcd CA | etcd/ca.key | etcd/ca.crt | | API Server etcd客户端 | apiserver-etcd-client.key | apiserver-etcd-client.crt| | Kubernetes CA | ca.key | ca.crt | | API Server | apiserver.key | apiserver.crt | | API Server kubelet客户端 | apiserver-kubelet-client.key | apiserver-kubelet-client.crt | | 前端代理CA | front-proxy-ca.key | front-proxy-ca.crt | | 前端代理客户端 | front-proxy-client.key | front-proxy-client.crt |
用户账户证书配置
管理员需要手动配置以下账户证书:
| 文件名 | 凭证名 | 默认CN | O (主题) | |-----------------------|---------------------|----------------------------|-------------------| | admin.conf | default-admin | kubernetes-admin | <admin-group>
| | super-admin.conf | default-super-admin | kubernetes-super-admin | system:masters | | kubelet.conf | default-auth | system:node:<nodeName>
| system:nodes | | controller-manager.conf | default-controller-manager | system:kube-controller-manager | | | scheduler.conf | default-scheduler | system:kube-scheduler | |
最佳实践建议
- 证书轮换策略:定期轮换证书,特别是高权限证书
- 最小权限原则:避免滥用system:masters超级用户组
- 证书备份:安全备份CA私钥和所有关键证书
- 监控过期:监控证书有效期,防止过期导致服务中断
- 专用CA:生产环境建议使用专用CA而非自签名证书
通过理解Kubernetes证书体系并遵循这些最佳实践,可以显著提升集群的安全性和可维护性。
website Kubernetes website and documentation repo: 项目地址: https://gitcode.com/gh_mirrors/webs/website
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考