RBACマニフェストの生成
KubernetesではRBAC(Role-based access control)によりリソースへのアクセス権を制御できます。 カスタムコントローラーにおいても、利用するリソースにのみアクセスできるように適切な権限を設定する必要があります。
controller-genでは、Goのソースコード中に埋め込まれたマーカーを元にRBACのマニフェストを生成できます。
まずはKubebuilderによって生成されたマーカーを見てみましょう。
// +kubebuilder:rbac:groups=view.zoetrope.github.io,resources=markdownviews,verbs=get;list;watch;create;update;patch;delete
// +kubebuilder:rbac:groups=view.zoetrope.github.io,resources=markdownviews/status,verbs=get;update;patch
// +kubebuilder:rbac:groups=view.zoetrope.github.io,resources=markdownviews/finalizers,verbs=update
groups
: 権限を与えたいリソースのAPIグループを指定します。resources
: 権限を与えたいリソースの種類を指定します。verb
: どのような権限を与えるのかを指定します。コントローラーがおこなう操作に応じた権限を指定します。
MarkdownViewリソースと、そのサブリソースであるstatus
とfinalizer
に権限が付与されています。
なお、サブリソースはlistやcreate,delete操作をおこなえないのでget;update;patch
の権限のみが付与されています。
これらに加えてMarkdownViewコントローラーが作成するConfigMap, Deployment, Service, Eventリソースを操作する権限のマーカーを追加しましょう。
// +kubebuilder:rbac:groups=view.zoetrope.github.io,resources=markdownviews,verbs=get;list;watch;create;update;patch;delete
// +kubebuilder:rbac:groups=view.zoetrope.github.io,resources=markdownviews/status,verbs=get;update;patch
// +kubebuilder:rbac:groups=view.zoetrope.github.io,resources=markdownviews/finalizers,verbs=update
// +kubebuilder:rbac:groups=core,resources=configmaps,verbs=get;list;watch;create;update;patch;delete
// +kubebuilder:rbac:groups=apps,resources=deployments,verbs=get;list;watch;create;update;patch;delete
// +kubebuilder:rbac:groups=core,resources=services,verbs=get;list;watch;create;update;patch;delete
// +kubebuilder:rbac:groups=core,resources=events,verbs=create;update;patch
なお、controller-runtimeの提供するClientは、Getでリソースを取得した場合も裏でListやWatchを呼び出しています。 そのためgetしかしない場合でも、get, list, watchを許可しておきましょう。
make manifests
を実行すると以下のようにconfig/rbac/role.yaml
が更新されます。
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: manager-role
rules:
- apiGroups:
- apps
resources:
- deployments
verbs:
- create
- delete
- get
- list
- patch
- update
- watch
- apiGroups:
- ""
resources:
- configmaps
verbs:
- create
- delete
- get
- list
- patch
- update
- watch
- apiGroups:
- ""
resources:
- events
verbs:
- create
- patch
- update
- apiGroups:
- ""
resources:
- services
verbs:
- create
- delete
- get
- list
- patch
- update
- watch
- apiGroups:
- view.zoetrope.github.io
resources:
- markdownviews
verbs:
- create
- delete
- get
- list
- patch
- update
- watch
- apiGroups:
- view.zoetrope.github.io
resources:
- markdownviews/finalizers
verbs:
- update
- apiGroups:
- view.zoetrope.github.io
resources:
- markdownviews/status
verbs:
- get
- patch
- update