使用Kubernetes客户端go获取集群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.

我正在使用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.
    // 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