RBACマニフェストの生成

KubernetesではRBAC(Role-based access control)によりリソースへのアクセス権を制御できます。 カスタムコントローラーにおいても、利用するリソースにのみアクセスできるように適切な権限を設定する必要があります。

controller-genでは、Goのソースコード中に埋め込まれたマーカーを元にRBACのマニフェストを生成できます。

まずはKubebuilderによって生成されたマーカーを見てみましょう。

markdownview_controller.go

//+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リソースと、そのサブリソースであるstatusfinalizerに権限が付与されています。 なお、サブリソースはlistやcreate,delete操作をおこなえないのでget;update;patchの権限のみが付与されています。

これらに加えてMarkdownViewコントローラーが作成するConfigMap, Deployment, Service, Eventリソースを操作する権限のマーカーを追加しましょう。

markdownview_controller.go

//+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が更新されます。

role.yaml

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  creationTimestamp: null
  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

results matching ""

    No results matching ""