我想从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
到目前为止,我找到的唯一方法是将命名空间作为环境变量提交,但我不想要求用户输入该信息。
答案 0 :(得分:15)
至少在kubernetes 1.5.3中,我还可以在/var/run/secrets/kubernetes.io/serviceaccount/namespace
中看到命名空间。
答案 1 :(得分:12)
您可以使用downward API自动将pod的命名空间填充为环境变量。
答案 2 :(得分:0)
我通过跟踪Web控制台的功能找到了解决方案。
我可以在以下网址上没有集群管理权限的情况下询问项目列表:
send()
仅列出我有权拥有的项目,然后可以确定当前项目的名称也是命名空间。
如果有更简单的解决方案,我会很高兴,但这很有效。