【问题标题】:How to get current namespace from running pod usin client api如何使用客户端 api 从正在运行的 pod 中获取当前命名空间
【发布时间】:2020-01-08 09:46:48
【问题描述】:
我正在使用 kubernetes java 客户端库来与我的 kubernetes 服务器通信。
我的问题是有什么方法可以通过编程方式从其中发送调用 kubernetes 的运行 pod 的命名空间?
听说这里有文件 - /var/run/secrets/kubernetes.io/serviceaccount/namespace
但是我想知道是否有任何方法可以在不读取此文件的情况下使用 java 客户端获取它。
我在文档中进行了搜索,但没有找到与此相关的内容。
【问题讨论】:
标签:
docker
kubernetes
deployment
kubectl
【解决方案1】:
如果您在 pod 定义文件中设置以下环境变量,则 pod 的命名空间将存储在环境变量中。然后它可以被客户端 API 检索到。
env
- name: MYPOD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
【解决方案2】:
对 Go、Python 和 Java 客户端的快速搜索似乎表明集群内客户端不支持此功能。
这是有道理的,因为集群内客户端运行所在的命名空间不一定与客户端凭据范围的命名空间相关,即角色、角色绑定和服务帐户。
所以我可以看到为什么在各种客户端中不存在这样的方法/端点,因为它可能会很混乱。因此,您最好也是唯一的选择似乎是/var/run/secrets/kubernetes.io/serviceaccount/namespace