【问题标题】:How to connect to Kubernetes Cluster using ServiceAccount Token?如何使用 ServiceAccount Token 连接到 Kubernetes 集群?
【发布时间】:2021-03-21 22:50:41
【问题描述】:

对于任何示例,client-go 使用 kubeconfig 文件连接到 kubernetes 集群,但我不想这样做。我已经创建了一个服务账户,现在我有了一个ServiceAccount Token,如何在kubernetes集群外用这个token连接到kubernetes集群?

package main

import (
    "flag"
    "k8s.io/client-go/tools/clientcmd"
    "log"
    "k8s.io/client-go/kubernetes"
    metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    "fmt"
)

var clientset *kubernetes.Clientset

func main()  {
    k8sconfig := flag.String("k8sconfig","./k8sconfig","kubernetes config file path")
    flag.Parse()
    config , err := clientcmd.BuildConfigFromFlags("",*k8sconfig)
    if err != nil {
        log.Println(err)
    }
    clientset , err = kubernetes.NewForConfig(config)
    if err != nil {
        log.Fatalln(err)
    } else {
        fmt.Println("connect k8s success")
    }


    pods,err := clientset.CoreV1().Pods("").List(metav1.ListOptions{})
    if err != nil {
        log.Println(err.Error())
    }
}

【问题讨论】:

    标签: go kubernetes client-go


    【解决方案1】:

    client-go 已经内置了 In Cluster Authentication(用于带有 ServiceAccount 的 Pod)和 Out of Cluster Authentication(用于从集群外部使用,例如用于本地开发)

    client-go 有两个例子:

    集群内示例很短:

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

    你需要导入"k8s.io/client-go/rest"

    【讨论】:

    • 我想连接到kubernetes之外的kubernetes集群
    • 然后您需要导出用于访问 API Server 的令牌和私有 SSL 证书 - 不建议这样做。但是用于集群外身份验证的 kubeconfig 或多或少会为您做到这一点。
    猜你喜欢
    • 2021-12-16
    • 2018-09-14
    • 1970-01-01
    • 2017-11-08
    • 2020-06-24
    • 2019-06-10
    • 1970-01-01
    • 1970-01-01
    • 2019-07-31
    相关资源
    最近更新 更多