代码之家  ›  专栏  ›  技术社区  ›  lawful_neutral

使用kubernetes client go获取集群id

  •  0
  • lawful_neutral  · 技术社区  · 6 年前

    我使用client go for kubernetes并尝试获取当前集群的id,即类似于 kubectl cluster-info . 我 found 调用的函数 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 undefined (type *rest.Config has no field or method getCluster)

    如何使用此功能?有没有其他方法来获取集群id?

    0 回复  |  直到 6 年前
        1
  •  0
  •   Kseniia Churiumova    6 年前

    从你提供的链接看来你需要使用 clusterInfo, err := config.getCluster() 而不是 configAuthInfo.getCluster()

        2
  •  0
  •   VAS    6 年前
    $ kubectl cluster-info
    
    1. Kubernetes master is running at https://10.156.0.3:6443
    2. KubeDNS is running at https://10.156.0.3:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
    

    如果你跑 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配置文件的正确部分,因为您可以 several cluster configuration 那里。

    要读取和反序列化kubernetes配置文件,在 loader.go :

    // LoadFromFile takes a filename and deserializes the contents into Config object
    func LoadFromFile(filename string) (*clientcmdapi.Config, error)
    

    或其他功能 config.go :

    // getConfigFromFile tries to read a kubeconfig file and if it can't, returns an error.  One exception, missing files result in empty configs, not an error.
    func getConfigFromFile(filename string) (*clientcmdapi.Config, error) 
    
    推荐文章