go - 在 kubernetes client-go 中使用 kubectl 上下文
问题描述
如何使用普通上下文来配置 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 存储库中的修订版即可。
推荐阅读
- typescript - 允许额外属性的 StrictUnion
- sql - 使用 sub_date 动态从 hive 表中删除分区
- azure - 在 Azure 培训中使用 Concierge 订阅/沙盒时无法打开 Cloud Shell
- node.js - Survey Monkey API 节点服务器 GET 请求返回未经授权的 401 错误
- react-native - 将 react-native 升级到 59.0 后,使用 Animated.View 的动画无法在 iOS 上运行
- php - 如何在php中过滤键值匹配的数组
- relational-database - 如何继续将关系空间数据库从 PostGIS 上传到 Geoserver?
- xpath - Cucumber 将“场景大纲示例”中的单个 xpath 分解为多个参数
- python - 如何在我的 Jupyter Notebook 中播放本地 .avi 扩展视频?
- sql - 在有子句中使用条件的 SQL 语句中的错误