Как посмотреть логи в k8s из другого пространства имен

Моя цель — просмотреть журналы подов, принадлежащих другим пространствам имен, чтобы диагностировать проблемы.

Вот разрешения, которые я настроил:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: default
  namespace: jenkins
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: listar-recursos
rules:
  - apiGroups: [""]
    resources: ["pods", "pods/log"]
    verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: asgina-lista-recursos
  namespace: jenkins
subjects:
  - kind: ServiceAccount
    name: default
    namespace: jenkins
roleRef:
  kind: ClusterRole
  name: listar-recursos
  apiGroup: rbac.authorization.k8s.io

Вот результат после запуска из модуля внутри пространства имен Jenkins:

kubectl logs -l name=myapp -n anothernamespace
Error from server (Forbidden): pods is forbidden: 
User "system:serviceaccount:jenkins:default"
cannot list resource "pods" in API group "" 
in the namespace "anothernamespace"

Прежде чем спрашивать, я внимательно прочитал эту статью: https://kubernetes.io/docs/reference/access-authn-authz/rbac/

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
0
0
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Судя по предоставленной вами конфигурации YAML, ключевая проблема, которую я здесь вижу, заключается в том, что вы настроили RoleBinding в пространстве имен jenkins, что ограничивает объем разрешений, предоставленных этому конкретному пространству имен. Однако для доступа к ресурсам, таким как модули и их журналы, в разных пространствах имен, вам необходимо использовать ClusterRoleBinding вместо RoleBinding.

ClusterRoleBinding предоставляет разрешения, определенные в связанной ClusterRole, пользователям или группам во всех пространствах имен.

Итак, сначала я предлагаю заменить ваш RoleBinding на ClusterRoleBinding, то есть:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: asgina-lista-recursos-global
subjects:
  - kind: ServiceAccount
    name: default
    namespace: jenkins
roleRef:
  kind: ClusterRole
  name: listar-recursos
  apiGroup: rbac.authorization.k8s.io

Эта конфигурация привязывает listar-recursos ClusterRole к default ServiceAccount в пространстве имен jenkins, но привязка действует во всех пространствах имен из-за использования ClusterRoleBinding.

Затем приступайте к применению этой обновленной конфигурации к вашему кластеру Kubernetes.

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

Другие вопросы по теме