Skip to content

k8s 通过 token 创建 kubeconfig 文件

本篇记录如何通过服务账号的 token 来创建 kubeconfig 文件

1. kubeconfig 文件模板

yaml
apiVersion: v1
kind: Config
clusters:
- name: default-cluster
  cluster:
    certificate-authority-data: {ca}
    server: {server}
contexts:
- name: default-context
  context:
    cluster: default-cluster
    namespace: default
    user: default-user
current-context: default-context
users:
- name: default-user
  user:
    token: {token}
  • server 集群的访问地址
  • token 服务账号的 token
  • ca 证书

2. 获取证书和 token

  1. 通过下面命令获取账号名为 apiadmin 的 secret 信息
bash
kubectl get secret/apiadmin -n kube-system -o json

输出如下:

json
{
    "apiVersion": "v1",
    "data": {
        "ca.crt": "LS0tLS1CRUdJTiBDRVJUSUZtCg==",
        "namespace": "a3ViN0ZW0=",
        "token": "ZXlKaGJHY2lPaUFia0E="
    },
    "kind": "Secret",
    "metadata": {
        "annotations": {},
        "creationTimestamp": "2023-12-05T07:44:07Z",
        "labels": {
            "kubernetes.io/legacy-token-last-used": "2025-02-28"
        },
        "name": "apiadmin",
        "namespace": "kube-system",
        "resourceVersion": "120014737",
        "uid": "ee00cf04-4c-486-9cf8-711cc3a"
    },
    "type": "kubernetes.io/service-account-token"
}
  • 证书:data['ca.crt'] 直接复制使用
  • token: data['token'] 此值为 base64 编码格式,需要进行解码
  1. token 解码
bash
token="ZXlKaGJHY2lPaUFia0E="
echo $token | base64 --decode

3. 生成 kubeconfig 文件

  1. 将模板保存为 kubeconfig 文件,并先配置 server 集群地址
  2. 根据第2步获取 ca 和 token 的值,配置模板中的相对应的变量

4. 验证使用

以 kubeconfig 文件保存为 .kube/kubeconfig 为例:

bash
kubectl --kubeconfig=.kube/kubeconfig get namespace

能正常输出结果就验证通过