16.2.4 证书与认证体系基础运维
证书与认证体系基础运维#
Kubernetes 认证体系以 CA/证书、kubeconfig 与 ServiceAccount 为核心,目标是确保组件间通信安全、身份可追溯、证书生命周期可管控,并能在异常时快速定位与恢复。
1. 认证与证书关系概览(原理草图)#
2. 关键证书路径与权限检查(含示例)#
- 默认路径:
/etc/kubernetes/pki/ - 私钥权限建议:
600,仅 root 访问
检查证书文件与权限:
ls -l /etc/kubernetes/pki
stat /etc/kubernetes/pki/ca.key
# 期望:-rw------- 1 root root ...
查看证书内容与有效期:
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text | head -n 20
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -enddate
# 期望输出:notAfter=...
kubeadm 方式一键检查到期:
kubeadm certs check-expiration
# 期望输出:CERTIFICATE EXPIRES RESIDUAL TIME ...
3. kubeconfig 结构与实际使用(含示例)#
- 管理配置:
/etc/kubernetes/admin.conf - 用户配置推荐复制到个人目录:
~/.kube/config
查看 kubeconfig 关键字段:
kubectl config view --minify
# 期望输出 clusters/users/contexts
将 admin.conf 复制为当前用户配置:
mkdir -p ~/.kube
sudo cp /etc/kubernetes/admin.conf ~/.kube/config
sudo chown $(id -u):$(id -g) ~/.kube/config
kubectl get nodes
# 期望输出:节点列表
4. 证书更新与组件重启(含示例流程)#
1)备份证书目录
tar -czf /root/pki-backup-$(date +%F).tgz /etc/kubernetes/pki
2)kubeadm 统一更新
kubeadm certs renew all
# 期望输出:renewed ...
3)重启控制面组件(静态 Pod)
# kubelet 重新加载静态 Pod
systemctl restart kubelet
# 或手动触发 apiserver 等静态 Pod 重建
crictl ps | grep kube-apiserver
# 期望:容器被重新拉起
4)验证访问
kubectl get componentstatuses
kubectl get nodes
# 期望:Healthy / Ready
5. ServiceAccount Token 运维(含示例)#
查看默认 ServiceAccount 与 Token:
kubectl get sa -n default
kubectl describe sa default -n default
# 期望:tokens 字段(新版可能为空,使用投射 token)
投射短期 Token 示例:
kubectl create token default -n default
# 期望:返回 JWT token
最小权限绑定示例:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get","list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
namespace: default
name: read-pods
subjects:
- kind: ServiceAccount
name: default
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
6. 常见故障排查(含命令与预期)#
1)apiserver 认证失败
# 证书过期检查
kubeadm certs check-expiration | grep apiserver
# 期望:RESIDUAL TIME 不为 0
# 客户端证书信息
openssl x509 -in ~/.kube/client.crt -noout -subject
# 期望:CN 与 RBAC 规则匹配
2)etcd 连接异常
# 检查 apiserver 连接参数
grep -n "etcd-servers" /etc/kubernetes/manifests/kube-apiserver.yaml
# 期望:证书与 etcd 地址一致
# 检查证书 SAN
openssl x509 -in /etc/kubernetes/pki/etcd/server.crt -noout -text | grep -A1 "Subject Alternative Name"
# 期望:包含 etcd 节点 IP/DNS
3)kubelet 无法注册
journalctl -u kubelet -n 100 --no-pager | grep -i certificate
# 期望:无过期/拒绝信息
# 查看 CSR 状态
kubectl get csr
# 期望:Approved
7. 演练练习(可执行)#
练习 1:检查所有证书剩余时间并生成清单
kubeadm certs check-expiration > /root/cert-expiration.txt
cat /root/cert-expiration.txt
# 期望:清单可用于监控导入
练习 2:模拟证书轮换后的连通性验证
kubeadm certs renew apiserver
systemctl restart kubelet
kubectl get nodes
# 期望:节点依旧 Ready
练习 3:创建最低权限 ServiceAccount 并验证访问
kubectl apply -f rbac-pod-reader.yaml
kubectl create token default -n default
# 期望:得到 token,用于 API 访问测试
8. 运维建议清单#
- 提前 30 天预警证书到期,纳入统一告警系统
- CA 私钥严格加密与权限隔离,生产环境建议独立 CA
- 证书更新后必须执行组件滚动重启与健康校验
- 管理员 kubeconfig 不共享,按角色分发最小权限配置