为了账号安全,请及时绑定邮箱和手机立即绑定

谷歌容器集群作为配置

谷歌容器集群作为配置

Go
弑天下 2023-04-04 14:23:49
我正在尝试将kubernetes go-client与 cloud.google.com/go/container 一起使用。我使用 google cloud go 容器包创建集群,然后我想使用 go-client 在该集群上部署。go-client 给出的集群外示例使用kube 配置文件获取集群的凭据。但是因为我刚刚在我的应用程序中创建了这个集群,所以我没有那个配置文件。如何使用“google.golang.org/genproto/googleapis/container/v1”集群设置“k8s.io/client-go/rest”配置?必填字段是什么?下面的代码是我目前拥有的(没有显示实际的 CA 证书)。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-----`),        },    }它导致此错误:x509:由未知授权机构签名的证书。因此,显然缺少一些东西。任何其他方法都非常受欢迎!提前致谢
查看完整描述

2 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

ClientCertificate、ClientKey 和 ClusterCaCertificate 需要按照此处所述进行解码

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

    }

}


查看完整回答
反对 回复 2023-04-04
?
白板的微信

TA贡献1883条经验 获得超3个赞

基本上,简而言之,推荐的方法是:

  1. 创建 Google Cloud IAM 服务帐户 + 下载其 json 密钥

  2. GOOGLE_APPLICATION_CREDENTIALSenv var 设置为那个 key.json

  3. 从中查找集群的 IP 地址和 CA 证书gcloud container clusters describe(或者只是.kube/config从中获取文件gcloud get-credentials

  4. 将这些值传递给 client-go 并使用环境变量运行您的程序。


查看完整回答
反对 回复 2023-04-04
  • 2 回答
  • 0 关注
  • 77 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信