如何在亚马逊 eks 服务上使用 kubernetes go-client?

How to use kubernetes go-client on amazon eks service?

找了很久的文档,还是没有找到明确的连接步骤。 我想出了这个代码示例:

package aws

import (
    "fmt"
    "net/http"

    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/service/eks"
    "github.com/joho/godotenv"
)
func Connect() {
    godotenv.Load(".env")
    session := session.Must(session.NewSession())
    svc := eks.New(session)
    clusters, err := svc.ListClusters(&eks.ListClustersInput{})
    if err != nil {
        fmt.Println(err.Error())
    }
    fmt.Println(clusters)
}

我的意思是,由于环境变量混乱,这仍然是 returns 403 禁止错误,但我猜代码是有效的。我的问题是,建立此连接:如何将此 svc 变量转换为来自 go 驱动程序的 *kubernetes.Clientset 变量?

您是否看过client-go example关于如何在集群内进行身份验证的内容?

向 Kubernetes API 进行身份验证的代码通常这样开始:

    // creates the in-cluster config
    config, err := rest.InClusterConfig()
    if err != nil {
        panic(err.Error())
    }
    // creates the clientset
    clientset, err := kubernetes.NewForConfig(config)
    if err != nil {
        panic(err.Error())
    }

我使用以下代码从本地计算机或任何 kubernetes 集群自动检测其 运行 的位置。

var config *rest.Config
    if _, err := os.Stat("/var/run/secrets/kubernetes.io/serviceaccount/token"); err == nil {
        config, err = rest.InClusterConfig()
        if err != nil {
            log.Fatal(err)
        }
    } else if os.IsNotExist(err) {
        config, err = clientcmd.BuildConfigFromFlags("", *kubeConfig)
        if err != nil {
            log.Fatal("No serviceaccount mounted or -kubeconfig flag passed or .kube/config file \n " ,err)
        }
    }
    // Create an rest client not targeting specific API version
    clientSet, err := kubernetes.NewForConfig(config)
    if err != nil {
        log.Fatal(err)
    }