无法从阿里巴巴集群中获取命名空间、节点和 Pod 数据

Posted

技术标签:

【中文标题】无法从阿里巴巴集群中获取命名空间、节点和 Pod 数据【英文标题】:Not able to fetch namespace, nodes & pods data from Alibaba cluster 【发布时间】:2022-01-08 22:41:45 【问题描述】:

我在阿里巴巴上创建了一个集群。

我需要在 Golang 项目中获取集群数据。

从 API 得到以下错误:


  "Code": 403,
  "Message": "namespaces is forbidden: User \"281247226166595041\" cannot list resource \"namespaces\" in API group \"\" at the cluster scope"

尝试通过 kubectl 访问它:

$ kubectl get namespace
Error from server (Forbidden): namespaces is forbidden: User "225396037912844073" cannot list resource "namespaces" in API group "" at the cluster scope

无法获取其他用户创建的集群的数据。

请帮我解决这个问题。

【问题讨论】:

【参考方案1】:

这是身份验证问题

您的用户无权列出该命名空间。

您需要更新 RBAC 或用户访问权限,或者您正在将 Go 客户端身份验证到 Kubernetes。

如果您使用服务帐户授予访问权限,请检查 RBAC。

授予服务帐号cluster-admin访问权限

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: <new-account-name>
  namespace: <namespace>

---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: go-rbac
subjects:
  - kind: ServiceAccount
    name: default
    namespace: default
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io

kubectl apply -f .yaml

如果您在集群外运行,请确保您的脚本指向正确的 kubeconfig

package main

import (
  "fmt"

  "k8s.io/client-go/1.5/kubernetes"
  "k8s.io/client-go/1.5/pkg/api/v1"
  "k8s.io/client-go/1.5/tools/clientcmd"
)

func main()  
    config, err := clientcmd.BuildConfigFromFlags("", <kube-config-path>)
    if err != nil 
      return nil, err
    

    c, err := kubernetes.NewForConfig(config)
    if err != nil 
      return nil, err
    

在卡斯特内部运行

package main

import (
    "context"
    "fmt"
    "time"

    "k8s.io/apimachinery/pkg/api/errors"
    metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    "k8s.io/client-go/kubernetes"
    "k8s.io/client-go/rest"
    //
    // Uncomment to load all auth plugins
    // _ "k8s.io/client-go/plugin/pkg/client/auth"
    //
    // Or uncomment to load specific auth plugins
    // _ "k8s.io/client-go/plugin/pkg/client/auth/azure"
    // _ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
    // _ "k8s.io/client-go/plugin/pkg/client/auth/oidc"
    // _ "k8s.io/client-go/plugin/pkg/client/auth/openstack"
)

func main() 
    // 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())
    

例如:https://github.com/kubernetes/client-go/blob/master/examples/in-cluster-client-configuration/main.go

【讨论】:

阿里集群的服务账号如何获取,能帮我一下吗? 你是如何运行代码的?在 K8s 上的容器内还是在 K8s 集群外? @PranitaT 你还在面对问题吗?如果它对你有用,你能更新一下状态吗?

以上是关于无法从阿里巴巴集群中获取命名空间、节点和 Pod 数据的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 opa 网守在 kubernetes 上的特定命名空间 (prod) 中拒绝具有最新标签的 pod

如何在一个 Kubernetes 集群中的命名空间之间隔离 Keycloak Infinispan,以防止 KC pod 相互发现和同步

致命 ha.BootstrapStandby:无法从活动 NN 获取命名空间信息

kubernetes pod重新调度,部署到不同的命名空间后会在不同的节点上运行。

K8S 中 kubectl 详解

K8S 中 kubectl 详解