diff --git a/cmd/controller/run.go b/cmd/controller/run.go index 0e184573..2bd4aed9 100644 --- a/cmd/controller/run.go +++ b/cmd/controller/run.go @@ -12,6 +12,7 @@ import ( "github.com/bombsimon/logrusr/v4" "github.com/google/uuid" "github.com/sirupsen/logrus" + apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apiserver/pkg/server/healthz" "k8s.io/client-go/dynamic" @@ -206,6 +207,8 @@ func runController( log.Fatalf("failed to determine if running on GKE: %v", err) } + log.Infof("Running on GKE is: %v", isGKE) + if isGKE { csrMgr := csr.NewApprovalManager(log, clientset) if err := csrMgr.Start(ctx); err != nil { @@ -321,9 +324,14 @@ func (e *logContextError) Unwrap() error { } func runningOnGKE(clientset *kubernetes.Clientset, cfg config.Config) (isGKE bool, err error) { + // When running locally, there is no node. + if cfg.SelfPod.Node == "" { + return false, nil + } + err = waitext.Retry(context.Background(), waitext.DefaultExponentialBackoff(), 3, func(ctx context.Context) (bool, error) { node, err := clientset.CoreV1().Nodes().Get(ctx, cfg.SelfPod.Node, metav1.GetOptions{}) - if err != nil { + if err != nil && !apierrors.IsNotFound(err) { return true, fmt.Errorf("getting node: %w", err) } diff --git a/internal/config/config.go b/internal/config/config.go index faebbc10..f3c3043c 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -127,7 +127,9 @@ func Get() Config { } if cfg.SelfPod.Namespace == "" { - required("LEADER_ELECTION_NAMESPACE") + // LEADER_ELECTION_NAMESPACE exists for backwards compatibility. + // But we use the namespace even without leader election so it's required. + required("self_pod.namespace or LEADER_ELECTION_NAMESPACE") } if cfg.LeaderElection.Enabled {