1. 程式人生 > 其它 >k8s 許可權控制

k8s 許可權控制

K8s中許可權控制的API資源包括四個:

  • Role 作用域 namespace
  • ClusterRole 作用域 叢集
  • RoleBinding
  • ClusterRoleBinding

role

  • kubectl create role developer --verb=list --resource=pods
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""] # "" 指定核心 API 組
  resources: ["pods"]
  verbs: ["get", "watch", "list"]
  • ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  # 此處的 "namespace" 被省略掉是因為 ClusterRoles 是沒有名稱空間的。
  name: secret-reader
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get", "watch", "list"]
  • RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
# 此角色繫結允許 "jane" 讀取 "default" 名字空間中的 Pods
kind: RoleBinding
metadata:
  name: read-pods
  namespace: default
subjects:
# 你可以指定不止一個“subject(主體)”
- kind: User
  name: jane # "name" 是不區分大小寫的
  apiGroup: rbac.authorization.k8s.io
roleRef:
  # "roleRef" 指定與某 Role 或 ClusterRole 的繫結關係
  kind: Role # 此欄位必須是 Role 或 ClusterRole
  name: pod-reader     # 此欄位必須與你要繫結的 Role 或 ClusterRole 的名稱匹配
  apiGroup: rbac.authorization.k8s.io
  • ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
# 這個叢集角色繫結允許 "manager" 組中的任何使用者讀取任意名稱空間中 "secrets"。
kind: ClusterRoleBinding
metadata:
  name: read-secrets-global
subjects:
- kind: Group
  name: manager # 名稱區分大小寫
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: secret-reader
  apiGroup: rbac.authorization.k8s.io