首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在kubernetes client-go中使用kubectl上下文

在kubernetes client-go中使用kubectl上下文
EN

Stack Overflow用户
提问于 2018-05-20 21:56:46
回答 2查看 3.7K关注 0票数 7

如何使用普通上下文配置kubernetes client-go?

代码语言:javascript
复制
    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

EN

回答 2

Stack Overflow用户

发布于 2018-05-21 14:27:14

找到了问题所在。github.com/imdario/mergo的实现在较新的版本中进行了更改,打破了生成客户端配置的实际行为。所以只需使用修订的6633656539c1639d9d78127b7d47c622b5d7b6dc,就像在官方kubernetes cient-go存储库中一样。

https://github.com/kubernetes/client-go/issues/415

票数 2
EN

Stack Overflow用户

发布于 2022-01-06 21:04:38

目前,该示例建议执行以下操作:

代码语言:javascript
复制
kconf, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
if err != nil {
    return nil, err
}

但是,这不允许您指定要使用的上下文。如果您查看源代码,就会发现BuildConfigFromFlags是NewNonInteractiveDeferredLoadingClientConfig的一个薄薄的包装器。

如果您使用NewNonInteractiveDeferredLoadingClientConfig,则可以按如下方式指定上下文:

代码语言:javascript
复制
configLoadingRules := &clientcmd.ClientConfigLoadingRules{ExplicitPath: kubeconfig}
configOverrides := &clientcmd.ConfigOverrides{CurrentContext: "dev-cluster"}

kconf, err := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(configLoadingRules, configOverrides).ClientConfig()
if err != nil {
    return nil, err
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50435564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档