【发布时间】:2018-10-30 07:49:44
【问题描述】:
如何使用普通上下文来配置 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。
【问题讨论】:
-
我尝试从 main() 方法调用它: firstConfig,, := GetKubeClient("first") 我有一个名为 first 的上下文的 kubeconfig 文件。但我得到这个错误:恐慌:运行时错误:无效的内存地址或零指针取消引用[信号SIGSEGV:分段违规代码=0x1 addr=0x0 pc=0x12a7a9a]
标签: go kubernetes