如何获取集群内 go Kubernetes 客户端的当前命名空间

gkg*_*kgk 12 go kubernetes

如何使用 kubernetes client-go API 获取部署/服务的当前命名空间?它似乎不在客户端对象或配置中。

Jes*_*ick 9

使用

ioutil.ReadFile("/var/run/secrets/kubernetes.io/serviceaccount/namespace")
Run Code Online (Sandbox Code Playgroud)

工作,但是难看,当期望的实施方式存在于Namespace()的方法inClusterClientConfig。但是你如何从 开始得到那个对象 rest.InClusterConfig()?它只能通过NewNonInteractiveDeferredLoadingClientConfig.

我看到kubernetes #63707看起来相关但被放弃了。

  • 如果您使用的是operator-sdk,则包中有一个实用方法k8sutil.GetOperatorNamespace():“github.com/operator-framework/operator-sdk/pkg/k8sutil”。实现只是读取上面的文件。 (2认同)

bap*_*ppr 6

在部署配置中添加此环境变量。

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

这是使用kubernetes down api


Pra*_*dha 3

您始终可以为每个命名空间设置上下文,然后从 kubeconfig 读取您当前所在的上下文:

使用以下代码找出您所在的命名空间:

namespace, _, err := kubeconfig.Namespace()
    if err != nil {
            panic(err)
    }
Run Code Online (Sandbox Code Playgroud)

这将返回您所在的名称空间。

欲了解更多信息,请参阅:

https://github.com/kubernetes/client-go/blob/master/tools/clientcmd/client_config.go

  • 抱歉这么晚才回复 - 我使用 kubernetes.Clientset 对象,而不是 kubeconfig,因为我在集群内运行服务。不知道这个答案是否适用,谢谢! (5认同)