RBACマニフェストの生成

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

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

テナントコントローラに付与したマーカーを見てみましょう。

tenant_controller.go

// +kubebuilder:rbac:groups=multitenancy.example.com,resources=tenants,verbs=get;list;watch;create;update;patch;delete
// +kubebuilder:rbac:groups=multitenancy.example.com,resources=tenants/status,verbs=get;update;patch
// +kubebuilder:rbac:groups=core,resources=namespaces,verbs=get;list;watch;create;update;patch;delete
// +kubebuilder:rbac:groups=rbac.authorization.k8s.io,resources=clusterroles,verbs=get;list;watch;create;update;patch;delete
// +kubebuilder:rbac:groups=rbac.authorization.k8s.io,resources=rolebindings,verbs=get;list;watch;create;update;patch;delete

まずは、Tenantリソースに対してget;list;watch;create;update;patch;deleteの権限を与えます。 statusをサブリソース化した場合は、個別に権限を追加する必要があります。 サブリソースはcreateやdelete操作をおこなえないのでget;update;patchの権限を与えます。 また、テナントコントローラが管理するNamespace, ClusterRole, RoleBindingを操作する権限も追加します。

なお、controller-runtimeの提供するClientは、Getでリソースを取得した場合も裏でListやWatchを呼び出しています。 そのためgetしかしない場合でも、get, list, watchを許可しておきましょう。

make manifestsを実行するとconfig/rbac/role.yamlが更新されます。

results matching ""

    No results matching ""