使用Kubernetes客户端go获取集群API url
我正在使用client go for Kubernetes并尝试获取当前集群的API url,即类似于使用Kubernetes客户端go获取集群API url,kubernetes,client-go,Kubernetes,Client Go,我正在使用client go for Kubernetes并尝试获取当前集群的API url,即类似于kubectl集群信息的输出。 I一个名为getCluster的函数: func (config *DirectClientConfig) ClientConfig() (*restclient.Config, error) { // check that getAuthInfo, getContext, and getCluster do not return an error.
kubectl集群信息的输出。
I一个名为getCluster
的函数:
func (config *DirectClientConfig) ClientConfig() (*restclient.Config, error) {
// check that getAuthInfo, getContext, and getCluster do not return an error.
// Do this before checking if the current config is usable in the event that an
// AuthInfo, Context, or Cluster config with user-defined names are not found.
// This provides a user with the immediate cause for error if one is found
configAuthInfo, err := config.getAuthInfo()
if err != nil {
return nil, err
}
_, err = config.getContext()
if err != nil {
return nil, err
}
configClusterInfo, err := config.getCluster()
if err != nil {
return nil, err
}
...
}
当我在代码中编写以下内容时
config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
clusterInfo, err := config.getCluster()
我发现错误config.getCluster未定义(type*rest.config没有字段或方法getCluster)
如何使用此功能?是否有其他方法获取此url的链接?从您提供的链接中,您似乎需要使用clusterInfo,err:=config.getCluster()
而不是configAuthInfo.getCluster()
如果运行kubectl cluster info-v8
,可以看到以下内容:
第一行基本上取自~/.kube/config
文件,kubectl
刚刚检查了它是否有效,使用简单的GET
请求,搜索集群中肯定存在的内容:
I0222 11:21:18.015482 18150 round_trippers.go:416] GET https://10.156.0.3:6443/api/v1/namespaces/kube-system/services?labelSelector=kubernetes.io%2Fcluster-service%3Dtrue
通过启动kubectl proxy
,然后在其他控制台中执行以下操作,可以获得此命令的结果:
curl http://127.0.0.1:8001/api/v1/namespaces/kube-system/services?labelSelector=kubernetes.io%2Fcluster-service%3Dtrue
正如您在响应中所看到的,那里没有带有主URL的行
因此,要获得在kubectl cluster info
输出的第一行中指定的值,您只需要读取Kubernetes配置文件的正确部分,因为您可以在那里找到它
要读取和反序列化Kubernetes配置文件,在中有一个函数:
//LoadFromFile获取文件名并将内容反序列化到Config对象中
func LoadFromFile(文件名字符串)(*clientcmdapi.Config,错误)
或中的另一个函数:
//getConfigFromFile尝试读取kubeconfig文件,如果无法读取,则返回错误。一个例外情况是,缺少文件会导致空配置,而不是错误。
func getConfigFromFile(文件名字符串)(*clientcmdapi.Config,错误)
True,但无论如何它都不会工作,restclient.Config
没有方法getCluster()
。看起来您需要群集ID是什么意思kubectl cluster info
没有为我显示任何ID。@savsr当我运行它时,输出包括服务器地址:Kubernetes master正在运行https://api.cluster_id.[…]
。可能这取决于云提供商或其他什么。对不起,我没想到
curl http://127.0.0.1:8001/api/v1/namespaces/kube-system/services?labelSelector=kubernetes.io%2Fcluster-service%3Dtrue