如何使用客户端 api 从运行 pod 中获取当前命名空间

lio*_*tur 2 deployment docker kubernetes kubectl

我正在使用 kubernetes java 客户端库来与我的 kubernetes 服务器进行通信。

我的问题是有没有办法以编程方式从其中向 kubernetes 发送调用获取正在运行的 pod 的命名空间?

我听说这里有文件 - /var/run/secrets/kubernetes.io/serviceaccount/namespace

但是我想知道有什么方法可以在不阅读此文件的情况下使用 java 客户端获取它。

我在文档中搜索过,但没有发现与此相关的任何内容。

Sub*_*kam 7

如果您在 pod 定义文件上设置以下环境变量,则 pod 的命名空间将存储在环境变量中。然后它可以被客户端 API 检索。

 env
  - name: MYPOD_NAMESPACE
      valueFrom:
        fieldRef:
          fieldPath: metadata.namespace
Run Code Online (Sandbox Code Playgroud)


cew*_*ood 4

不幸的是,对 Go、Python 和 Java 客户端的快速搜索似乎表明集群内客户端不支持此功能。

这是有道理的,因为集群内客户端运行的命名空间不一定与客户端凭证所属的命名空间(即角色、角色绑定和服务帐户)相关。

所以我可以理解为什么这样的方法/端点在各种客户端中不存在,因为它可能会非常令人困惑。因此你最好也是唯一的选择似乎是/var/run/secrets/kubernetes.io/serviceaccount/namespace