如何通过kubectl程序化创建Rancher API Key
如何通过kubectl程序化创建Rancher API Key
没问题,既然你能访问Rancher所在的K8s管理集群,确实可以直接通过kubectl来程序化创建API Key,不用走浏览器登录那一套。核心思路是Rancher的所有配置(包括API密钥)都以自定义资源(CRD)的形式存储在etcd中,我们直接操作这些资源就行。
具体步骤:
确认Rancher的API Key CRD存在
首先先检查集群里有没有Rancher的API Key自定义资源定义,执行以下命令:kubectl get crd apiKeys.management.cattle.io如果返回正常的CRD信息,就说明可以继续操作。
编写API Key的配置YAML文件
创建一个名为rancher-api-key.yaml的文件,内容如下(根据你的需求调整字段):apiVersion: management.cattle.io/v3 kind: APIKey metadata: generateName: api-key- spec: description: "程序化通过kubectl创建的Rancher API Key" expiresAt: "2025-12-31T23:59:59Z" # 可选:设置密钥过期时间,不填则永久有效 userName: "admin" # 替换为你要绑定的Rancher用户名generateName:让K8s自动生成唯一的API Key名称,避免手动命名冲突description:给API Key加个描述,方便后续识别用途expiresAt:建议设置过期时间,提升安全性,格式要符合RFC3339标准userName:必须是Rancher中已经存在的用户,比如默认的admin
创建API Key资源
执行kubectl命令应用这个配置文件:kubectl apply -f rancher-api-key.yaml执行成功后,K8s会自动创建API Key资源,同时生成对应的Secret存储密钥内容。
获取生成的API Key密钥
首先找到刚创建的API Key对应的Secret名称:# 列出所有API Key相关的Secret kubectl get secrets -l cattle.io/creator=norman,cattle.io/resource-kind=APIKey找到最新创建的那个Secret(可以通过创建时间判断),然后执行以下命令提取密钥:
kubectl get secret <你的Secret名称> -o jsonpath='{.data.value}' | base64 -d输出的内容就是完整的Rancher API Key,格式通常是
token-xxxxxxxxxxxx,可以直接用来调用Rancher的API接口。
注意事项:
- 确保你操作的是Rancher所在的管理集群,而不是下游的工作负载集群,Rancher的核心CRD都存储在管理集群中
- API Key的密钥要妥善保存,一旦泄露可能会导致集群权限被滥用
- 如果需要创建绑定到其他用户的API Key,只需要修改YAML中的
userName字段即可
备注:内容来源于stack exchange,提问作者d_inevitable
相关产品推荐
相关产品推荐

