第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何直接從 Go 中的 GCP 服務(wù)帳戶 JSON 密鑰文件創(chuàng)建

如何直接從 Go 中的 GCP 服務(wù)帳戶 JSON 密鑰文件創(chuàng)建

Go
哈士奇WWW 2022-11-28 17:03:18
我正在尋找一種kubernetes.Clientset從服務(wù)帳戶 JSON 密鑰文件開始在 Go 中為 GKE 初始化的方法。我找到了一些線索,比如這個博客和這個相關(guān)的要點(diǎn),但是那里概述的方法似乎需要列出 GCP 項(xiàng)目中的所有集群以創(chuàng)建 kubeconfig 的內(nèi)存中表示,這并不理想。
查看完整描述

1 回答

?
狐的傳說

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超3個贊

使用來自https://github.com/rancher/kontainer-engine的GKE 驅(qū)動程序代碼作為靈感,我想出了以下方法(避免了對 的依賴):k8s.io/client-go/tools/clientcmd

package main


import (

    "context"

    "encoding/base64"

    "fmt"

    "io/ioutil"

    "log"

    "net/http"

    "strings"


    "golang.org/x/oauth2"

    "golang.org/x/oauth2/google"

    "google.golang.org/api/container/v1"

    "google.golang.org/api/option"

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

    "k8s.io/client-go/kubernetes"

    "k8s.io/client-go/rest"

)


func getGKEClientset(cluster *container.Cluster, ts oauth2.TokenSource) (kubernetes.Interface, error) {

    capem, err := base64.StdEncoding.DecodeString(cluster.MasterAuth.ClusterCaCertificate)

    if err != nil {

        return nil, fmt.Errorf("failed to decode cluster CA cert: %s", err)

    }


    config := &rest.Config{

        Host: cluster.Endpoint,

        TLSClientConfig: rest.TLSClientConfig{

            CAData: capem,

        },

    }

    config.Wrap(func(rt http.RoundTripper) http.RoundTripper {

        return &oauth2.Transport{

            Source: ts,

            Base:   rt,

        }

    })


    clientset, err := kubernetes.NewForConfig(config)

    if err != nil {

        return nil, fmt.Errorf("failed to initialise clientset from config: %s", err)

    }


    return clientset, nil

}


func main() {

    gcpServiceAccountKeyFile := "gcp_service_account_key.json"

    gkeLocation := "<GKE Project Location>" // i.e. us-east1

    gkeClusterName := "<GKE Cluster Name>"

    gkeNamespace :=  "<GKE Cluster Namespace>"


    data, err := ioutil.ReadFile(gcpServiceAccountKeyFile)

    if err != nil {

        log.Fatalf("Failed to read GCP service account key file: %s", err)

    }


    ctx := context.Background()


    creds, err := google.CredentialsFromJSON(ctx, data, container.CloudPlatformScope)

    if err != nil {

        log.Fatalf("Failed to load GCP service account credentials: %s", err)

    }


    gkeService, err := container.NewService(ctx, option.WithHTTPClient(oauth2.NewClient(ctx, creds.TokenSource)))

    if err != nil {

        log.Fatalf("Failed to initialise Kubernetes Engine service: %s", err)

    }


    name := fmt.Sprintf("projects/%s/locations/%s/clusters/%s", creds.ProjectID, gkeLocation, gkeClusterName)

    cluster, err := container.NewProjectsLocationsClustersService(gkeService).Get(name).Do()

    if err != nil {

        log.Fatalf("Failed to load GKE cluster %q: %s", name, err)

    }


    clientset, err := getGKEClientset(cluster, creds.TokenSource)

    if err != nil {

        log.Fatalf("Failed to initialise Kubernetes clientset: %s", err)

    }


    pods, err := clientset.CoreV1().Pods(gkeNamespace).List(ctx, v1.ListOptions{})

    if err != nil {

        log.Fatalf("Failed to list pods: %s", err)

    }

    log.Printf("There are %d pods in the namespace", len(pods.Items))

}




查看完整回答
反對 回復(fù) 2022-11-28
  • 1 回答
  • 0 關(guān)注
  • 185 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號