谷歌容器集群作为配置

标签 go kubernetes google-cloud-platform google-kubernetes-engine kubernetes-go-client

我正在尝试使用 kubernetes go-client使用 cloud.google.com/go/container。我使用 google cloud go 容器包创建集群,然后我想使用 go-client 在该集群上部署。 out of cluster example 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
    }
}

关于谷歌容器集群作为配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52279187/

相关文章:

google-cloud-platform - Cloud Build 在阻塞在 Queued 的工作池中构建

ubuntu - 无法使用 GCP VM 上的启动脚本启动 python 应用程序

go - 尝试将结构映射到我公开的 API 结构

ssl - 在 Go 中使用 SSL 终止和 HTTP/2 的 HAProxy

kubernetes - 检查模板中使用的文件/目录/是否存在

kubernetes - Windows 上的 minikube 启动失败并出现错误 - 获取互斥体超时

google-app-engine - Go 上服务器的 CORS header 问题

json - 是否有可能在 gin-gonic 绑定(bind)的 json 中消失一个范围?

go - golang 消费者端超时 rabbitmq

azure - 如何在 Azure VMSS 中定义内存自动缩放规则