跳到主要内容

制作Kubeconfig

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> # 当前上下文名称

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 需绑定 RBAC 权限(如 RoleClusterRole),否则无操作权限
  • 生产环境建议为不同用户生成独立 Token,遵循最小权限原则

创建上下文

关联集群与用户,并设置命名空间(可选)

kubectl config set-context my-context \
--cluster=my-cluster \
--user=my-user \
--namespace=default \ # 指定默认命名空间
--kubeconfig=config.yaml

设为默认上下文

kubectl config use-context my-context --kubeconfig=config.yaml

与kubeconfig常用的相关命令

  • 打印当前上下文对应的kubeconfig内容:
kubectl config view --minify --raw