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