如何使用Golang在Kubernetes集群外从Kubeconfig文件程序化生成Bearer Token
从Kubeconfig生成Kubernetes API Bearer Token方案
你提供的示例Kubeconfig采用的是X509客户端证书认证模式,这种模式下Kubeconfig本身不直接内置Bearer Token,分两种场景处理:
场景1:Kubeconfig自带token字段
如果你的Kubeconfig中users[*].user节点下存在token字段,直接读取该字段的值即可作为Bearer Token使用,无需额外生成。
场景2:X509证书认证模式(你的示例属于该类)
需要用证书身份主动向Kubernetes API申请有效Bearer Token,无需依赖第三方K8s库或kubectl,实现步骤如下:
- 第一步:解析Kubeconfig提取3个核心参数
- 集群API地址:对应
clusters[*].cluster.server字段,你的示例值为https://192.168.1.18:6443 - 客户端证书Base64值:对应
users[*].user.client-certificate-data字段 - 客户端私钥Base64值:对应
users[*].user.client-key-data字段
- 集群API地址:对应
- 第二步:解码证书和私钥
可直接用原生Base64解码能力处理,shell环境下的解码示例:# 解码客户端证书 echo "你提取的client-certificate-data内容" | base64 -d > client.crt # 解码客户端私钥 echo "你提取的client-key-data内容" | base64 -d > client.key - 第三步:调用API申请Bearer Token
用任意支持双向TLS的HTTP客户端即可发起请求,无需K8s专用依赖,curl请求示例如下:
接口返回结果中curl --cert client.crt --key client.key -k -X POST \ https://192.168.1.18:6443/api/v1/namespaces/default/serviceaccounts/default/token \ -H "Content-Type: application/json" \ -d '{"spec":{"expirationSeconds":3600}}'status.token字段就是可用的Bearer Token,调用K8s API时携带请求头Authorization: Bearer <获取到的token>即可完成身份认证。
补充说明
如果你只是需要调用K8s API,不需要额外转换为Bearer Token,直接用客户端证书+私钥做双向TLS认证即可,和Bearer Token的认证效果完全一致。
内容的提问来源于stack exchange,提问作者anilkuscu
相关产品推荐
相关产品推荐

