Стадия жизненного цикла модуля: Preview
У модуля есть требования для установки
Модуль observability определяет ряд кастомных ресурсов для своей работы.
Для контроля доступа используется модуль user-authn и ролевая модель Kubernetes.
Для контроля доступа к кластерным ресурсов модуля определен набор стандартных кластерных ролей ClusterRole:
d8:manage:permission:module:observability:edit— предоставляет права на создание, редактирование, чтение и удаление системных (кластерных) ресурсов модуля;d8:manage:permission:module:observability:view— предоставляет права на чтение кластерных ресурсов модуля.
Для контроля доступа к проектным ресурсам модуля предоставляется набор стандартных ролей ClusterRole:
d8:use:capability:module:observability:edit— предоставляет доступ для чтения, создания, редактирования и удаления ресурсов модуля;d8:use:capability:module:observability:view— предоставляет доступ для чтения проектных ресурсов модуля.
Для доступа пользователя к метрикам проекта или кластера необходимо назначить соответствующую роль. Также возможно включение прав модуля в существующие роли.
Доступ к метрикам и дашбордам в неймспейсе
Для предоставления доступа к метрикам и дашбордам в конкретном неймспейсе необходимо создать ресурсы ClusterRole и RoleBinding, которые будут определять права пользователя. Доступ к метрикам и дашбордам предоставляется отдельно:
- метрики — проверяется наличие права
getна ресурсmetrics.observability.deckhouse.io; - дашборды — проверяется наличие прав на ресурс
observabilitydashboards.observability.deckhouse.io:get— просмотр дашбордов;create— создание, изменение и удаление дашбордов.
Пример ClusterRole и RoleBinding для доступа к метрикам и дашбордам только на чтение:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: observability-viewer
rules:
- apiGroups: ["observability.deckhouse.io"]
resources: ["metrics", "observabilitydashboards"]
verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: bind-observability-viewer
namespace: my-namespace
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: observability-viewer
subjects:
- kind: User
name: user@example.com
apiGroup: rbac.authorization.k8s.ioПример ClusterRole и RoleBinding для доступа к метрикам и дашбордам на чтение и редактирование:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: observability-editor
rules:
- apiGroups: ["observability.deckhouse.io"]
resources: ["metrics", "observabilitydashboards"]
verbs: ["get", "list", "watch"]
- apiGroups: ["observability.deckhouse.io"]
resources: ["observabilitydashboards"]
verbs: ["create", "update", "delete"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: bind-observability-editor
namespace: my-namespace
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: observability-editor
subjects:
- kind: User
name: user@example.com
apiGroup: rbac.authorization.k8s.ioДоступ к системным метрикам и дашбордам
Для предоставления доступа к системным метрикам и дашбордам необходимо создать ClusterRole и ClusterRoleBinding, которые будут определять права пользователя. Доступ к метрикам и дашбордам предоставляется отдельно:
- метрики — проверяется наличие права
getна ресурсclustermetrics.observability.deckhouse.io; - дашборды — проверяется наличие прав на ресурс
clusterobservabilitydashboards.observability.deckhouse.io:get— просмотр дашбордов;create— создание, изменение и удаление дашбордов.
Пример ClusterRole и ClusterRoleBinding для просмотра системных метрик и дашбордов:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: observability-cluster-viewer
rules:
- apiGroups: ["observability.deckhouse.io"]
resources: ["clustermetrics", "clusterobservabilitydashboards"]
verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: bind-observability-cluster-viewer
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: observability-cluster-viewer
subjects:
- kind: User
name: user@example.com
apiGroup: rbac.authorization.k8s.ioПример ClusterRole и ClusterRoleBinding для доступа к метрикам и дашбордам на чтение и редактирование:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: observability-cluster-editor
rules:
- apiGroups: ["observability.deckhouse.io"]
resources: ["clustermetrics", "clusterobservabilitydashboards"]
verbs: ["get", "list", "watch"]
- apiGroups: ["observability.deckhouse.io"]
resources: ["clusterobservabilitydashboards"]
verbs: ["create", "update", "delete"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: bind-observability-cluster-editor
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: observability-cluster-editor
subjects:
- kind: User
name: user@example.com
apiGroup: rbac.authorization.k8s.ioДоступ к логам в неймспейсе
Для предоставления доступа к логам в конкретном неймспейсе необходимо создать ресурсы ClusterRole и RoleBinding, которые будут определять права пользователя.
Проверяется наличие права get на ресурс logs.observability.deckhouse.io.
Пример ClusterRole и RoleBinding для доступа к метрикам и дашбордам только на чтение:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: observability-viewer
rules:
- apiGroups: ["observability.deckhouse.io"]
resources: ["logs"]
verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: bind-observability-viewer
namespace: my-namespace
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: observability-viewer
subjects:
- kind: User
name: user@example.com
apiGroup: rbac.authorization.k8s.ioДоступ к системным логам
Для предоставления доступа к системным логам необходимо создать ClusterRole и ClusterRoleBinding, которые будут определять права пользователя.
Проверяется наличие права get на ресурс clusterlogs.observability.deckhouse.io.
Пример ClusterRole и ClusterRoleBinding для просмотра системных метрик и дашбордов:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: observability-cluster-viewer
rules:
- apiGroups: ["observability.deckhouse.io"]
resources: ["clusterlogs"]
verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: bind-observability-cluster-viewer
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: observability-cluster-viewer
subjects:
- kind: User
name: user@example.com
apiGroup: rbac.authorization.k8s.ioПолный доступ ко всем метрикам, дашбордам и логам
Для предоставления полного доступа ко всем метрикам, дашбордам и логам в DKP необходимо создать роль ClusterRole, которая будет включать все необходимые права. После этого используйте ClusterRoleBinding для назначения этой роли.
Можно использовать готовую роль cluster-admin, однако с осторожностью.
Эта роль предоставляет полный доступ ко всем ресурсам кластера.
Пример ClusterRole и ClusterRoleBinding для полного доступа ко всем метрикам и дашбордам:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: observability-admin
rules:
- apiGroups: ["observability.deckhouse.io"]
resources:
- metrics
- clustermetrics
- observabilitydashboards
- clusterobservabilitydashboards
- clusterobservabilitypropagateddashboards
verbs: ["get", "list", "watch", "create", "update", "delete"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: bind-observability-admin
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: observability-admin
subjects:
- kind: User
name: user@example.com
apiGroup: rbac.authorization.k8s.ioПредоставление доступа при использовании RBAC 2.0
Если включена экспериментальная ролевая модель, права назначаются через ресурсы UserRole и ClusterUserRole.
Пример доступа к метрикам и дашбордам в неймспейсе:
Данный пример предоставляет права не только для доступа к дашбордам и метрикам.
Описание данной роли можно найти в документации модуля user-authz.
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: myapp-developer
namespace: myapp
subjects:
- kind: User
name: user@example.com
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: d8:use:role:user
apiGroup: rbac.authorization.k8s.io