package kube import ( "fmt" "os" "path/filepath" "k8s.io/client-go/kubernetes" "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" ) // NewClient builds a Kubernetes clientset. It tries in-cluster config first // (running inside a pod), then falls back to ~/.kube/config for local use. func NewClient() (*kubernetes.Clientset, error) { cfg, err := rest.InClusterConfig() if err != nil { home, _ := os.UserHomeDir() kubeconfig := filepath.Join(home, ".kube", "config") if kc := os.Getenv("KUBECONFIG"); kc != "" { kubeconfig = kc } cfg, err = clientcmd.BuildConfigFromFlags("", kubeconfig) if err != nil { return nil, fmt.Errorf("kube: build config: %w", err) } } client, err := kubernetes.NewForConfig(cfg) if err != nil { return nil, fmt.Errorf("kube: new client: %w", err) } return client, nil }