【问题标题】:How to use kubernetes go-client on amazon eks service?如何在亚马逊 eks 服务上使用 kubernetes go-client?
【发布时间】:2021-10-28 22:09:15
【问题描述】:

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

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)
}

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

【问题讨论】:

    标签: go kubernetes amazon-eks client-go


    【解决方案1】:

    你看过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())
        }
    

    【讨论】:

    • 集群内部分是否意味着控制器应用程序必须托管在我尝试连接的集群内?我不能从外部控制器连接吗?
    • 您可以在此处查看集群外身份验证:github.com/kubernetes/client-go/blob/master/examples/…
    • 对,发帖后就看到了^^'谢谢你的时间伙伴
    • 实际上我仍然得到 403 未经授权的错误。知道我没有在任何地方输入我的访问密钥,而且 ~/.kube/config 也不包含它们,这是非常合乎逻辑的。你知道我可以在哪里设置它们吗?
    • @rrrrr 您需要先生成访问密钥并配置您的 aws cli,然后您需要运行以下命令来生成 ~/.kube/config aws eks --region update -kubeconfig --name 你可以参考这个链接了解更多信息docs.aws.amazon.com/eks/latest/userguide/create-kubeconfig.html
    【解决方案2】:

    我使用以下代码自动检测它从本地机器或任何 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)
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-29
      • 1970-01-01
      • 2016-01-06
      • 2015-02-21
      • 1970-01-01
      • 2021-06-11
      • 2014-05-08
      相关资源
      最近更新 更多