gpt4 book ai didi

go - 如何从 .kube/config 中设置的当前上下文获取命名空间

转载 作者:IT王子 更新时间:2023-10-29 00:41:08 27 4
gpt4 key购买 nike

我正在尝试在 Go 中以编程方式获取 ~/.kube/config 中当前上下文的命名空间。

到目前为止,我尝试的是这些模块:

    "k8s.io/client-go/tools/clientcmd"
"k8s.io/client-go/kubernetes"



kubeconfig := filepath.Join(
os.Getenv("HOME"), ".kube", "config",
)
config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
if err != nil {
log.Fatal(err)
}

fmt.Printf("Namespace: %s\n", config.Namespace())
clientset, err := kubernetes.NewForConfig(config)
if err != nil {
log.Fatal(err)
}

但仍然不知道 clientset 是否可以提供我正在寻找的命名空间。从这个线程: How to get current namespace of an in-cluster go Kubernetes client

它说了一些要做的事情:kubeconfig.Namespace()

最佳答案

我找到了使用 NewDefaultClientConfigLoadingRules 然后加载规则的解决方案。如果您的配置可以使用默认客户端配置加载规则加载,则此方法有效。

例子:

package main

import (
"github.com/davecgh/go-spew/spew"
"k8s.io/client-go/tools/clientcmd"
)

func main() {
clientCfg, err := clientcmd.NewDefaultClientConfigLoadingRules().Load()
spew.Dump(clientCfg, err)
}

给你一个https://godoc.org/k8s.io/client-go/tools/clientcmd/api#Config其中包含当前上下文,包括其命名空间。

Contexts: (map[string]*api.Context) (len=1) {
(string) (len=17) "xxx.xxxxx.xxx": (*api.Context)(0xc0001b2b40)({
LocationOfOrigin: (string) (len=30) "/path/to/.kube/config",
Cluster: (string) (len=17) "xxx.xxxxx.xxx",
AuthInfo: (string) (len=29) "xxxx@xxxx.com",
Namespace: (string) (len=7) "default",
Extensions: (map[string]runtime.Object) {
}
})
},
CurrentContext: (string) (len=17) "xxx.xxxxx.xxx",

供您引用,ClientConfigLoadingRules 是一个具有不同属性的结构,用于告诉客户端从何处加载配置。默认设置将使用 Precedence 字段中的 KUBECONFIG 环境变量中的路径。

(*clientcmd.ClientConfigLoadingRules)(0xc0000a31d0)({
ExplicitPath: (string) "",
Precedence: ([]string) (len=1 cap=1) {
(string) (len=30) "/path/to/.kube/config"
},
MigrationRules: (map[string]string) (len=1) {
(string) (len=30) "/path/to/.kube/config": (string) (len=35) "/path/to/.kube/.kubeconfig"
},
DoNotResolvePaths: (bool) false,
DefaultClientConfig: (clientcmd.ClientConfig) <nil>
})

关于go - 如何从 .kube/config 中设置的当前上下文获取命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55314152/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com