k8s重新bind 管理管cn
在 Kubernetes 中,要 **创建新的管理员 CN 并删除旧管理员 (`/O=system:masters/CN=kubernetes-admin`)**,需分三步操作:
---
### **步骤 1:创建新管理员证书(CN=new-admin)**
#### 1.1 生成私钥和 CSR
```bash
# 生成私钥
openssl genrsa -out new-admin.key 2048
# 创建 CSR (Common Name=new-admin)
openssl req -new -key new-admin.key \
-out new-admin.csr \
-subj "/O=system:masters/CN=new-admin"
```
#### 1.2 使用集群 CA 签发证书
```bash
# 使用 kubeadm 管理的 CA 签发(有效期 1 年)
sudo openssl x509 -req -in new-admin.csr \
-CA /etc/kubernetes/pki/ca.crt \
-CAkey /etc/kubernetes/pki/ca.key \
-CAcreateserial \
-out new-admin.crt -days 365
```
#### 1.3 创建 kubeconfig 文件
```bash
# 设置集群信息
kubectl config set-cluster kubernetes \
--certificate-authority=/etc/kubernetes/pki/ca.crt \
--server=https://<API-SERVER-IP>:6443 \
--kubeconfig=new-admin.kubeconfig
# 设置用户凭证
kubectl config set-credentials new-admin \
--client-certificate=new-admin.crt \
--client-key=new-admin.key \
--kubeconfig=new-admin.kubeconfig
# 设置上下文
kubectl config set-context new-admin@kubernetes \
--cluster=kubernetes \
--user=new-admin \
--kubeconfig=new-admin.kubeconfig
# 设为默认上下文
kubectl config use-context new-admin@kubernetes \
--kubeconfig=new-admin.kubeconfig
```
---
### **步骤 2:移除旧管理员权限**
#### 2.1 删除旧 CN 的 ClusterRoleBinding
```bash
# 查找旧绑定
kubectl get clusterrolebindings -o wide | grep "kubernetes-admin"
# 删除绑定(示例名称,按实际情况调整)
kubectl delete clusterrolebinding cluster-admin-kubernetes-admin
```
#### 2.2 (可选)撤销旧证书
```bash
# 方法 1:通过 RBAC 确保旧证书无权限(即使证书有效也无法操作)
kubectl create clusterrolebinding revoked-admin \
--clusterrole=view \ # 仅授予只读权限
--user="kubernetes-admin"
# 方法 2:更换 CA 彻底吊销(需重启集群)
# sudo kubeadm init phase certs renew all
```
---
### **步骤 3:验证新管理员权限**
```bash
# 使用新 kubeconfig 测试
KUBECONFIG=new-admin.kubeconfig kubectl get nodes
# 验证旧管理员失效
kubectl --client-certificate=old-admin.crt --client-key=old-admin.key get nodes
# 预期输出:Error from server (Forbidden)
```
---
### **关键配置对比**
| 项目 | 旧管理员 (`kubernetes-admin`) | 新管理员 (`new-admin`) |
|---------------------|-----------------------------------|-----------------------------------|
| **证书CN** | `CN=kubernetes-admin` | `CN=new-admin` |
| **用户组** | `O=system:masters` | `O=system:masters` (同权限级别) |
| **访问方式** | 原 kubeconfig 失效 | 使用新生成的 `new-admin.kubeconfig` |
| **RBAC权限** | 已降级或删除 | 自动继承 `cluster-admin` 权限 |
---
### **补充说明**
1. **旧证书残留风险**:
若无法更换 CA,旧证书仍能通过 API Server 验证(但无权限)。彻底解决方案:
```bash
# 在 API Server 启动参数中添加证书黑名单(需自定义准入控制器)
# --revoked-certificates=/etc/kubernetes/revoked-certs.yaml
```
2. **生产环境建议**:
- 为每个管理员创建独立 CN(如 `CN=user-zhangsan`)
- 使用 RBAC 精细控制权限,而非全部依赖 `system:masters`
3. **证书自动轮换**:
现代 Kubernetes 版本(≥1.19)建议使用 [Certificate Signing Requests (CSR)](https://kubernetes.io/docs/reference/access-authn-authz/certificate-signing-requests/) 动态管理证书。

浙公网安备 33010602011771号