Go 谷歌容器集群配置

Go 谷歌容器集群配置,go,kubernetes,google-cloud-platform,google-kubernetes-engine,kubernetes-go-client,Go,Kubernetes,Google Cloud Platform,Google Kubernetes Engine,Kubernetes Go Client,我正在尝试与cloud.google.com/go/container一起使用。我使用GoogleCloudGo容器包创建集群,然后我想使用go客户端在集群上部署。go客户端提供的证书使用kube配置文件获取集群的凭据。但是由于我只是在我的应用程序中创建了这个集群,所以我没有那个配置文件 如何使用“google.golang.org/genproto/googleapis/container/v1”集群设置“k8s.io/client go/rest”配置?哪些是必填字段?下面的代码是我目前拥有

我正在尝试与cloud.google.com/go/container一起使用。我使用GoogleCloudGo容器包创建集群,然后我想使用go客户端在集群上部署。go客户端提供的证书使用kube配置文件获取集群的凭据。但是由于我只是在我的应用程序中创建了这个集群,所以我没有那个配置文件

如何使用“google.golang.org/genproto/googleapis/container/v1”集群设置“k8s.io/client go/rest”配置?哪些是必填字段?下面的代码是我目前拥有的代码(没有显示实际的CA证书)

它导致以下错误:x509:由未知授权机构签署的证书。所以很明显,我们缺少了一些东西。
任何其他方法都是非常受欢迎的!提前感谢

我在这里回答了一个非常类似的问题:

简而言之,建议的方法是:

  • 创建Google Cloud IAM服务帐户并下载其json密钥
  • GOOGLE\u应用程序\u凭据设置为该key.json
  • gcloud container clusters description
    (或从
    gcloud get credentials
    获取
    .kube/config
    文件)中查找群集的IP地址和CA证书
  • 将这些值传递给client go,并使用env var运行您的程序

  • ClientCertificate、ClientKey和ClusterCaCertificate需要按照描述进行解码


    感谢您的回复!但是它还没有工作。我将GOOGLE_应用程序_凭据设置为我的服务帐户json文件,该文件包含“Kubernetes Engine Admin”和“Kubernetes Engine Cluster Admin”作为角色。目前我正在使用gcloud
    容器集群描述
    并硬编码
    rest.Config
    用户名、密码、主机和使用
    clustercertificate
    字段来设置
    rest.TLSClientConfig
    中的
    CAData
    。在我的应用程序中,我使用“cloud.google.com/go/container”理想情况下,我不想执行gcloud命令。如何从容器包中获取数据?这里有一些在Python中使用GKE API的示例:.GKE有以GCP客户端库支持的所有语言发布的客户端库。您可以使用它们。只需使用
    -log http
    查看
    gcloud
    命令即可ee请求。这在我的应用程序中获得了数据。谢谢。但是,我仍然无法使用带有CA数据、用户名、密码和端点的go客户端连接到群集。是否有防火墙之类的东西阻止了它?我在中也发现了您的问题。我看到您正在使用BeareToken。我也必须使用吗这是给gke的?我从哪里得到的?不,不要使用承载令牌。通过设置
    GOOGLE\u APPLICATION\u凭证
    env变量和
    import\u8s.io/client go/plugin/pkg/client/auth/gcp“
    package使用服务帐户密钥。请参阅
    client go
    examples/directory。
    func getConfig(cluster *containerproto.Cluster) *rest.Config {
        return &rest.Config{
            Host:     "https://" + cluster.GetEndpoint(),
            TLSClientConfig: rest.TLSClientConfig{
                Insecure: false,
                CAData: []byte(`-----BEGIN CERTIFICATE-----
                    ...
                    -----END CERTIFICATE-----`),
            },
        }
    
    func CreateK8sClientFromCluster(cluster *gkev1.Cluster) {
        decodedClientCertificate, err := base64.StdEncoding.DecodeString(cluster.MasterAuth.ClientCertificate)
        if err != nil {
            fmt.Println("decode client certificate error:", err)
            return
        }
        decodedClientKey, err := base64.StdEncoding.DecodeString(cluster.MasterAuth.ClientKey)
        if err != nil {
            fmt.Println("decode client key error:", err)
            return
        }
        decodedClusterCaCertificate, err := base64.StdEncoding.DecodeString(cluster.MasterAuth.ClusterCaCertificate)
        if err != nil {
            fmt.Println("decode cluster CA certificate error:", err)
            return
        }
    
        config := &rest.Config{
            Username: cluster.MasterAuth.Username,
            Password: cluster.MasterAuth.Password,
            Host:     "https://" + cluster.Endpoint,
            TLSClientConfig: rest.TLSClientConfig{
                Insecure: false,
                CertData: decodedClientCertificate,
                KeyData:  decodedClientKey,
                CAData:   decodedClusterCaCertificate,
            },
        }
    
        clientset, err := kubernetes.NewForConfig(config)
        if err != nil {
            fmt.Printf("failed to get k8s client set from config: %s\n", err)
            return
        }
    }