前言
Kubernetes 的 RBAC 權限管理一直是讓人又愛又恨的功能。愛的是它粒度夠細,恨的是手動管理 ClusterRole、RoleBinding 和 kubeconfig 實在太繁瑣。Permission Manager 是一款開源的 RBAC 管理工具,提供簡潔的 Web 介面,讓你能夠快速建立使用者、分配 Namespace 權限,並一鍵生成 kubeconfig 檔案。
專案位址:https://github.com/sighupio/permission-manager
功能特色
- Web 介面操作,不需要手動編寫 YAML
- 支援建立使用者並分配 Namespace 級別權限
- 內建多種權限模板(admin、read-only、developer、operation)
- 自動生成 kubeconfig 檔案,可直接下載使用
- 支援自訂權限模板
安裝部署
取得原始碼
git clone https://github.com/sighupio/permission-manager.git
cd permission-manager
建立 Namespace
kubectl create namespace permission-manager
建立 Secret 儲存設定
apiVersion: v1
kind: Secret
metadata:
name: permission-manager
namespace: permission-manager
type: Opaque
stringData:
PORT: "4000"
CLUSTER_NAME: "my-cluster"
CONTROL_PLANE_ADDRESS: "https://YOUR_API_SERVER:6443"
BASIC_AUTH_PASSWORD: "YOUR_PASSWORD"
參數說明:
| 參數 | 用途 |
|---|---|
| PORT | 服務監聽埠 |
| CLUSTER_NAME | 生成 kubeconfig 時使用的叢集名稱 |
| CONTROL_PLANE_ADDRESS | 生成 kubeconfig 時使用的 API Server 位址 |
| BASIC_AUTH_PASSWORD | Web 介面登入密碼(預設使用者名稱為 admin) |
部署 CRD 與預設權限模板
kubectl apply -f deployments/kubernetes/seeds/
這會建立以下資源:
permissionmanagerusersCRD- 四個預設權限模板 ClusterRole:admin、read-only、developer、operation
kubectl get clusterrole | grep ^template
# template-cluster-resources___admin
# template-cluster-resources___read-only
# template-namespaced-resources___developer
# template-namespaced-resources___operation
部署 Permission Manager
kubectl apply -f deployments/kubernetes/deploy.yml
# 確認 Pod 狀態
kubectl get pod -n permission-manager
建立 Ingress(以 Traefik 為例)
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: permission-manager
namespace: permission-manager
spec:
entryPoints:
- web
routes:
- match: Host(`rbac.example.com`)
kind: Rule
services:
- name: permission-manager
port: 4000
如果使用 Nginx Ingress Controller,建立標準的 Ingress 資源即可。
使用方式
登入管理介面
開啟瀏覽器存取設定的域名,使用帳號 admin 和 Secret 中設定的密碼登入。
建立使用者
- 點擊首頁的「Create New User」
- 輸入使用者名稱
- 選擇要授權的 Namespace
- 選擇權限模板(可在 Summary 區域查看模板包含的具體權限)
- 點擊 Save
儲存後,頁面下方會出現「Show kubeconfig」按鈕,點擊即可查看並複製該使用者的 kubeconfig 內容。將內容儲存為檔案(例如 user-config)即可使用。
驗證權限
# 存取被授權的 Namespace - 應該成功
kubectl --kubeconfig user-config -n monitoring get pod
# 存取未授權的 Namespace - 應該被拒絕
kubectl --kubeconfig user-config -n kube-system get pod
# Error from server (Forbidden): ...
自訂權限模板
Permission Manager 的權限模板就是帶有特定前綴的 ClusterRole。前綴規則如下:
template-namespaced-resources___— Namespace 級別權限template-cluster-resources___— 叢集級別權限
例如,建立一個只允許查看 Pod 的自訂模板:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: template-namespaced-resources___pod-viewer
rules:
- apiGroups: ["*"]
resources:
- "pods"
- "pods/log"
- "pods/portforward"
- "podtemplates"
- "deployments"
verbs: ["get", "list", "watch"]
部署這個 ClusterRole 後,新的 pod-viewer 模板就會自動出現在 Web 介面的下拉選單中。
實務建議
- 密碼安全:BASIC_AUTH_PASSWORD 請設定高強度密碼,不要使用預設值
- HTTPS:生產環境務必透過 TLS 加密存取管理介面
- 最小權限原則:自訂模板時只給必要的權限,避免使用萬用字元
"*" - 定期審計:定期檢視已建立的使用者和權限分配,移除不再需要的帳號
總結
Permission Manager 大幅降低了 Kubernetes RBAC 管理的門檻。對於需要頻繁建立使用者、分配權限的團隊(例如多租戶環境或開發團隊快速 onboarding),它比手動管理 YAML 高效得多。不過要注意,它的定位是輕量的 RBAC 管理工具,如果需要更複雜的策略(如 OPA/Gatekeeper 的准入控制),還是需要搭配其他工具使用。

發佈留言