Как я могу использовать обычный контекст для настройки kubernetes client-go?
package kube
import (
"fmt"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
)
// GetKubeClient creates a Kubernetes config and client for a given kubeconfig context.
func GetKubeClient(context string) (*rest.Config, kubernetes.Interface, error) {
config, err := configForContext(context)
if err != nil {
return nil, nil, err
}
client, err := kubernetes.NewForConfig(config)
if err != nil {
return nil, nil, fmt.Errorf("could not get Kubernetes client: %s", err)
}
return config, client, nil
}
// configForContext creates a Kubernetes REST client configuration for a given kubeconfig context.
func configForContext(context string) (*rest.Config, error) {
config, err := getConfig(context).ClientConfig()
if err != nil {
return nil, fmt.Errorf("could not get Kubernetes config for context %q: %s", context, err)
}
return config, nil
}
// getConfig returns a Kubernetes client config for a given context.
func getConfig(context string) clientcmd.ClientConfig {
rules := clientcmd.NewDefaultClientConfigLoadingRules()
rules.DefaultClientConfig = &clientcmd.DefaultClientConfig
overrides := &clientcmd.ConfigOverrides{ClusterDefaults: clientcmd.ClusterDefaults}
if context != "" {
overrides.CurrentContext = context
}
return clientcmd.NewNonInteractiveDeferredLoadingClientConfig(rules, overrides)
}
Если я попробую этот код (получил его от helm), сервер api настроен неправильно, и клиент хочет подключиться к хосту по умолчанию localhost:8080.

Нашел проблему. Реализация github.com/imdario/mergo изменилась в более новой версии и нарушает фактическое поведение генерации конфигурации клиента. Так что используйте только ревизию 6633656539c1639d9d78127b7d47c622b5d7b6dc, как в официальном репозитории kubernetes cient-go.
Я попытался вызвать это из метода main (): firstConfig, ,: = GetKubeClient ("first") У меня есть файл kubeconfig с контекстом, который вызывается первым. Но я получаю эту ошибку: паника: ошибка времени выполнения: неверный адрес памяти или разыменование указателя на ноль [сигнал SIGSEGV: код нарушения сегментации = 0x1 адрес = 0x0 pc = 0x12a7a9a]