Как получить пространство имен из текущего контекста, установленного в .kube / config - PullRequest
3 голосов
/ 23 марта 2019

Я пытаюсь получить программно в 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)
}

Но все равно не знаю, может ли клиентский набор дать мне пространство имен, которое я ищу. Из этой темы: Как получить текущее пространство имен внутри-кластерного клиента Kubernetes

В нем сказано что-то из этого сделать: kubeconfig.Namespace ()

Ответы [ 2 ]

5 голосов
/ 23 марта 2019

Я нашел решение, используя 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>
})
0 голосов
/ 23 марта 2019
import Required:
       "k8s.io/client-go/tools/clientcmd"

loadingRules := clientcmd.NewDefaultClientConfigLoadingRules()
configOverrides := &clientcmd.ConfigOverrides{} kubeConfig :=
clientcmd.NewNonInteractiveDeferredLoadingClientConfig(loadingRules,
configOverrides)

namespace, _, err = kubeConfig.Namespace()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...