Runners with custom ConfigMap & SCC fail chown after Operator v1.37.0 upgrade on OpenShift 4.16.27
**Description:** **Environment:** * OpenShift 4.16.27 cluster * GitLab Runner Operator v1.37.0 (upgraded on May 16, 2025) * Runner custom service account: `gitlab-runner-app-sa-chroot` (based on anyuid scc) **Configuration Before Update to v1.37.0:** 1. Custom ConfigMap & SCC used to add Linux capabilities for integration with Prisma Twistlock to scan built container images: * `CAP_SYS_CHROOT` * `CAP_MKNOD` 2. Custom SCC (based on anyuid) granting allowedCapabilities: * `CAP_SYS_CHROOT` * `CAP_MKNOD` 3. Runners created before May 16, 2025 built concurrent runner pods successfully using the above ConfigMap, SCC, and service account. **What Changed:** * After upgrading the GitLab Runner Operator to v1.37.0, any runner using a custom ConfigMap began failing at startup with: ``` chown: changing ownership of '/builds/.gitlab-build-uid-gid': Operation not permitted ``` **Additional Observation:** * The **Runner Manager** Deployment/Pod is configured to use `serviceAccountName: gitlab-runner-app-sa-chroot` (or `gitlab-runner-app-sa` by default), but its spawned **concurrent runner builder pods** show `serviceAccountName: default` in their spec. * Despite this, the builder pods actually execute under the `gitlab-runner-app-sa-chroot` permissions. * To explicitly bind the correct SA on the builder side, the ConfigMap’s config.toml must include: ``` [runners.kubernetes] service_account = "gitlab-runner-app-sa-chroot" ``` **Impact:** * Only runners that rely on the custom ConfigMap, custom SCC and custom service accounts are affected. * Builds now error out during container startup due to the forbidden chown operation, blocking those specific CI runners. **Temporary Workaround:** Adding the following configs to the custom ConfigMap restores functionality: ``` [runners.kubernetes] cap_add = ["CAP_SYS_CHROOT", "CAP_MKNOD"] service_account_overwrite_allowed = ".*" privileged = false service_account = "gitlab-runner-app-sa-chroot" [runners.kubernetes.build_container_security_context] run_as_user = 0 run_as_group = 0 [runners.kubernetes.helper_container_security_context] run_as_user = 0 run_as_group = 0 ``` **Requested Action:** 1. Investigate why v1.37.0 no longer honors the original `CAP_SYS_CHROOT` and `CAP_MKNOD` settings without run_as_user and group to 0. 2. Propose an alternative workaround that does _not_ require forcing the runner to run as root (UID/GID 0) or binding a specific service account in the TOML. For example: * Use a `PodSecurityContext` with an appropriate `fsGroup` to allow the container process to write owned files without needing extra capabilities * Introduce an init container that performs any necessary `chown` operations under elevated permissions before the main build container starts Please let me know if you need additional logs, SCC definitions, or other environment details.
issue