Go 谷歌容器集群配置
我正在尝试与cloud.google.com/go/container一起使用。我使用GoogleCloudGo容器包创建集群,然后我想使用go客户端在集群上部署。go客户端提供的证书使用kube配置文件获取集群的凭据。但是由于我只是在我的应用程序中创建了这个集群,所以我没有那个配置文件 如何使用“google.golang.org/genproto/googleapis/container/v1”集群设置“k8s.io/client go/rest”配置?哪些是必填字段?下面的代码是我目前拥有的代码(没有显示实际的CA证书) 它导致以下错误:x509:由未知授权机构签署的证书。所以很明显,我们缺少了一些东西。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”配置?哪些是必填字段?下面的代码是我目前拥有
任何其他方法都是非常受欢迎的!提前感谢我在这里回答了一个非常类似的问题: 简而言之,建议的方法是:
GOOGLE\u应用程序\u凭据设置为该key.json
gcloud container clusters description
(或从gcloud get credentials
获取.kube/config
文件)中查找群集的IP地址和CA证书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
}
}