···6464 value: {{ .Values.config.defaultSyncInterval | quote }}
6565 - name: DEFAULT_SECRET_TYPE
6666 value: {{ .Values.config.defaultSecretType | quote }}
6767+ # Inject service account name using downward API
6868+ - name: SERVICE_ACCOUNT_NAME
6969+ valueFrom:
7070+ fieldRef:
7171+ fieldPath: spec.serviceAccountName
6772 ports:
6873 {{- if .Values.metrics.enabled }}
6974 - name: metrics
+5-11
internal/modes/manager/manager.go
···1717package manager
18181919import (
2020- "context"
2120 "crypto/tls"
2221 "flag"
2322 "os"
2423 "path/filepath"
2525- "time"
26242725 // Import all Kubernetes client auth plugins (e.g. Azure, GCP, OIDC, etc.)
2826 // to ensure that exec-entrypoint and run can make use of them.
···329327 return err
330328 }
331329332332- // Get the service account name that this pod is running under
333333- ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
334334- defer cancel()
335335-336336- serviceAccountName, err := config.GetCurrentServiceAccount(ctx, mgr.GetClient())
337337- if err != nil {
338338- setupLog.Error(err, "unable to get current service account - agent and discovery pods will fail without proper RBAC")
339339- return err
330330+ // Get the service account name from environment variable (injected via downward API)
331331+ serviceAccountName := os.Getenv("SERVICE_ACCOUNT_NAME")
332332+ if serviceAccountName == "" {
333333+ serviceAccountName = "hsm-secrets-operator-controller-manager" // fallback default
340334 }
341341- setupLog.Info("Detected service account", "serviceAccount", serviceAccountName)
335335+ setupLog.Info("Using service account", "serviceAccount", serviceAccountName)
342336343337 // Create agent manager runnable that will create the agent manager after TLS is ready
344338 agentManagerRunnable := NewAgentManagerRunnable(mgr.GetClient(), cfg.agentImage, operatorNamespace, serviceAccountName, setupLog)