制作 Kube Config
Kubeconfig介绍
Kubeconfig是Kubernetes集群的认证和授权配置文件,通常保存在~/.kube/config文件中,该文件支持包含多个集群配置,每个集群配置包含多个用户配置,用户配置包含多个上下文配置,上下文配置包含集群配置和用户配置
Kubeconfig结构
Kubeconfig的通用结构如下:
apiVersion: v1
kind: Config
clusters: # 集群列表
- name: <cluster-name> # 集群名称
cluster:
server: <https://<master-ip>:<port>> # 集群API服务器地址
certificate-authority-data: <base64-encoded-ca-cert> # CA证书
users: # 用户列表
- name: <user-name> # 用户名称
user:
client-certificate-data: <base64-encoded-client-cert> # 客户端证书
client-key-data: <base64-encoded-client-key> # 客户端密钥
token: <token> # 令牌(可选)
contexts: # 上下文列表
- name: <context-name> # 上下文名称
context:
cluster: <cluster-name> # 集群名称
user: <user-name> # 用户名称
current-context: <context-name> # 当前上下文名称
token 型 kubeconfig 与证书型 kubeconfig 的区别
上面的示例中,user 部分既可以使用 client-certificate-data/client-key-data(证书方式),也可以使用 token(令牌方式):
-
证书型 kubeconfig(client-certificate-data / client-key-data)
- 使用 X.509 客户端证书 + 私钥完成双向 TLS 认证。
- 常见于集群管理员、集群组件(如 kube-controller-manager)或通过集群 PKI 正式签发的证书。
- 证书通常由集群 CA 签发,有有效期,更新证书时需要重新分发 kubeconfig。
- 优点:安全性高、与 PKI 体系集成良好;缺点:证书签发、更新和分发相对繁琐。
-
token 型 kubeconfig(user.token)
- 客户端只携带一个 Bearer Token 字符串,不需要本地保存私钥。
- 常见于基于 ServiceAccount 的访问、CI/CD 系统、自动化脚本等场景。
- Token 的权限由绑定的
ServiceAccount+RBAC决定,更易于按需生成和回收。 - 优点:生成和分发简单,权限粒度可控;缺点:一旦泄露即等价于泄露凭据,需要注意保密和过期策略。
整体来说:
- 管理型、长期、需要 PKI 体系的账号:更适合使用 证书型 kubeconfig。
- 自动化、按需、短期或仅限某一应用的访问:更适合使用 token 型 kubeconfig(通常基于 ServiceAccount)。
Kubeconfig生成
可以使用kubectl config命令生成完整的Kubeconfig文件
根据user token、apiserver 地址 和 cadata(Base64 编码的 CA 证书)生成 kubeconfig
设置集群参数
将 cadata 解码为 CA 证书文件,并绑定集群信息:
# 解码 CA 证书(假设 cadata 为 Base64 字符串)
echo "<cadata>" | base64 -d > ca.crt
# 设置集群参数
kubectl config set-cluster my-cluster \
--certificate-authority=ca.crt \
--embed-certs=true \ # 将证书嵌入 kubeconfig
--server="<apiserver-地址>" \ # 例如 https://192.168.1.100:6443
--kubeconfig=config.yaml
关键参数:
--embed-certs=true:将CA证书直接写入kubeconfig,避免依赖外部文件--server:必须是完整的HTTPS地址(如https://<IP>:6443)
设置用户参数
使用 token 定义用户身份:
kubectl config set-credentials my-user \
--token="<token>" \ # 提供的 token 字符串
--kubeconfig=config.yaml
Token 从哪里来?
通常我们会使用 ServiceAccount 来为某个工作负载生成访问集群的 Token,不同 Kubernetes 版本获取 Token 的方式略有不同: