@@ -8,13 +8,16 @@ package main
88import (
99 "context"
1010 "fmt"
11+ "os"
12+
1113 "github.com/nginxinc/kubernetes-nginx-ingress/internal/configuration"
1214 "github.com/nginxinc/kubernetes-nginx-ingress/internal/observation"
1315 "github.com/nginxinc/kubernetes-nginx-ingress/internal/probation"
1416 "github.com/nginxinc/kubernetes-nginx-ingress/internal/synchronization"
1517 "github.com/sirupsen/logrus"
1618 "k8s.io/client-go/kubernetes"
1719 "k8s.io/client-go/rest"
20+ "k8s.io/client-go/tools/clientcmd"
1821 "k8s.io/client-go/util/workqueue"
1922)
2023
@@ -88,18 +91,34 @@ func run() error {
8891 return nil
8992}
9093
94+ // buildKubernetesClient builds a Kubernetes clientset, supporting both in-cluster and out-of-cluster (kubeconfig) configurations.
9195func buildKubernetesClient () (* kubernetes.Clientset , error ) {
92- logrus .Debug ("Watcher::buildKubernetesClient" )
93- k8sConfig , err := rest .InClusterConfig ()
94- if err == rest .ErrNotInCluster {
95- return nil , fmt .Errorf (`not running in a Cluster: %w` , err )
96- } else if err != nil {
97- return nil , fmt .Errorf (`error occurred getting the Cluster config: %w` , err )
96+ var config * rest.Config
97+ var err error
98+
99+ // Try in-cluster config first
100+ config , err = rest .InClusterConfig ()
101+ if err != nil {
102+ if err == rest .ErrNotInCluster {
103+ // Not running in a cluster, fall back to kubeconfig
104+ kubeconfigPath := os .Getenv ("KUBECONFIG" )
105+ if kubeconfigPath == "" {
106+ kubeconfigPath = clientcmd .RecommendedHomeFile // ~/.kube/config
107+ }
108+
109+ config , err = clientcmd .BuildConfigFromFlags ("" , kubeconfigPath )
110+ if err != nil {
111+ return nil , fmt .Errorf ("could not get Kubernetes config: %w" , err )
112+ }
113+ } else {
114+ return nil , fmt .Errorf ("error occurred getting the in-cluster config: %w" , err )
115+ }
98116 }
99117
100- client , err := kubernetes .NewForConfig (k8sConfig )
118+ // Create the clientset
119+ client , err := kubernetes .NewForConfig (config )
101120 if err != nil {
102- return nil , fmt .Errorf (` error occurred creating a client: %w` , err )
121+ return nil , fmt .Errorf (" error occurred creating a Kubernetes client: %w" , err )
103122 }
104123
105124 return client , nil
0 commit comments