Как получить пространство имен внутри модуля в OpenShift?

Я хотел бы получить доступ к OpenShift и Kubernetes API изнутри модуля, чтобы запрашивать и изменять объекты в приложении, которому принадлежит модуль.

В документации (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"

Проблема в том, что когда я, например, хочу получить доступ к модулю, мне нужно знать пространство имен, в котором я нахожусь:

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

Единственный способ, который я нашел до сих пор, - это отправить пространство имен как переменную среды, но я бы не хотел, чтобы пользователь вводил эту информацию.


person John Erik Halse    schedule 22.07.2015    source источник


Ответы (3)


Вы можете получить пространство имен вашего модуля, автоматически заполненное как переменную среды, используя API вниз.

person Alex Robinson    schedule 22.07.2015
comment
Я считаю, что принятый ответ устарел. Ответ @ankon универсален и его следует рекомендовать. Используйте нисходящий API только в том случае, если вам нужна envvar или вам нужно контролировать, как она читается. Этот ответ был лучшим ответом в 2015 году, но я думаю, что файл пространства имен лучше подходит для программного доступа в будущем. - person yzorg; 21.06.2021

По крайней мере, в kubernetes 1.5.3 я также вижу пространство имен в /var/run/secrets/kubernetes.io/serviceaccount/namespace.

person ankon    schedule 24.02.2017

Я нашел решение, отслеживая, что делает веб-консоль.

Мне разрешено запросить список проектов без прав администратора кластера по следующему URL-адресу:

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

В списке перечислены только те проекты, на которые у меня есть права, а затем можно определить текущий проект, имя которого также является пространством имен.

Хотелось бы, чтобы было более простое решение, но это работает.

person John Erik Halse    schedule 22.07.2015
comment
Используйте нисходящий API для заполнения переменной среды ... вы не можете предполагать, что у вас будут права на чтение списков проектов из модуля - person Jordan Liggitt; 23.07.2015