如何从 OpenShift 中的 pod 中获取命名空间?
How to get the namespace from inside a pod in OpenShift?
我想从 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
目前我发现的唯一方法是将命名空间作为环境变量提交,但我不想要求用户输入该信息。
我通过跟踪 Web 控制台的功能找到了解决方案。
我可以在没有集群管理员权限的情况下请求项目列表 url:
https://openshift.default.svc.cluster.local/oapi/v1/projects
只列出我有权限的项目,然后可以判断当前项目是哪个名称也是命名空间。
如果有更简单的解决方案,我会很高兴,但这行得通。
您可以使用 downward API.
让您的 pod 的命名空间自动填充为环境变量
至少在 kubernetes 1.5.3 中我还可以在 /var/run/secrets/kubernetes.io/serviceaccount/namespace
中看到命名空间。
我想从 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
目前我发现的唯一方法是将命名空间作为环境变量提交,但我不想要求用户输入该信息。
我通过跟踪 Web 控制台的功能找到了解决方案。
我可以在没有集群管理员权限的情况下请求项目列表 url:
https://openshift.default.svc.cluster.local/oapi/v1/projects
只列出我有权限的项目,然后可以判断当前项目是哪个名称也是命名空间。
如果有更简单的解决方案,我会很高兴,但这行得通。
您可以使用 downward API.
让您的 pod 的命名空间自动填充为环境变量至少在 kubernetes 1.5.3 中我还可以在 /var/run/secrets/kubernetes.io/serviceaccount/namespace
中看到命名空间。