Экспериментальная версия. Функциональность может сильно измениться. Совместимость с будущими версиями не гарантируется.

Конвертация существующих дашбордов из GrafanaDashboardDefinition

Для перехода со старого формата дашбордов (GrafanaDashboardDefinition) на новый (ObservabilityDashboard, ClusterObservabilityDashboard), необходимо вручную адаптировать манифесты. Обратите внимание на следующие отличия:

Старый формат Новый формат
spec.folder Поле отсутствует. Папка задаётся с помощью аннотации: observability.deckhouse.io/category
Название дашборда берется из поля Title дашборда Название задаётся с помощью аннотации: observability.deckhouse.io/title. Если аннотация отсутствует — используется поле title из JSON дашборда

Пример конвертации

Старый формат:

1apiVersion: deckhouse.io/v1
2kind: GrafanaDashboardDefinition
3metadata:
4  name: example-dashboard
5spec:
6  folder: "Apps"
7  json: '{
8    "title": "Example Dashboard",
9    ...
10  }'

Новый формат (ObservabilityDashboard):

1apiVersion: observability.deckhouse.io/v1alpha1
2kind: ObservabilityDashboard
3metadata:
4  name: example-dashboard
5  namespace: my-namespace
6  annotations:
7    metadata.deckhouse.io/category: "Apps"
8    metadata.deckhouse.io/title: "Example Dashboard"
9spec:
10  definition: |
11    {
12      "title": "Example Dashboard",
13      ...
14    }

Новый формат (ClusterObservabilityDashboard):

1apiVersion: observability.deckhouse.io/v1alpha1
2kind: ClusterObservabilityDashboard
3metadata:
4  name: example-dashboard
5  annotations:
6    metadata.deckhouse.io/category: "Apps"
7    metadata.deckhouse.io/title: "Example Dashboard"
8spec:
9  definition: |
10    {
11      "title": "Example Dashboard",
12      ...
13    }

Как предоставить права на метрики и дашборды в конкретном пространстве имен

Для предоставления доступа к метрикам и дашбордам в конкретном пространстве имён необходимо создать ресурсы ClusterRole и RoleBinding, которые будут определять права пользователя. Доступ к метрикам и дашбордам предоставляется отдельно:

  • Метрики — проверяется наличие права get на ресурс metrics.observability.deckhouse.io.
  • Дашборды — проверяется наличие прав на ресурс observabilitydashboards.observability.deckhouse.io:
    • get — просмотр дашбордов;
    • create — создание, изменение и удаление дашбордов.

Пример ClusterRole и RoleBinding для доступа к метрикам и дашбордам только на чтение

1apiVersion: rbac.authorization.k8s.io/v1
2kind: ClusterRole
3metadata:
4  name: observability-viewer
5rules:
6  - apiGroups: ["observability.deckhouse.io"]
7    resources: ["metrics", "observabilitydashboards"]
8    verbs: ["get", "list", "watch"]
9---
10apiVersion: rbac.authorization.k8s.io/v1
11kind: RoleBinding
12metadata:
13  name: bind-observability-viewer
14  namespace: my-namespace
15roleRef:
16  apiGroup: rbac.authorization.k8s.io
17  kind: ClusterRole
18  name: observability-viewer
19subjects:
20  - kind: User
21    name: user@example.com
22    apiGroup: rbac.authorization.k8s.io

Пример ClusterRole и RoleBinding для доступа к метрикам и дашбордам на чтение и редактирование

1apiVersion: rbac.authorization.k8s.io/v1
2kind: ClusterRole
3metadata:
4  name: observability-editor
5rules:
6  - apiGroups: ["observability.deckhouse.io"]
7    resources: ["metrics", "observabilitydashboards"]
8    verbs: ["get", "list", "watch"]
9  - apiGroups: ["observability.deckhouse.io"]
10    resources: ["observabilitydashboards"]
11    verbs: ["create", "update", "delete"]
12---
13apiVersion: rbac.authorization.k8s.io/v1
14kind: RoleBinding
15metadata:
16  name: bind-observability-editor
17  namespace: my-namespace
18roleRef:
19  apiGroup: rbac.authorization.k8s.io
20  kind: ClusterRole
21  name: observability-editor
22subjects:
23  - kind: User
24    name: user@example.com
25    apiGroup: rbac.authorization.k8s.io

Как предоставить доступ к системным метрикам и дашбордам

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

  • Метрики — проверяется наличие права get на ресурс clustermetrics.observability.deckhouse.io.
  • Дашборды — проверяется наличие прав на ресурс clusterobservabilitydashboards.observability.deckhouse.io:
    • get — просмотр дашбордов;
    • create — создание, изменение и удаление дашбордов.

Пример ClusterRole и ClusterRoleBinding для просмотра системных метрик и дашбордов

1apiVersion: rbac.authorization.k8s.io/v1
2kind: ClusterRole
3metadata:
4  name: observability-cluster-viewer
5rules:
6  - apiGroups: ["observability.deckhouse.io"]
7    resources: ["clustermetrics", "clusterobservabilitydashboards"]
8    verbs: ["get", "list", "watch"]
9---
10apiVersion: rbac.authorization.k8s.io/v1
11kind: ClusterRoleBinding
12metadata:
13  name: bind-observability-cluster-viewer
14roleRef:
15  apiGroup: rbac.authorization.k8s.io
16  kind: ClusterRole
17  name: observability-cluster-viewer
18subjects:
19  - kind: User
20    name: user@example.com
21    apiGroup: rbac.authorization.k8s.io

Пример ClusterRole и ClusterRoleBinding для доступа к метрикам и дашбордам на чтение и редактирование

1apiVersion: rbac.authorization.k8s.io/v1
2kind: ClusterRole
3metadata:
4  name: observability-cluster-editor
5rules:
6  - apiGroups: ["observability.deckhouse.io"]
7    resources: ["clustermetrics", "clusterobservabilitydashboards"]
8    verbs: ["get", "list", "watch"]
9  - apiGroups: ["observability.deckhouse.io"]
10    resources: ["clusterobservabilitydashboards"]
11    verbs: ["create", "update", "delete"]
12---
13apiVersion: rbac.authorization.k8s.io/v1
14kind: ClusterRoleBinding
15metadata:
16  name: bind-observability-cluster-editor
17roleRef:
18  apiGroup: rbac.authorization.k8s.io
19  kind: ClusterRole
20  name: observability-cluster-editor
21subjects:
22  - kind: User
23    name: user@example.com
24    apiGroup: rbac.authorization.k8s.io

Как предоставить полный доступ ко всем метрикам и дашбордам

Для предоставления полного доступа ко всем метрикам и дашбордам в Deckhouse необходимо создать роль ClusterRole, которая будет включать все необходимые права, и используйте ClusterRoleBinding для назначения этой роли.

Пример ClusterRole

1apiVersion: rbac.authorization.k8s.io/v1
2kind: ClusterRole
3metadata:
4  name: observability-admin
5rules:
6  - apiGroups: ["observability.deckhouse.io"]
7    resources:
8      - metrics
9      - clustermetrics
10      - observabilitydashboards
11      - clusterobservabilitydashboards
12      - clusterobservabilitypropagateddashboards
13    verbs: ["get", "list", "watch", "create", "update", "delete"]
14---
15apiVersion: rbac.authorization.k8s.io/v1
16kind: ClusterRoleBinding
17metadata:
18  name: bind-observability-admin
19roleRef:
20  apiGroup: rbac.authorization.k8s.io
21  kind: ClusterRole
22  name: observability-admin
23subjects:
24  - kind: User
25    name: user@example.com
26    apiGroup: rbac.authorization.k8s.io

Можно использовать готовую роль cluster-admin, однако её следует применять с осторожностью, так как она предоставляет полный доступ ко всем ресурсам кластера.

Как выдать доступ при использовании RBAC 2.0

Если включена экспериментальная ролевая модель, права назначаются через ресурсы UserRole и ClusterUserRole.

Пример доступа к метрикам и дашбордам в конкретном пространстве имён

Для предоставления пользователю доступа к пространству имён myapp с возможностью просмотра метрик и дашбордов, можно использовать следующий манифест:

1apiVersion: rbac.authorization.k8s.io/v1
2kind: RoleBinding
3metadata:
4  name: myapp-developer
5  namespace: myapp
6subjects:
7  - kind: User
8    name: user@example.com
9    apiGroup: rbac.authorization.k8s.io
10roleRef:
11  kind: ClusterRole
12  name: d8:use:role:user
13  apiGroup: rbac.authorization.k8s.io

Данный пример предоставляет права не только для доступа к дашбордам и метрикам. Описание данной роли можно найти в документации модуля user-authz.