← 返回上一頁
Kubernetes

用 Permission Manager 輕鬆管理 K8s RBAC:Web 介面建立使用者與 Kubeconfig

本頁目錄

前言

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/

這會建立以下資源:

  • permissionmanagerusers CRD
  • 四個預設權限模板 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 中設定的密碼登入。

建立使用者

  1. 點擊首頁的「Create New User」
  2. 輸入使用者名稱
  3. 選擇要授權的 Namespace
  4. 選擇權限模板(可在 Summary 區域查看模板包含的具體權限)
  5. 點擊 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 的准入控制),還是需要搭配其他工具使用。

分享這篇
X LinkedIn Facebook Hacker News Reddit

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料