k8s吊销证书
您提到的 `--certificate-blacklist` 参数确实不存在于现代 Kubernetes 版本中(该参数在非常旧的实验性版本中短暂出现过)。以下是针对 **现代 Kubernetes 版本(v1.20+)** 的标准证书吊销方案:
---
### **正确吊销证书的 3 种方法(2023年最新实践)**
#### 方法 1:使用 Certificate Revocation List (CRL) - **推荐方案**
```bash
# 1. 创建吊销数据库(首次运行时)
sudo touch /etc/kubernetes/pki/index.txt
echo 01 | sudo tee /etc/kubernetes/pki/crlnumber
# 2. 吊销证书(需提供证书文件)
sudo openssl ca -revoke /path/to/revoke.crt \
-keyfile /etc/kubernetes/pki/ca.key \
-cert /etc/kubernetes/pki/ca.crt \
-config <(echo '
[ ca ]
default_ca = CA_default
[ CA_default ]
database = /etc/kubernetes/pki/index.txt
crlnumber = /etc/kubernetes/pki/crlnumber
')
# 3. 生成CRL文件
sudo openssl ca -gencrl \
-out /etc/kubernetes/pki/ca.crl \
-keyfile /etc/kubernetes/pki/ca.key \
-cert /etc/kubernetes/pki/ca.crt
# 4. 启用API Server的CRL检查
sudo vi /etc/kubernetes/manifests/kube-apiserver.yaml
```
添加参数:
```yaml
- --tls-crl-file=/etc/kubernetes/pki/ca.crl
```
#### 方法 2:通过 CSR API 吊销(适用于动态证书)
```bash
# 1. 查看待吊销证书的CSR
kubectl get certificatesigningrequests
# 2. 拒绝CSR(等效吊销)
kubectl certificate deny <csr-name>
```
#### 方法 3:核武器选项 - **更换整个CA**
```bash
# 1. 备份旧CA
sudo cp -r /etc/kubernetes/pki/ /etc/kubernetes/pki-backup/
# 2. 生成新CA
sudo kubeadm certs renew all --cert-dir /etc/kubernetes/pki
# 3. 重启所有组件
sudo systemctl restart kubelet
```
---
### **关键验证步骤**
```bash
# 验证CRL是否包含被吊销证书
openssl crl -in /etc/kubernetes/pki/ca.crl -noout -text | grep "Serial Number"
# 测试吊销效果(应返回Forbidden)
kubectl --client-certificate=revoked.crt --client-key=revoked.key get nodes
```
---
### **各方案对比**
| 方案 | 适用场景 | 优势 | 缺点 |
|---------------|-------------------------|-------------------------|-----------------------|
| **CRL吊销** | 精准吊销特定证书 | 不影响其他证书 | 需手动维护CRL文件 |
| **CSR吊销** | 动态颁发的证书 | 原生K8s支持 | 仅适用于CSR API证书 |
| **更换CA** | CA私钥泄露等严重情况 | 彻底解决问题 | 影响所有证书 |
---
### **常见问题解答**
**Q:为什么我的集群没有`--certificate-blacklist`参数?**
A:该参数已在2018年左右的版本中被移除,现代版本统一使用标准CRL方案。
**Q:如何让CRL自动更新?**
A:可以设置cronjob定期执行吊销和CRL生成:
```bash
0 * * * * /usr/bin/openssl ca -gencrl -out /etc/kubernetes/pki/c
浙公网安备 33010602011771号