在google cloud build上使用群集kubernetes配置和客户端go库时出现的问题

在google cloud build上使用群集kubernetes配置和客户端go库时出现的问题,kubernetes,google-cloud-build,client-go,Kubernetes,Google Cloud Build,Client Go,我在尝试构建我的应用程序时遇到了一些挑战,该应用程序正在使用golang客户端go库。该应用程序所做的是提供和api,然后将pod部署到kubernetes集群。现在,如果我使用$HOME/.kube/config中的集群外kubernetes(即minikube)配置,应用程序能够成功部署pod。请参阅下面的代码,该代码根据配置路径确定要使用的配置 package kubernetesinterface import ( "log" "os" core "k8s.i

我在尝试构建我的应用程序时遇到了一些挑战,该应用程序正在使用golang客户端go库。该应用程序所做的是提供和api,然后将pod部署到kubernetes集群。现在,如果我使用$HOME/.kube/config中的集群外kubernetes(即minikube)配置,应用程序能够成功部署pod。请参阅下面的代码,该代码根据配置路径确定要使用的配置

package kubernetesinterface

import (
    "log"
    "os"

    core "k8s.io/api/core/v1"
    v1 "k8s.io/apimachinery/pkg/apis/meta/v1"

    "k8s.io/client-go/kubernetes"
    _ "k8s.io/client-go/plugin/pkg/client/auth" // load auth packages
    "k8s.io/client-go/rest"
    "k8s.io/client-go/tools/clientcmd"
)

// KubeStruct - struct that uses interface type (useful when testing)
type KubeStruct struct {
    clientset kubernetes.Interface
}

// DeployPod - Method that uses a KubeStruct type to deploy deploy simulator pod to kubernetes cluster
func (kube *KubeStruct) DeployPod() bool {
    var podObject *core.Pod
    podObject = createPodObjects()
    _, err := kube.clientset.Core().Pods(podObject.Namespace).Create(podObject)
    if err != nil {
        log.Println("Failed to create simulator pod: ", err.Error())
        return false
    }

    return true
}

// GetNewClient - function to create a new clientset object to connect to a kubernetes cluster
func GetNewClient() (*KubeStruct, error) {
    var kubeConfig *rest.Config
    var err error
    configPath := os.Getenv("CONFIG_PATH")
    if configPath == "" {
        log.Println("Using in-cluster configuration")
        kubeConfig, err = rest.InClusterConfig()
    } else {
        log.Println("Using out of cluster config")
        kubeConfig, err = clientcmd.BuildConfigFromFlags("", configPath)
    }
    if err != nil {
        log.Println("Error getting configuration ", err.Error())
        return nil, err
    }
    // create clientset for kubernetes cluster
    client := KubeStruct{}
    client.clientset, err = kubernetes.NewForConfig(kubeConfig)
    if err != nil {
        log.Println("Error creating clientset for kubernetes cluster ", err.Error())
        return nil, err
    }

    return &client, nil

}

func createPodObjects() *core.Pod {
    return &core.Pod{
        ObjectMeta: v1.ObjectMeta{
            Name:      "podname",
            Namespace: "default",
            Labels: map[string]string{
                "app": "podname",
            },
        },
        Spec: core.PodSpec{
            Containers: []core.Container{
                {
                    Name:            "podname",
                    Image:           os.Getenv("IMAGE"),
                    ImagePullPolicy: core.PullIfNotPresent,
                    Command: []string{
                        "sleep",
                        "3600",
                    },
                },
            },
        },
    }
}
因此,如果CONFIG_PATH存在一个值,那么应用程序将按预期工作,并在我的minikube集群中部署一个pod。现在,当同一个应用程序在gcp上构建时,我得到以下构建错误

Step #1: 2019/03/13 21:25:20 Error getting configuration unable to load in-cluster configuration, KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT must be defined

我在网上搜索了一个解决方案,但没有成功,所以我想在这里发布。

您好,您能澄清一下您使用的是GKE还是GCE以及您的go版本吗?