Skip to content
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@

## [Unreleased]

### Changed

- Helm deployed RBAC permissions documented, with unnecessary permissions removed ([#745]).
Comment thread
NickLarsenNZ marked this conversation as resolved.
Outdated

[#745]: https://github.com/stackabletech/hbase-operator/pull/745

## [26.3.0] - 2026-03-16

## [26.3.0-rc1] - 2026-03-16
Expand Down
61 changes: 44 additions & 17 deletions deploy/helm/hbase-operator/templates/roles.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ metadata:
labels:
{{- include "operator.labels" . | nindent 4 }}
rules:
# For automatic cluster domain detection
- apiGroups:
- ""
resources:
Expand All @@ -19,22 +20,43 @@ rules:
- nodes/proxy
verbs:
- get
# Manage core workload resources created per HbaseCluster.
# All resources are applied via Server-Side Apply (create + patch) and tracked for
# orphan cleanup (list + delete). get is needed when reconciliation is paused (the
# operator reads current state instead of applying). Both resource types are watched
# by the controller (.owns(Service), .watches(ConfigMap)) so they also need watch.
# - configmaps: role group configuration and discovery configmap
# - services: role group headless and metrics services
- apiGroups:
- ""
resources:
- pods
- configmaps
- services
- endpoints
- serviceaccounts
verbs:
- create
- delete
- get
- list
- patch
- update
- watch
# Manage ServiceAccounts created per HbaseCluster for workload pods.
# Applied via SSA (create + patch), tracked for orphan cleanup (list + delete).
# get is needed when reconciliation is paused.
# ServiceAccounts are not watched by the controller.
- apiGroups:
- ""
resources:
- serviceaccounts
verbs:
- create
- delete
- get
- list
- patch
# Manage RoleBindings that bind the product ClusterRole to per-cluster ServiceAccounts.
# Applied via SSA (create + patch), tracked for orphan cleanup (list + delete).
# get is needed when reconciliation is paused.
# RoleBindings are not watched by the controller.
- apiGroups:
- rbac.authorization.k8s.io
resources:
Expand All @@ -45,20 +67,24 @@ rules:
- get
- list
- patch
- update
- watch
# Manage StatefulSets created per role group.
# Applied via SSA (create + patch), tracked for orphan cleanup (list + delete),
# watched by the controller via .owns(StatefulSet), and read on pause (get).
- apiGroups:
- apps
resources:
- statefulsets
verbs:
- get
- create
- delete
- get
- list
- patch
- update
- watch
# Manage PodDisruptionBudgets created per role for availability guarantees.
# Applied via SSA (create + patch), tracked for orphan cleanup (list + delete).
# get is needed when reconciliation is paused.
# PodDisruptionBudgets are not watched by the controller.
- apiGroups:
- policy
resources:
Expand All @@ -69,8 +95,6 @@ rules:
- get
- list
- patch
- update
- watch
- apiGroups:
- apiextensions.k8s.io
resources:
Expand All @@ -86,34 +110,34 @@ rules:
- list
- watch
{{- end }}
# For emitting Kubernetes events during reconciliation
- apiGroups:
- events.k8s.io
resources:
- events
verbs:
- create
- patch
- apiGroups:
- listeners.stackable.tech
resources:
- listeners
verbs:
- get
# The primary resource watched by the controller (Controller::new).
# get + list + watch are required for the controller to observe HbaseClusters.
# Status is updated via the separate /status subresource rule below.
- apiGroups:
- {{ include "operator.name" . }}.stackable.tech
resources:
- {{ include "operator.name" . }}clusters
verbs:
- get
- list
- patch
- watch
# For writing the HbaseCluster status subresource (apply_patch_status)
- apiGroups:
- {{ include "operator.name" . }}.stackable.tech
resources:
- {{ include "operator.name" . }}clusters/status
verbs:
- patch
# For binding the product ClusterRole (hbase-clusterrole) to per-cluster ServiceAccounts
# via namespaced RoleBindings created per HbaseCluster
- apiGroups:
- rbac.authorization.k8s.io
resources:
Expand All @@ -130,6 +154,7 @@ metadata:
labels:
{{- include "operator.labels" . | nindent 4 }}
rules:
# HBase pods need to read their own ConfigMap, Secret, and ServiceAccount at runtime.
- apiGroups:
- ""
resources:
Expand All @@ -138,6 +163,7 @@ rules:
- serviceaccounts
verbs:
- get
# For emitting Kubernetes events from within the HBase pods
- apiGroups:
- events.k8s.io
resources:
Expand All @@ -146,6 +172,7 @@ rules:
- create
- patch
{{ if .Capabilities.APIVersions.Has "security.openshift.io/v1" }}
# Required on OpenShift to allow HBase pods to run as non-root
- apiGroups:
- security.openshift.io
resources:
Expand Down
Loading