如何从 .kube/config 中设置的当前上下文获取命名空间

2024-01-10

我正在尝试以编程方式在 Go 中获取 ~/.kube/config 中当前上下文的命名空间。

到目前为止,我尝试的是这些模块:

    "k8s.io/client-go/tools/clientcmd"
    "k8s.io/client-go/kubernetes"



kubeconfig := filepath.Join(
     os.Getenv("HOME"), ".kube", "config",
)
config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
if err != nil {
    log.Fatal(err)
}

fmt.Printf("Namespace: %s\n", config.Namespace())
clientset, err := kubernetes.NewForConfig(config)
if err != nil {
    log.Fatal(err)
}

但仍然不知道客户端是否可以给我我正在寻找的名称空间。从这个线程:如何获取集群内go Kubernetes客户端的当前命名空间 https://stackoverflow.com/questions/53283347/how-to-get-current-namespace-of-an-in-cluster-go-kubernetes-client

它说要做一些事情: kubeconfig.命名空间()


我找到了一个解决方案,使用NewDefaultClientConfigLoadingRules然后加载规则。如果您的配置可以使用默认客户端配置加载规则加载,则此方法有效。

Example:

package main

import (
        "github.com/davecgh/go-spew/spew"
        "k8s.io/client-go/tools/clientcmd"
)

func main() {
        clientCfg, err := clientcmd.NewDefaultClientConfigLoadingRules().Load()
        spew.Dump(clientCfg, err)
}

给你一个https://godoc.org/k8s.io/client-go/tools/clientcmd/api#Config https://godoc.org/k8s.io/client-go/tools/clientcmd/api#Config其中包含当前上下文,包括其名称空间。

Contexts: (map[string]*api.Context) (len=1) {
  (string) (len=17) "xxx.xxxxx.xxx": (*api.Context)(0xc0001b2b40)({
   LocationOfOrigin: (string) (len=30) "/path/to/.kube/config",
   Cluster: (string) (len=17) "xxx.xxxxx.xxx",
   AuthInfo: (string) (len=29) "[email protected] /cdn-cgi/l/email-protection",
   Namespace: (string) (len=7) "default",
   Extensions: (map[string]runtime.Object) {
   }
  })
 },
 CurrentContext: (string) (len=17) "xxx.xxxxx.xxx",

供你参考,ClientConfigLoadingRules是一个具有不同属性的结构,用于告诉客户端从哪里加载配置。默认情况下将使用您的路径KUBECONFIG环境变量中的Precedence field.

(*clientcmd.ClientConfigLoadingRules)(0xc0000a31d0)({
 ExplicitPath: (string) "",
 Precedence: ([]string) (len=1 cap=1) {
  (string) (len=30) "/path/to/.kube/config"
 },
 MigrationRules: (map[string]string) (len=1) {
  (string) (len=30) "/path/to/.kube/config": (string) (len=35) "/path/to/.kube/.kubeconfig"
 },
 DoNotResolvePaths: (bool) false,
 DefaultClientConfig: (clientcmd.ClientConfig) <nil>
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 .kube/config 中设置的当前上下文获取命名空间 的相关文章

  • nslookup 无法解析 Kubernetes.default

    我在我的 minikube 设置上尝试了以下命令来验证 dns 是否正常工作 kubectl exec ti busybox nslookup kubernetes default 但这是我得到的输出 服务器 10 96 0 10 地址1
  • Go 编译器有窗口化设置选项吗?

    我正在使用 Go 6g 编译 GTK 应用程序 我想知道是否有编译器 链接器选项使其成为 Windows 可执行文件而不是控制台可执行文件 MinGW 有一个 mwindows 选项来实现此目的 目前我必须使用十六进制编辑器手动更改 PE
  • 指针上定义的方法仍然可以用值调用

    Effective Go 文档说明如下 关于接收者的指针与值的规则是 可以在指针和值上调用值方法 但只能在指针上调用指针方法 http tip golang org doc effective go html pointers vs val
  • 将mysql数据导入kubernetes pod

    有谁知道如何将我的 dump sql 文件中的数据导入到 kubernetes pod 中 直接 与处理 docker 容器的方式相同 docker exec i container name mysql uroot password se
  • 测试 gRPC 服务

    我想测试用 Go 编写的 gRPC 服务 我使用的示例是 Hello World 服务器示例grpc go 仓库 https github com grpc grpc go blob master examples helloworld g
  • Kubeadm 加入失败:无法请求集群信息

    我有两台服务器作为本地服务器网络上的主节点和工作节点 master node 10 20 20 214 worker node 10 20 20 218 在主节点中 我成功使用 kubeadm init 设置 Calico 网络 它报告消息
  • 如何拥有在标准输出上更新的就地字符串

    我想输出到标准输出并让输出 覆盖 以前的输出 例如 如果我输出On 1 10 我想要下一个输出On 2 10覆盖On 1 10 我怎样才能做到这一点 stdout是一个流 io Writer 您无法修改已写入其中的内容 什么can更改的是该
  • 就绪探测失败:超时:1秒内无法连接服务“:8080”

    我正在尝试使用 minikube 构建微服务映像并将其部署到在我的开发计算机上运行的单节点 Kubernetes 集群 我正在使用 Google 的云原生微服务演示应用程序 Online Boutique 来了解 Kubernetes Is
  • 禁用 Kubernetes NGINX 入口的 SSL 重定向

    默认情况下 在 Kubernetes NGINX 入口中启用 SSL 重定向 如何禁用此功能 目前的实施如下 apiVersion extensions v1beta1 kind Ingress metadata name project
  • rancher rke up etcd 主机运行状况检查远程错误:tls:错误证书

    rke debug up config cluster yml etcd 主机上的运行状况检查失败并出现错误 DEBU 0281 etcd 无法检查 etcd 主机 x x x x 的运行状况 无法获取主机 x x x x 的 health
  • 如何将长 Go 模板函数拆分为多行?

    我有一个很长的printf调用 Go 模板 例子 printf mongodb s s s s authSource admin replicaSet s readPreference nearest w majority Values r
  • Concourse CI 找不到 kubernetes 秘密

    当运行程序尝试检索资源时 我收到以下错误 checking failed Expected to find variables git 我的资源看起来类似于 name resource repo type git source uri ht
  • 如何从 K8s API 获取 Kubernetes 集群名称

    如标题所述 是否可以从API中找到K8s集群名称 我查了一下 API 没有找到 kubectl config current context就可以了 它输出更多一点 比如项目名称 区域等 但它应该给你你需要的答案
  • 如何配置手动预配的 Azure 托管磁盘以用作 Kubernetes 持久卷?

    我正在尝试运行Jenkins Helm 图表 https github com kubernetes charts tree master stable jenkins 作为此设置的一部分 我想传递我提前配置的持久卷 或者可能在迁移期间从另
  • 子字符串和 Go 垃圾收集器

    在 Go 中获取字符串的子字符串时 不会分配新的内存 相反 子字符串的底层表示包含一个数据指针 该指针是原始字符串的数据指针的偏移量 这意味着 如果我有一个大字符串并希望跟踪一个小子字符串 则垃圾收集器将无法释放任何大字符串 直到我释放对较
  • 所有可能的 GOOS 价值?

    如果我做对了 GOOS在编译源代码时确定 为了更好地支持多个操作系统 我感兴趣的是GOOS可能 当然 Go 是开源的 所以它可能有无限的可能性 所以我真正想要的是一个 通用列表 已知值为 windows linux darwin or fr
  • GKE 上的 Ingress 仍处于“后端不健康”状态

    Given 一个运行 nginx 的简单 pod 节点端口服务 一个入口 当拨打电话时pod从集群内部我们得到 200 响应代码 当拨打电话时service从集群内部我们得到 200 响应代码 入口显示为注释 ingress kuberne
  • 结构体到磁盘的高效 Go 序列化

    我的任务是将 C 代码替换为 Go 而且我对 Go API 还很陌生 我正在使用 gob 将数百个键 值条目编码到磁盘页面 但 gob 编码有太多不需要的膨胀 package main import bytes encoding gob f
  • 如何使用fabric8 java客户端获取kubernetes服务帐户访问令牌?

    我已经在本地计算机中配置了 minikube 并将在外部使用 kubernetes 我已经在 kubernetes 中创建了一个服务帐户 并使用它的秘密我可以使用以下命令获取访问令牌 kubectl get secret
  • 仅导出嵌入结构实现的方法子集

    是否可以仅导出嵌入结构实现的方法的子集 这是一种与减少代码复制和粘贴非常不同的方法吗 还有更惯用的方法吗 type A struct func a A Hello fmt Println Hello func a A World fmt P

随机推荐