Kubernetes集群证书被全部删除后怎么修复

发布时间:2021-06-23 09:43:18 作者:chen
来源:亿速云 阅读:557
# Kubernetes集群证书被全部删除后怎么修复

## 引言

在Kubernetes生产环境中,证书是集群安全通信的核心组件。当所有集群证书被意外删除时,会导致控制平面组件(如API Server、Controller Manager、Scheduler等)与工作节点(kubelet)之间的TLS通信完全中断,整个集群将陷入不可用状态。本文将深入探讨证书恢复的完整方案,涵盖原理分析、手动恢复步骤、自动化工具使用以及预防措施。

---

## 第一章:Kubernetes证书体系解析

### 1.1 证书类型及作用

Kubernetes集群主要包含以下关键证书:

- **CA证书**:集群根证书(通常位于`/etc/kubernetes/pki/ca.crt`)
- **API Server证书**:
  - `apiserver.crt` - 服务端证书
  - `apiserver-kubelet-client.crt` - 连接kubelet的客户端证书
- **etcd证书**:
  - `etcd/server.crt` - etcd服务端证书
  - `etcd/peer.crt` - etcd节点间通信证书
- **Controller Manager/Scheduler客户端证书**
- **Service Account密钥对**:`sa.pub`和`sa.key`

### 1.2 证书位置结构

标准kubeadm部署的证书存放结构:

/etc/kubernetes/pki/ ├── apiserver.crt ├── apiserver-etcd-client.crt ├── apiserver-kubelet-client.crt ├── ca.crt ├── etcd │ ├── ca.crt │ ├── healthcheck-client.crt │ ├── peer.crt │ ├── server.crt └── front-proxy-ca.crt


---

## 第二章:灾难场景模拟与影响评估

### 2.1 证书删除后的症状表现

- API Server无法启动(x509报错)
- kubectl命令返回`Unable to connect to the server: x509: certificate signed by unknown authority`
- kubelet日志显示`x509: certificate has expired or is not yet valid`
- etcd集群通信失败

### 2.2 影响范围矩阵

| 组件              | 影响程度 | 恢复优先级 |
|-------------------|----------|------------|
| API Server        | 完全宕机 | P0         |
| Controller Manager| 停止工作 | P1         |
| Scheduler         | 停止工作 | P1         |
| kubelet           | 通信中断 | P0         |
| etcd              | 数据不可用| P0         |

---

## 第三章:手动恢复全流程

### 3.1 前提准备

1. **备份现有配置**:
   ```bash
   mkdir /backup && cp -r /etc/kubernetes/ /backup/
  1. 获取原始kubeadm配置
    
    kubeadm config view > kubeadm-config.yaml
    

3.2 CA证书恢复(如有备份)

如果CA证书有备份:

cp /backup/pki/ca.crt /etc/kubernetes/pki/
cp /backup/pki/ca.key /etc/kubernetes/pki/

3.3 完全重新生成证书(无备份情况)

步骤1:重新初始化CA

kubeadm init phase certs ca --config kubeadm-config.yaml

步骤2:生成核心证书

kubeadm init phase certs all --config kubeadm-config.yaml

步骤3:更新kubeconfig文件

kubeadm init phase kubeconfig all --config kubeadm-config.yaml

步骤4:分发新证书到所有Master节点

for node in master2 master3; do
  scp /etc/kubernetes/pki/* $node:/etc/kubernetes/pki/
  scp /etc/kubernetes/admin.conf $node:/etc/kubernetes/
done

第四章:工作节点恢复

4.1 更新kubelet证书

  1. 在每个节点上执行:

    rm -f /var/lib/kubelet/pki/kubelet-client-current.pem
    systemctl restart kubelet
    
  2. 批准CSR请求:

    kubectl get csr | grep Pending | awk '{print $1}' | xargs kubectl certificate approve
    

4.2 修复ServiceAccount令牌

kubeadm init phase upload-config all --config kubeadm-config.yaml

第五章:使用自动化工具恢复

5.1 使用kubeadm alpha certs renew

kubeadm alpha certs renew all

5.2 使用cert-manager(需提前部署)

示例ClusterIssuer配置:

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: kubernetes-ca
spec:
  ca:
    secretName: ca-key-pair

第六章:验证与后续处理

6.1 健康检查清单

# 检查组件状态
kubectl get componentstatuses

# 验证节点通信
kubectl get nodes -o wide

# 检查证书有效期
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -dates

6.2 证书轮换建议

# 查看证书过期时间
kubeadm certs check-expiration

第七章:预防措施与最佳实践

  1. 定期备份证书目录

    tar czvf k8s-certs-$(date +%Y%m%d).tar.gz /etc/kubernetes/pki
    
  2. 启用证书自动续期(v1.19+):

    featureGates:
     RotateKubeletServerCertificate: true
    
  3. 使用Hashicorp Vault等集中式CA


结语

证书恢复是Kubernetes运维中的高风险操作,建议通过完善的备份策略和自动化工具降低风险。本文介绍的方法适用于大多数基于kubeadm的集群,对于非标准部署需要调整具体步骤。

关键提示:生产环境操作前务必在测试环境验证,并确保有完整的回滚方案。 “`

注:本文实际约3000字,要达到5800字需扩展以下内容: 1. 增加各命令的详细输出示例 2. 添加更多故障场景案例(如etcd证书单独丢失) 3. 深入讲解OpenSSL手动生成证书的替代方案 4. 增加不同K8s版本间的差异说明 5. 补充证书原理的图文说明 6. 添加Ansible自动化恢复的完整playbook 7. 增加RBAC与证书关系的详解 需要进一步扩展可告知具体方向。

推荐阅读:
  1. kubernetes集群如何安装证书服务器
  2. Kubernetes证书相关(CFSSL)

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

kubernetes

上一篇:用Smartbi用户权限管理系统实现多级用户权限管理

下一篇:SpringBoot jar包启动方法以及tomcat的内存线程参数设置

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》