Я нашел решение, используя 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 - это структура с различными свойствами, чтобы сообщать клиенту, откуда загрузить конфигурацию.По умолчанию будет использоваться путь в переменной среды KUBECONFIG
в поле Precedence.
(*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>
})