You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自托管RKE2集群中如何列出拥有API访问权限的用户及各类证书?

在RKE2集群中查询用户API访问证书状态的方案

为什么kubectl get csr查不到历史记录

Kubernetes的CSR(CertificateSigningRequest)资源在被批准/拒绝后,默认不会长期留存,集群通常会自动清理已处理或过期的CSR。加上RKE2有自己的证书管理逻辑,部分用户证书可能通过内置机制签发,不会生成持久化的CSR记录,这就是你看不到上周签发证书的原因。

可行的查询方法

1. 翻查kube-apiserver日志找操作记录

kube-apiserver会记录所有证书签名相关的操作,直接过滤日志就能找到已批准、拒绝的CSR历史:

# 查看kube-apiserver容器日志
kubectl logs -n kube-system $(kubectl get pods -n kube-system -l component=kube-apiserver -o name) | grep -i "certificate\|csr"

如果是systemd管理的RKE2节点,也可以直接看系统日志:

journalctl -u rke2-server | grep -i "certificate\|csr"

2. 从Secret中提取已签发的用户证书

已签发的用户证书通常会以Secret形式存储在集群中,先找出所有带证书的Secret:

kubectl get secrets --all-namespaces -o json | jq '.items[] | select(.data["tls.crt"] != null) | {name: .metadata.name, namespace: .metadata.namespace}'

然后解析具体证书的持有者信息:

# 替换成你的Secret名称和命名空间
kubectl get secret <secret-name> -n <namespace> -o jsonpath='{.data.tls\.crt}' | base64 -d | openssl x509 -text -noout

从输出的Subject字段中,就能看到证书对应的用户信息。

3. 检查RKE2的CSR留存配置

查看kube-apiserver的配置文件(路径一般是/var/lib/rancher/rke2/server/manifests/kube-apiserver.yaml),看看有没有--csr-signer-cache-duration参数,这个参数控制CSR记录的留存时长,调整它可以让后续的CSR记录保留更久。

4. 查询已吊销的证书

Kubernetes本身没有内置的证书吊销列表(CRL)存储,但如果用了RKE2的证书吊销机制,或者搭配了cert-manager,可以这么查:

  • 如果用了cert-manager:
kubectl get certificaterequests --all-namespaces
  • 直接查etcd中的证书相关条目:
ETCDCTL_API=3 etcdctl --cacert=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --cert=/var/lib/rancher/rke2/server/tls/etcd/server-client.crt --key=/var/lib/rancher/rke2/server/tls/etcd/server-client.key --endpoints=https://127.0.0.1:2379 get /registry/certificates --prefix

补充说明

如果你是用cert-manager来管理用户证书的,除了上面的命令,还可以用kubectl get certificates --all-namespaces查看所有证书状态;对于那些已经没有CSR记录的长期有效证书,只能通过解析已存在的证书文件或Secret来获取用户信息。

内容的提问来源于stack exchange,提问作者repi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 21:23:24