Roleの作成


$ cat < apiVersion: rbac.authorization.k8s.io/v1
> kind: Role
> metadata:
>   namespace: default
>   name: sample-role
> rules:
> - apiGroups: [""]
>   resources: ["pods"]
>   verbs: ["get", "watch", "list"]
> EOF
role.rbac.authorization.k8s.io/sample-role created

RoleBindingの作成 (bobとsample-roleをひもづける)


$ cat < apiVersion: rbac.authorization.k8s.io/v1
> kind: RoleBinding
> metadata:
>   name: sample-rolebinding
>   namespace: default
> subjects:
> - kind: User
>   name: bob 
>   apiGroup: rbac.authorization.k8s.io
> roleRef:
>   kind: Role
>   name: sample-role
>   apiGroup: rbac.authorization.k8s.io
> EOF
rolebinding.rbac.authorization.k8s.io/sample-rolebinding created

再度、bobでdefaultのNamespaceに対してPodを取得を試みると、存在するPodの情報を取得できるようになりました。


$ kubectl get pods --namespace=default
NAME                          READY   STATUS    RESTARTS   AGE
hello-node-6b89d599b9-wmjvm   1/1     Running   0          47m

ClusterRoleとClusterRoleBindingによる設定例

ClusterRole



apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: sample-clusterrole
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "watch", "list"]

ClusterRoleBinding



apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: sample-clusterrolebinding
subjects:
- kind: Group
  name: manager
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: sample-clusterrole
  apiGroup: rbac.authorization.k8s.io

クラスタ全体において、podsの取得(get)・一覧取得(list)・変更を監視(watch)ができる「sample-clusterrole」というRoleを作成し、「sample-clusterrolebinding」というRoleBindingで、グループ(manager)に対して「sample-clusterrole」をひもづけています。これによって、managerグループに属するユーザーは、クラスタの全Namespaceのpodに対して上記の操作が可能となります。

先ほど同様に、以下で実際に設定を試してみます。

最初、managerグループに所属するaliceというユーザで全Namespaceに対してPodを取得を試みると、権限がないためエラーになります。


kubectl get pods --all-namespaces
Error from server (Forbidden): pods is forbidden: User "alice" cannot list resource "pods" in API group "" at the cluster scope

ここで、ClusterRoleやClusterRoleBindingの作成権限を持つユーザで、先ほどのClusterRoleとClusterRoleBindingを作成します。

ClusterRoleの作成


$ cat <<EOF | kubectl apply -f -

apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: sample-clusterrole rules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "watch", "list"] EOF clusterrole.rbac.authorization.k8s.io/sample-clusterrole created

ClusterRoleBindingの作成 (managerグループとsample-clusterroleをひもづける)


$ cat <<EOF | kubectl apply -f -

apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: sample-clusterrolebinding subjects: - kind: Group name: manager apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: sample-clusterrole apiGroup: rbac.authorization.k8s.io EOF clusterrolebinding.rbac.authorization.k8s.io/sample-clusterrolebinding created