Skip to content

Remove unnecessary pods RBAC permissions - #2003

Open
stuggi wants to merge 1 commit into
openstack-k8s-operators:mainfrom
stuggi:rbac-cleanup-pods
Open

Remove unnecessary pods RBAC permissions#2003
stuggi wants to merge 1 commit into
openstack-k8s-operators:mainfrom
stuggi:rbac-cleanup-pods

Conversation

@stuggi

@stuggi stuggi commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

OpenStackClient's workload rbacRules granted full CRUD on core Pods to the ServiceAccount mounted into the OpenStackClient pod itself. That pod's entrypoint is a bare sleep infinity - any capability comes from what an admin runs interactively via exec, not from Kubernetes API access, so this grant is unnecessary and is removed entirely. The operator's own kubebuilder marker for pods on this same controller is untouched: it's independently justified by OpenStackClientReconciler directly creating/patching/deleting and watching (Owns(&corev1.Pod{})) that pod.

Also narrow two dataplane controllers to their real usage:

  • OpenStackDataPlaneNodeSetReconciler only lists Pods (raw clientset, diagnostic listing of failed-deployment pods). Narrow its marker from full CRUD to list.
  • OpenStackDataPlaneDeploymentReconciler had no pods marker of its own at all, despite GetAnsibleExecutionSummary listing Pods via the cached client (needs list;watch for the informer) to build the ansible execution summary. It only worked by relying on the nodeset controller's now-narrowed marker via the ClusterRole merge - add its own list;watch marker so a future change to the nodeset controller can't silently break it.

config/rbac/role.yaml is unchanged: OpenStackClient's own marker already grants full CRUD on pods for a real, direct need, so the merged ClusterRole doesn't shrink. The change is scoped to what gets delegated to workload ServiceAccounts and to per-controller marker correctness.

OpenStackClient's workload rbacRules granted full CRUD on core Pods to the
ServiceAccount mounted into the OpenStackClient pod itself. That pod's
entrypoint is a bare `sleep infinity` - any capability comes from what an
admin runs interactively via exec, not from Kubernetes API access, so this
grant is unnecessary and is removed entirely. The operator's own
kubebuilder marker for pods on this same controller is untouched: it's
independently justified by OpenStackClientReconciler directly
creating/patching/deleting and watching (Owns(&corev1.Pod{})) that pod.

Also narrow two dataplane controllers to their real usage:
- OpenStackDataPlaneNodeSetReconciler only lists Pods (raw clientset,
  diagnostic listing of failed-deployment pods). Narrow its marker from
  full CRUD to list.
- OpenStackDataPlaneDeploymentReconciler had no pods marker of its own at
  all, despite GetAnsibleExecutionSummary listing Pods via the cached
  client (needs list;watch for the informer) to build the ansible
  execution summary. It only worked by relying on the nodeset
  controller's now-narrowed marker via the ClusterRole merge - add its own
  list;watch marker so a future change to the nodeset controller can't
  silently break it.

config/rbac/role.yaml is unchanged: OpenStackClient's own marker already
grants full CRUD on pods for a real, direct need, so the merged ClusterRole
doesn't shrink. The change is scoped to what gets delegated to workload
ServiceAccounts and to per-controller marker correctness.

Signed-off-by: Martin Schuppert <mschuppert@redhat.com>
@openshift-ci

openshift-ci Bot commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: stuggi

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@openshift-ci
openshift-ci Bot requested review from abays and rebtoor July 28, 2026 16:01
@github-actions

Copy link
Copy Markdown

OpenStackControlPlane CRD Size Report

Metric Value
CRD JSON size 364822 bytes (356KB)
Base branch size 364822 bytes
Change +0.00%
Status yellow — growing
Threshold reference
Color Range Meaning
🟢 green < 300KB Comfortable
🟡 yellow 300–400KB Growing
🟠 orange 400–750KB Concerning
🔴 red > 750KB Approaching 1.5MB etcd limit (cut in half to allow space for update)

@openshift-ci

openshift-ci Bot commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

@stuggi: The following test failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name Commit Details Required Rerun command
ci/prow/functional 2a8f906 link true /test functional

Full PR test history. Your PR dashboard.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.

@centosinfra-prod-github-app

Copy link
Copy Markdown

Build failed (check pipeline). Post recheck (without leading slash)
to rerun all jobs. Make sure the failure cause has been resolved before
you rerun jobs.

https://gateway-cloud-softwarefactory.apps.ocp.cloud.ci.centos.org/zuul/t/rdoproject.org/buildset/9a3a3d3455ec43ac9d6b9a376ea061cd

✔️ openstack-k8s-operators-content-provider SUCCESS in 2h 13m 10s
✔️ podified-multinode-edpm-deployment-crc SUCCESS in 1h 31m 12s
✔️ cifmw-crc-podified-edpm-baremetal SUCCESS in 1h 51m 56s
✔️ openstack-operator-tempest-multinode SUCCESS in 1h 57m 40s
openstack-operator-edpm-baremetal-minor-update FAILURE in 1h 13m 56s

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant