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 不共享,按角色分发最小权限配置