@@ -46,6 +46,10 @@ const (
4646 featureServer = "ENABLE_SERVER"
4747 featureRegistry = "ENABLE_REGISTRY"
4848 featureVMCP = "ENABLE_VMCP"
49+ // disableWorkloadRBAC disables per-workload RBAC management (ServiceAccount, Role, RoleBinding).
50+ // When enabled, the operator will not create RBAC resources for workloads,
51+ // allowing them to be managed externally (e.g., via per-workload Helm charts).
52+ disableWorkloadRBAC = "DISABLE_WORKLOAD_RBAC"
4953)
5054
5155// controllerDependencies maps each controller group to its required dependencies
@@ -131,6 +135,11 @@ func setupControllersAndWebhooks(mgr ctrl.Manager) error {
131135 enableServer := isFeatureEnabled (featureServer , true )
132136 enableRegistry := isFeatureEnabled (featureRegistry , true )
133137 enableVMCP := isFeatureEnabled (featureVMCP , true )
138+ workloadRBACDisabled := isFeatureEnabled (disableWorkloadRBAC , false )
139+
140+ if workloadRBACDisabled {
141+ setupLog .Info ("DISABLE_WORKLOAD_RBAC is enabled, operator will not create per-workload RBAC resources" )
142+ }
134143
135144 // Track enabled features for dependency checking
136145 enabledFeatures := map [string ]bool {
@@ -159,7 +168,7 @@ func setupControllersAndWebhooks(mgr ctrl.Manager) error {
159168
160169 // Set up server-related controllers
161170 if enabledFeatures [featureServer ] {
162- if err := setupServerControllers (mgr , enableRegistry ); err != nil {
171+ if err := setupServerControllers (mgr , enableRegistry , workloadRBACDisabled ); err != nil {
163172 return err
164173 }
165174 } else {
@@ -168,7 +177,7 @@ func setupControllersAndWebhooks(mgr ctrl.Manager) error {
168177
169178 // Set up registry controller
170179 if enabledFeatures [featureRegistry ] {
171- if err := setupRegistryController (mgr ); err != nil {
180+ if err := setupRegistryController (mgr , workloadRBACDisabled ); err != nil {
172181 return err
173182 }
174183 } else {
@@ -177,7 +186,7 @@ func setupControllersAndWebhooks(mgr ctrl.Manager) error {
177186
178187 // Set up Virtual MCP controllers and webhooks
179188 if enabledFeatures [featureVMCP ] {
180- if err := setupAggregationControllers (mgr ); err != nil {
189+ if err := setupAggregationControllers (mgr , workloadRBACDisabled ); err != nil {
181190 return err
182191 }
183192 } else {
@@ -189,7 +198,7 @@ func setupControllersAndWebhooks(mgr ctrl.Manager) error {
189198}
190199
191200// setupServerControllers sets up server-related controllers (MCPServer, MCPExternalAuthConfig, MCPRemoteProxy, ToolConfig)
192- func setupServerControllers (mgr ctrl.Manager , enableRegistry bool ) error {
201+ func setupServerControllers (mgr ctrl.Manager , enableRegistry , disableWorkloadRBAC bool ) error {
193202 // Set up field indexing for MCPServer.Spec.GroupRef
194203 if err := mgr .GetFieldIndexer ().IndexField (
195204 context .Background (),
@@ -232,11 +241,12 @@ func setupServerControllers(mgr ctrl.Manager, enableRegistry bool) error {
232241
233242 // Set up MCPServer controller
234243 rec := & controllers.MCPServerReconciler {
235- Client : mgr .GetClient (),
236- Scheme : mgr .GetScheme (),
237- Recorder : mgr .GetEventRecorderFor ("mcpserver-controller" ),
238- PlatformDetector : ctrlutil .NewSharedPlatformDetector (),
239- ImageValidation : imageValidation ,
244+ Client : mgr .GetClient (),
245+ Scheme : mgr .GetScheme (),
246+ Recorder : mgr .GetEventRecorderFor ("mcpserver-controller" ),
247+ PlatformDetector : ctrlutil .NewSharedPlatformDetector (),
248+ ImageValidation : imageValidation ,
249+ DisableWorkloadRBAC : disableWorkloadRBAC ,
240250 }
241251 if err := rec .SetupWithManager (mgr ); err != nil {
242252 return fmt .Errorf ("unable to create controller MCPServer: %w" , err )
@@ -260,10 +270,11 @@ func setupServerControllers(mgr ctrl.Manager, enableRegistry bool) error {
260270
261271 // Set up MCPRemoteProxy controller
262272 if err := (& controllers.MCPRemoteProxyReconciler {
263- Client : mgr .GetClient (),
264- Scheme : mgr .GetScheme (),
265- Recorder : mgr .GetEventRecorderFor ("mcpremoteproxy-controller" ),
266- PlatformDetector : ctrlutil .NewSharedPlatformDetector (),
273+ Client : mgr .GetClient (),
274+ Scheme : mgr .GetScheme (),
275+ Recorder : mgr .GetEventRecorderFor ("mcpremoteproxy-controller" ),
276+ PlatformDetector : ctrlutil .NewSharedPlatformDetector (),
277+ DisableWorkloadRBAC : disableWorkloadRBAC ,
267278 }).SetupWithManager (mgr ); err != nil {
268279 return fmt .Errorf ("unable to create controller MCPRemoteProxy: %w" , err )
269280 }
@@ -283,8 +294,11 @@ func setupServerControllers(mgr ctrl.Manager, enableRegistry bool) error {
283294}
284295
285296// setupRegistryController sets up the MCPRegistry controller
286- func setupRegistryController (mgr ctrl.Manager ) error {
287- if err := (controllers .NewMCPRegistryReconciler (mgr .GetClient (), mgr .GetScheme ())).SetupWithManager (mgr ); err != nil {
297+ func setupRegistryController (mgr ctrl.Manager , disableWorkloadRBAC bool ) error {
298+ reconciler := controllers .NewMCPRegistryReconciler (
299+ mgr .GetClient (), mgr .GetScheme (), disableWorkloadRBAC ,
300+ )
301+ if err := reconciler .SetupWithManager (mgr ); err != nil {
288302 return fmt .Errorf ("unable to create controller MCPRegistry: %w" , err )
289303 }
290304 return nil
@@ -294,7 +308,7 @@ func setupRegistryController(mgr ctrl.Manager) error {
294308// (MCPGroup, VirtualMCPServer, and their webhooks)
295309// Note: This function assumes server controllers are enabled (enforced by dependency check)
296310// The field index for MCPServer.Spec.GroupRef is created in setupServerControllers
297- func setupAggregationControllers (mgr ctrl.Manager ) error {
311+ func setupAggregationControllers (mgr ctrl.Manager , disableWorkloadRBAC bool ) error {
298312 // Set up MCPGroup controller
299313 if err := (& controllers.MCPGroupReconciler {
300314 Client : mgr .GetClient (),
@@ -304,10 +318,11 @@ func setupAggregationControllers(mgr ctrl.Manager) error {
304318
305319 // Set up VirtualMCPServer controller
306320 if err := (& controllers.VirtualMCPServerReconciler {
307- Client : mgr .GetClient (),
308- Scheme : mgr .GetScheme (),
309- Recorder : mgr .GetEventRecorderFor ("virtualmcpserver-controller" ),
310- PlatformDetector : ctrlutil .NewSharedPlatformDetector (),
321+ Client : mgr .GetClient (),
322+ Scheme : mgr .GetScheme (),
323+ Recorder : mgr .GetEventRecorderFor ("virtualmcpserver-controller" ),
324+ PlatformDetector : ctrlutil .NewSharedPlatformDetector (),
325+ DisableWorkloadRBAC : disableWorkloadRBAC ,
311326 }).SetupWithManager (mgr ); err != nil {
312327 return fmt .Errorf ("unable to create controller VirtualMCPServer: %w" , err )
313328 }
0 commit comments