如何获取集群外Go Kubernetes client-go客户端的当前命名空间
获取kubeconfig当前Context的Namespace
直接使用client-go的clientcmd包解析kubeconfig文件,就能快速提取当前context对应的namespace,以下是实现代码:
import ( "log" "path/filepath" "os" "k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/util/homedir" ) func getCurrentNamespace() string { // 优先读取KUBECONFIG环境变量,否则使用默认路径 kubeconfig := os.Getenv("KUBECONFIG") if kubeconfig == "" { kubeconfig = filepath.Join(homedir.HomeDir(), ".kube", "config") } // 解析kubeconfig内容 config, err := clientcmd.LoadFromFile(kubeconfig) if err != nil { log.Fatalf("加载kubeconfig失败: %v", err) } // 获取当前context名称 currentCtx := config.CurrentContext if currentCtx == "" { log.Fatal("kubeconfig未设置当前context") } // 查找对应的context配置 ctxConfig, exists := config.Contexts[currentCtx] if !exists { log.Fatalf("kubeconfig中未找到当前context: %s", currentCtx) } // 返回namespace,为空时默认使用"default" ns := ctxConfig.Namespace if ns == "" { ns = "default" } return ns }
关键说明
- 代码适配了自定义kubeconfig路径的场景,优先读取
KUBECONFIG环境变量,兼容集群外客户端的常见配置方式 - 自动处理namespace为空的情况,返回Kubernetes默认的
default命名空间
内容的提问来源于stack exchange,提问作者Fabrice Jammes
相关产品推荐
相关产品推荐

