kubernetes/go-client 没有从集群配置中恢复数据

No data recover from incluster config with kubernetes/go-client

我用 kubernetes/go-client 做了一个演示,我试图从我的集群中列出 pods。

    config, err := rest.InClusterConfig()

    if err != nil {
        panic(err.Error())
    }

    clientset, err := kubernetes.NewForConfig(config)
    if err != nil {
        panic(err.Error())
    }

    pods, err := clientset.CoreV1().Pods("").List(context.TODO(), metav1.ListOptions{})

    fmt.Fprint(w, "There are d pods in the cluster\n", len(pods.Items))

我创建了 serviceaccount 令牌以分配给此代码所在的 pod 运行。

但是执行代码时pods.Items没有pods.

我在 minikube 中部署了这个 pod。当我启动一些 kubectl 命令列出 pods 时,这样我可以获得资源,所以它不是权限问题。

我想知道发生了什么以及如何解决它。


存储库https://github.com/srpepperoni/inframanager.git

图像被推入:https://hub.docker.com/r/jaimeyh/inframanager

我遇到问题的端点是这个:

mux.HandleFunc("/getPods", GetPodsFromNamespace)

您需要检查最后一行的 err 是否为非零。

pods, err := clientset.CoreV1().Pods("").List(context.TODO(), metav1.ListOptions{})

OK, there is the problem. pods is forbidden: User "system:serviceaccount:mis-pruebas:sa-prueba-go" cannot list resource "pods" in API group "" at the cluster scope

如错误消息所示,ServiceAccount 无权在集群范围内列出 pods。您需要创建 Role 并将其绑定到 ServiceAccount。

有关如何创建此类角色的文章Using RBAC Authorization even has a role example