Skip to content

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),可读取集群范围内所有资源,但无法创建、修改或删除。

资源清单 ​

资源名称命名空间
Namespacedeveloper-
ServiceAccountdeveloperdeveloper
ClusterRoleBindingdeveloper-view-
关联 ClusterRoleview(内置)-

操作步骤 ​

1. 创建命名空间和 ServiceAccount ​

bash
kubectl create ns developer
kubectl create sa developer -n developer

2. 绑定 RBAC 权限 ​

bash
kubectl create clusterrolebinding developer-view \
  --clusterrole=view \
  --serviceaccount=developer:developer

3. 生成 Token ​

bash
kubectl create token developer -n developer --duration=87600h

4. 构建 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

基于 VitePress 构建