K8S RBAC詳解

一.RBAC介紹

  RBAC是kubernetes的一種認證訪問授權機制,通過設置–authorization-mode=RBAC開啓RBAC。RBAC的授權步驟分爲兩步:

1)定義角色:在定義角色時會指定此角色對於資源的訪問控制的規則;

2)綁定角色:將主體與角色進行綁定,對用戶進行訪問授權。

如下是官網的圖解:
K8S RBAC詳解

二. role和clusterrole

role是權限的定義,在kubernetes中角色分爲兩種一種是role針對特定的命名空間,一種是clusterrole在整個集羣範圍內都生效。

例子如下:

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""] # "" indicates the core API group
  resources: ["pods"]
  verbs: ["get", "watch", "list"]

clusterrole 例子如下:

kind:ClusterRole
apiVersion:rbac.authorization.k8s.io/v1
metadata:
  name:secret-reader
rules:
- apiGroups:[""]
  resources:["secrets"] #明確資源類型
  verbs:["get","watch","list"]

三. serviceaccount
    Service account是爲了方便Pod裏面的進程調用Kubernetes API或其他外部服務而設計的,可以簡單的理解爲服務賬戶,一般RBAC的最普遍的使用都是使用serviceaccount,因爲k8s默認的user資源是不在集羣管理內的,而且使用方式過於繁瑣。serviceaccount可以簡單方便的實現認證和授權。
四. RoleBinding和clusterrolebinging
    定義好了角色也就是一個權限的集合,然後創建了一個serviceaccount也就是一個服務賬號,然後將這兩個東西綁定起來,就是授權的過程了。
例子如下:

kind:RoleBinding
apiVersion:rbac.authorization.k8s.io/v1
metadata:
  name:read-pods
  namespace:default
subjects: #主體
- kind:ServiceAccount
  name:jane
  apiGroup:rbac.authorization.k8s.io
roleRef: #引用的角色
  kind:Role
  name:pod-reader
  apiGroup:rbac.authorization.k8s.io

集羣角色綁定同上

kind:ClusterRoleBinding
apiVersion:rbac.authorization.k8s.io/v1
metadata:
  name:read-secrets-global
subjects:
- kind:ServiceAccount
  name:manager
  apiGroup:rbac.authorization.k8s.io
roleRef:
  kind:ClusterRole
  name:secret-reader
  apiGroup:rbac.authorization.k8s.io

這樣就完成了一個完整的授權!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章