【发布时间】:2019-04-16 10:11:18
【问题描述】:
如何使用 kubernetes client-go API 获取部署/服务的当前命名空间?它似乎不在客户端对象或配置中。
【问题讨论】:
标签: go kubernetes
如何使用 kubernetes client-go API 获取部署/服务的当前命名空间?它似乎不在客户端对象或配置中。
【问题讨论】:
标签: go kubernetes
使用
ioutil.ReadFile("/var/run/secrets/kubernetes.io/serviceaccount/namespace")
当所需的实现出现在inClusterClientConfig 的Namespace() 方法中时,可以工作但很难看。但是如何从rest.InClusterConfig() 开始获取该对象?它只能通过NewNonInteractiveDeferredLoadingClientConfig 从包外部实例化。
我看到 kubernetes #63707 看起来相关但已被放弃。
【讨论】:
您始终可以为每个命名空间设置上下文,然后从 kubeconfig 中读取您当前所在的上下文:
使用以下代码找出您所在的命名空间:
namespace, _, err := kubeconfig.Namespace()
if err != nil {
panic(err)
}
这将返回您所在的命名空间。
更多信息请参考:
https://github.com/kubernetes/client-go/blob/master/tools/clientcmd/client_config.go
【讨论】:
在您的部署配置中添加此环境变量。
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
【讨论】: