kubeconfig 文件生成和赋权

1. 编写详细的 YAML 配置

您可以将以下内容保存为 rbac-config.yaml 文件。这里假设目标命名空间为 default(如需修改,请全局替换 default):

yaml

复制代码
# 1. 创建 ServiceAccount (服务账户)
apiVersion: v1
kind: ServiceAccount
metadata:
  name: pod-manager-sa
  namespace: default
---
# 2. 创建 Role (定义具体权限)
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: pod-manager-role
  namespace: default
rules:
  - apiGroups: [""]  # 核心 API 组
    resources: ["pods"]
    verbs: ["create", "delete"]  # 授予创建和删除 Pod 的权限
  - apiGroups: [""]
    resources: ["pods/exec"]
    verbs: ["create"]  # 授予进入 Pod 执行命令的权限
---
# 3. 创建 RoleBinding (绑定角色与账户)
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: pod-manager-rolebinding
  namespace: default
subjects:
  - kind: ServiceAccount
    name: pod-manager-sa
    namespace: default
roleRef:
  kind: Role
  name: pod-manager-role
  apiGroup: rbac.authorization.k8s.io

2. 应用 YAML 配置

在终端中执行以下命令,将上述配置应用到集群:

bash

复制代码
kubectl apply -f rbac-config.yaml

3. 创建长期有效的 Token Secret

由于 Kubernetes v1.24+ 版本不再自动为 ServiceAccount 生成 Secret,我们需要手动创建一个以获取长期 Token:

bash

复制代码
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
  name: pod-manager-sa-token
  namespace: default
  annotations:
    kubernetes.io/service-account.name: pod-manager-sa
type: kubernetes.io/service-account-token
EOF

4. 提取 Token 和 CA 证书

bash

复制代码
# 提取 Token 并解码
TOKEN=$(kubectl get secret pod-manager-sa-token -n default -o jsonpath='{.data.token}' | base64 -d)

# 提取 CA 证书并保存为文件
kubectl get secret pod-manager-sa-token -n default -o jsonpath='{.data.ca\.crt}' | base64 -d > ca.crt

# 获取 API Server 地址(请根据您实际的环境修改 IP 和端口)
APISERVER=https://192.168.1.100:6443 

5. 生成独立的 kubeconfig 文件

使用 kubectl config 命令将提取的信息组装成配置文件:

bash

复制代码
# 设置集群信息
kubectl config set-cluster k8s-cluster \
  --certificate-authority=ca.crt \
  --embed-certs=true \
  --server=${APISERVER} \
  --kubeconfig=pod-manager.kubeconfig

# 设置用户凭证(使用 Token)
kubectl config set-credentials pod-manager-sa \
  --token=${TOKEN} \
  --kubeconfig=pod-manager.kubeconfig

# 设置上下文,并限定默认命名空间
kubectl config set-context pod-manager-context \
  --cluster=k8s-cluster \
  --user=pod-manager-sa \
  --namespace=default \
  --kubeconfig=pod-manager.kubeconfig

# 设置当前上下文
kubectl config use-context pod-manager-context --kubeconfig=pod-manager.kubeconfig

6. 验证生成的 kubeconfig 权限

将生成的 pod-manager.kubeconfig 文件发给使用者,他们可以通过以下命令验证权限:

bash

复制代码
# 成功:验证创建 Pod 的权限
kubectl --kubeconfig=pod-manager.kubeconfig create -f pod.yaml

# 成功:验证执行命令的权限
kubectl --kubeconfig=pod-manager.kubeconfig exec -it <pod-name> -- /bin/sh

# 成功:验证删除 Pod 的权限
kubectl --kubeconfig=pod-manager.kubeconfig delete pod <pod-name>

# 失败:尝试查看 Pod 列表,会被拒绝(因为我们没有授予 get/list 权限)
kubectl --kubeconfig=pod-manager.kubeconfig get pods
# 预期报错: Error from server (Forbidden): pods is forbidden...
相关推荐
星野川崎2061 小时前
电商多店运维:云机24小时挂机频繁掉线、账号无故风控深度原因分析及解决方案
大数据·运维·服务器·云计算·电商
不灭的程序员阿澄3 小时前
在飞牛 NAS 上用 Docker 运行 DeepSeek Harness
运维·docker·容器
Elastic 中国社区官方博客4 小时前
让大模型思考,让小模型执行:在 Elastic Workflows 中拆分 LLM 成本
大数据·运维·数据库·人工智能·elasticsearch·ai
艾伦_耶格宇4 小时前
【AI】-4 OpenCode Go 接入 Obsidian 完整指南
运维·开发语言·人工智能·agent·opencode
SXkehuirongsheng4 小时前
APP开发定制和模板开发哪个更实用?
大数据·运维·人工智能
fb_123456 小时前
Linux三剑客超全精讲(grep+sed+awk)零基础入门|正则+实战面试题
linux·运维·服务器
HiDev_6 小时前
【非标自动化】2、认识元器件(节流阀)
运维·自动化
火车叼位7 小时前
Bash 实现 IDE 式补全的组件与配置
linux·运维
晓晓_za8986687 小时前
Geo 优化服务 CI/CD 流水线搭建:源码自动构建、测试与灰度发布
运维·服务器·tcp/ip·spring·缓存·ci/cd
潘正翔7 小时前
k8s高级_调度器Deployment
linux·运维·云原生·容器·kubernetes·jenkins·devops