gpt4 book ai didi

go - 在 kubernetes client-go 中使用 kubectl context

转载 作者:IT王子 更新时间:2023-10-29 02:09:50 25 4
gpt4 key购买 nike

如何使用普通上下文来配置 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 存储库中一样。

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

关于go - 在 kubernetes client-go 中使用 kubectl context,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50435564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com