登录
首页 >  Golang >  Go问答

Google 容器集群作为配置

来源:stackoverflow

时间:2024-04-17 23:03:36 188浏览 收藏

一分耕耘,一分收获!既然都打开这篇《Google 容器集群作为配置》,就坚持看下去,学下去吧!本文主要会给大家讲到等等知识点,如果大家对本文有好的建议或者看到有不足之处,非常欢迎大家积极提出!在后续文章我会继续更新Golang相关的内容,希望对大家都有所帮助!

问题内容

我正在尝试将 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:由未知颁发机构签名的证书。所以显然缺少了一些东西。 任何其他方法都非常受欢迎!提前致谢


解决方案


clientcertificate、clientkey 和 clustercacertificate 需要按照 here 的描述进行解码

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
    }
}

我在这里回答了一个非常类似的问题:Access Kubernetes GKE cluster outside of GKE cluster with client-go?

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

  1. 创建 google cloud iam 服务帐号 + 下载其 json 密钥
  2. google_application_credentials 环境变量设置为该 key.json
  3. 将这些值传递给 client-go 并使用环境变量运行您的程序。

以上就是《Google 容器集群作为配置》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>