【问题标题】:How to get the namespace from inside a pod in OpenShift?如何从 OpenShift 的 pod 内部获取命名空间?
【发布时间】:2015-07-22 08:32:45
【问题描述】:

我想从 pod 内部访问 OpenShift 和 Kubernetes API,以查询和修改 pod 所属应用程序中的对象。

在文档 (https://docs.openshift.org/latest/dev_guide/service_accounts.html) 中,我找到了有关如何访问 api 的说明:

$ TOKEN="$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)"

$ curl --cacert /var/run/secrets/kubernetes.io/serviceaccount/ca.crt \
"https://openshift.default.svc.cluster.local/oapi/v1/users/~" \
-H "Authorization: Bearer $TOKEN"

问题是,例如,当我想访问一个 pod 时,我需要知道我所在的命名空间:

https://openshift.default.svc.cluster.local/oapi/v1/namespaces/${namespace}/pods

到目前为止,我发现的唯一方法是将命名空间作为环境变量提交,但我不想要求用户输入该信息。

【问题讨论】:

    标签: kubernetes openshift-origin


    【解决方案1】:

    至少在 kubernetes 1.5.3 中我还可以看到/var/run/secrets/kubernetes.io/serviceaccount/namespace 中的命名空间。

    【讨论】:

      【解决方案2】:

      您可以使用downward API 将您的 pod 的命名空间自动填充为环境变量。

      【讨论】:

      • 我相信接受的答案是陈旧的。 @ankon 的答案是普遍的,应该被推荐。仅当您需要环境变量或需要控制读取方式时才使用向下 API。这个答案是 2015 年的最佳答案,但我认为命名空间文件更适合未来的编程访问。
      【解决方案3】:

      我通过跟踪 Web 控制台的功能找到了解决方案。

      我可以在没有集群管理员权限的情况下询问项目列表:

      https://openshift.default.svc.cluster.local/oapi/v1/projects
      

      仅列出我有权访问的项目,然后可以确定当前项目名称也是命名空间。

      如果有更简单的解决方案会很高兴,但这很有效。

      【讨论】:

      • 使用向下 API 填充环境变量...您不能假设您有权从 pod 中读取项目列表
      猜你喜欢
      • 1970-01-01
      • 2018-02-13
      • 2020-06-17
      • 2017-12-11
      • 1970-01-01
      • 1970-01-01
      • 2018-07-19
      • 2021-12-06
      • 2023-02-07
      相关资源
      最近更新 更多