Не удается подключиться к Kubernetes Dashboard как пользователь без прав администратора с прокси-сервером kubectl - PullRequest
0 голосов
/ 10 апреля 2020

Я хочу разрешить пользователям без прав администратора использовать инструментальную панель Kubernetes для просмотра объектов K8 в их пространствах имен. Как администратор кластера, у меня нет проблем с подключением панели мониторинга Kubernetes с помощью прокси-сервера kubectl. Когда я впервые попытался получить к нему доступ с помощью учетной записи службы приложений с доступом только для чтения ко всему их пространству имен, я получил следующее сообщение об ошибке:

{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {

  },
  "status": "Failure",
  "message": "services \"https:kubernetes-dashboard:\" is forbidden: User \"system:serviceaccount:ops-jenkins-lab:k8-dashboard-ops-jenkins-lab\" cannot get resource \"services/proxy\" in API group \"\" in the namespace \"kubernetes-dashboard\"",
  "reason": "Forbidden",
  "details": {
    "name": "https:kubernetes-dashboard:",
    "kind": "services"
  },
  "code": 403
}

Я добавил дополнительные роли RBA C, чтобы разрешить службу приложения. доступ учетной записи к службам и службам / прокси в пространстве имен kubernetes-dashboard. Теперь я получаю следующую ошибку:

Forbidden (403): Http failure response for http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/api/v1/login: 403 Forbidden

Если я создаю вход для информационной панели, я могу без проблем подключиться к информационной панели Kubernetes, используя ту же учетную запись службы приложений, и иметь доступ для просмотра всех объектов kubernetes в пространство имен (как только я переключаюсь с пространства по умолчанию на правильное пространство имен). На самом деле я предпочел бы использовать вход, но по какой-то причине, когда я подключаюсь к инструментальной панели Kubernetes через браузер, он захватывает вход для всех моих других приложений. Независимо от того, к какому входу я пытаюсь подключиться, он автоматически перенаправляет меня на панель управления Kubernetes. Мне нужно очистить все данные браузера, чтобы подключиться к другим приложениям.

RBA C clusterrole и rolebinding:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  annotations:
  name: k8-dashboard
rules:
- apiGroups:
  - extensions
  - apps
  resources:
  - '*'
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - batch
  resources:
  - jobs
  - cronjobs
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - autoscaling
  resources:
  - horizontalpodautoscalers
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - policy
  resources:
  - poddisruptionbudgets
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - '*'
  resources:
  - persistentvolumeclaims
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - '*'
  resources:
  - services
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - '*'
  resources:
  - events
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - '*'
  resources:
  - configmaps
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - apps
  resources:
  - '*'
  verbs:
  - patch
- apiGroups:
  - apps
  resources:
  - deployments/scale
  verbs:
  - update
- apiGroups:
  - ""
  resources:
  - pods/attach
  - pods/exec
  - pods/log
  - pods/status
  - pods/delete
  verbs:
  - '*'
- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - get
  - list
  - delete
- apiGroups:
  - ""
  resources:
  - secrets
  verbs:
  - create
  - get
  - delete
  - patch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  annotations:
  labels:
    subjectName: k8-dashboard-sa
  name: k8-dashboard-ops-jenkins-lab
  namespace: ops-jenkins-lab
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: k8-dashboard
subjects:
- kind: ServiceAccount
  name: k8-dashboard-ops-jenkins-lab
  namespace: ops-jenkins-lab

Так что мне остается необходимость подключаться к панели управления Kubernetes с помощью kubectl прокси. Я уверен, что при использовании прокси-сервера kubectl в качестве пользователя без прав администратора требуется дополнительный RBA C; Тем не менее, мне еще предстоит выяснить это. Кто-нибудь предлагает?

1 Ответ

0 голосов
/ 15 апреля 2020

Ваше ClusterRole связано с RoleBinding, а в документации вы можете прочитать:

RoleBinding также может ссылаться на ClusterRole для предоставления разрешений, определенных в этом ClusterRole, для ресурсов внутри пространство имен RoleBinding

Это означает, что даже если вы используете ClusterRole, разрешения ограничиваются одним пространством имен, которое в вашем случае равно ops-jenkins-lab.

И долго, пока Панель управления, к которой вы пытаетесь получить доступ, находится в kubernetes-dashboard пространстве имен, вы не сможете сделать это, потому что ваша привязка RoleBinding находится в неправильном пространстве имен.

Чтобы k8-dashboard-ops-jenkins-lab serviceAccount имел доступ к ресурсам в другом пространстве имен, вы должны либо создайте ClusterRoleBinding (кластерная привязка не является пространством имен) или (лучше вариант) RoleBinding в пространстве имен, к которому вы хотите получить доступ (в вашем случае это будет kubernetes-dashboard пространство имен).

Дайте мне знать, если что-то нуждается в дополнительных пояснениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...