K3s RBAC 权限配置
背景
K3s 安装后默认生成 /etc/rancher/k3s/k3s.yaml,该文件包含 admin 级别的 client 证书,拥有集群超级管理员权限。为保障安全,不应共享此文件给普通用户。
推荐做法:为每个用户创建独立的 ServiceAccount,绑定最小权限的 RBAC Role,并生成专属 kubeconfig。
权限模型
用户 (developer)
└─ ServiceAccount (developer) ── Namespace: developer
└─ ClusterRoleBinding (developer-view)
└─ ClusterRole: view (只读)当前授予 view 权限(Kubernetes 内置 ClusterRole),可读取集群范围内所有资源,但无法创建、修改或删除。
资源清单
| 资源 | 名称 | 命名空间 |
|---|---|---|
| Namespace | developer | - |
| ServiceAccount | developer | developer |
| ClusterRoleBinding | developer-view | - |
| 关联 ClusterRole | view(内置) | - |
操作步骤
1. 创建命名空间和 ServiceAccount
bash
kubectl create ns developer
kubectl create sa developer -n developer2. 绑定 RBAC 权限
bash
kubectl create clusterrolebinding developer-view \
--clusterrole=view \
--serviceaccount=developer:developer3. 生成 Token
bash
kubectl create token developer -n developer --duration=87600h4. 构建 kubeconfig
将以下内容保存为 ~/.kube/config:
yaml
apiVersion: v1
kind: Config
current-context: developer-context
clusters:
- cluster:
certificate-authority-data: <base64-ca-cert>
server: https://127.0.0.1:6443
name: k3s-cluster
contexts:
- context:
cluster: k3s-cluster
namespace: developer
user: developer
name: developer-context
users:
- name: developer
user:
token: <sa-token>验证
bash
# 查看 Pod(允许)
kubectl get pods -A
# 尝试删除(被拒绝)
kubectl delete pod -n default nonexistent
# 输出: Error from server (Forbidden): ...权限调整
如需调整权限,可更换不同的 ClusterRole 或创建自定义 Role:
| ClusterRole | 权限 |
|---|---|
view | 只读(当前) |
edit | 读写(不能操作 RBAC) |
admin | 命名空间管理员 |
| 自定义 Role | 按需定制 |
示例:切换到 edit 权限
bash
kubectl delete clusterrolebinding developer-view
kubectl create clusterrolebinding developer-edit \
--clusterrole=edit \
--serviceaccount=developer:developer配置文件
生成的 kubeconfig 文件位于:configs/kubeconfig-developer.yaml