Доступно в редакциях: CE, BE, SE, SE+, EE
Взаимодействие с облачными ресурсами провайдера Yandex Cloud осуществляется с помощью модуля cloud-provider-yandex
. Он предоставляет возможность модулю управления узлами использовать ресурсы Yandex Cloud при заказе узлов для описанной группы узлов.
Функции модуля cloud-provider-yandex
:
- Управление ресурсами Yandex Cloud с помощью модуля
cloud-controller-manager
:- Создание сетевых маршрутов для сети
PodNetwork
на стороне Yandex Cloud. - Актуализация метаданных Yandex Cloud Instances и Kubernetes Nodes. Удаление из Kubernetes узлов, которых уже нет в Yandex Cloud.
- Создание сетевых маршрутов для сети
- Заказ дисков в Yandex Cloud с помощью компонента
CSI storage
. - Регистрация в модуле node-manager для использования YandexInstanceClass’ы можно было использовать при описании NodeGroup.
- Включение необходимого CNI (который использует simple bridge).
Интеграция с Yandex Cloud
Настройка групп безопасности
При создании облачной сети, Yandex Cloud создаёт группу безопасности по умолчанию для всех подключенных сетей, включая сеть кластера Deckhouse Kubernetes Platform. Эта группа безопасности по умолчанию содержит правила разрешающие любой входящий и исходящий трафик и применяется для всех подсетей облачной сети, если на объект (интерфейс ВМ) явно не назначена другая группа безопасности.
Не удаляйте правила по умолчанию, разрешающие любой трафик, до того как закончите настройку правил группы безопасности. Это может нарушить работоспособность кластера.
Ниже приведены общие рекомендации по настройке группы безопасности. Некорректная настройка групп безопасности может сказаться на работоспособности кластера. Пожалуйста ознакомьтесь с особенностями работы групп безопасности в Yandex Cloud перед использованием в продуктивных средах.
-
Определите облачную сеть, в которой работает кластер Deckhouse Kubernetes Platform.
Название сети совпадает с полем
prefix
ресурса ClusterConfiguration. Его можно узнать с помощью команды:1kubectl get secrets -n kube-system d8-cluster-configuration -ojson | \ 2 jq -r '.data."cluster-configuration.yaml"' | base64 -d | grep prefix | cut -d: -f2
-
В консоли Yandex Cloud выберите сервис Virtual Private Cloud и перейдите в раздел Группы безопасности. У вас должна отображаться одна группа безопасности с пометкой
Default
. -
Создайте правила согласно инструкции Yandex Cloud.
-
Удалите правило, разрешающее любой входящий трафик (на скриншоте выше оно уже удалено), и сохраните изменения.
Интеграция с Yandex Lockbox
С помощью инструмента External Secrets Operator вы можете настроить синхронизацию секретов Yandex Lockbox с секретами кластера Deckhouse Kubernetes Platform.
Приведенную инструкцию следует рассматривать как Быстрый старт. Для использования интеграции в продуктивных средах ознакомьтесь со следующими ресурсами:
Инструкция по развертыванию
-
Создайте сервисный аккаунт, необходимый для работы External Secrets Operator:
1yc iam service-account create --name eso-service-account
-
Создайте авторизованный ключ для сервисного аккаунта и сохраните его в файл:
1yc iam key create --service-account-name eso-service-account --output authorized-key.json
-
Назначьте сервисному аккаунту роли
lockbox.editor
,lockbox.payloadViewer
иkms.keys.encrypterDecrypter
для доступа ко всем секретам каталога:1folder_id=<идентификатор каталога> 2yc resource-manager folder add-access-binding --id=${folder_id} --service-account-name eso-service-account --role lockbox.editor 3yc resource-manager folder add-access-binding --id=${folder_id} --service-account-name eso-service-account --role lockbox.payloadViewer 4yc resource-manager folder add-access-binding --id=${folder_id} --service-account-name eso-service-account --role kms.keys.encrypterDecrypter
Для более тонкой настройки ознакомьтесь с управлением доступом в Yandex Lockbox.
-
Установите External Secrets Operator с помощью Helm-чарта согласно инструкции.
Обратите внимание, что вам может понадобиться задать
nodeSelector
,tolerations
и другие параметры. Для этого используйте файл./external-secrets/values.yaml
после распаковки Helm-чарта.Скачайте и распакуйте чарт:
1helm pull oci://cr.yandex/yc-marketplace/yandex-cloud/external-secrets/chart/external-secrets \ 2 --version 0.5.5 \ 3 --untar
Установите Helm-чарт:
1helm install -n external-secrets --create-namespace \ 2 --set-file auth.json=authorized-key.json \ 3 external-secrets ./external-secrets/
Где:
authorized-key.json
— название файла с авторизованным ключом из шага 2.
-
Создайте хранилище секретов SecretStore, содержащее секрет
sa-creds
:1kubectl -n external-secrets apply -f - <<< ' 2apiVersion: external-secrets.io/v1alpha1 3kind: SecretStore 4metadata: 5 name: secret-store 6spec: 7 provider: 8 yandexlockbox: 9 auth: 10 authorizedKeySecretRef: 11 name: sa-creds 12 key: key'
Где:
sa-creds
— названиеSecret
, содержащий авторизованный ключ. Этот секрет должен появиться после установки Helm-чарта.key
— название ключа в поле.data
секрета выше.
Проверка работоспособности
-
Проверьте статус External Secrets Operator и созданного хранилища секретов:
1$ kubectl -n external-secrets get po 2NAME READY STATUS RESTARTS AGE 3external-secrets-55f78c44cf-dbf6q 1/1 Running 0 77m 4external-secrets-cert-controller-78cbc7d9c8-rszhx 1/1 Running 0 77m 5external-secrets-webhook-6d7b66758-s7v9c 1/1 Running 0 77m 6$ kubectl -n external-secrets get secretstores.external-secrets.io 7NAME AGE STATUS 8secret-store 69m Valid
-
Создайте секрет Yandex Lockbox со следующими параметрами:
- Имя —
lockbox-secret
. - Ключ — введите неконфиденциальный идентификатор
password
. - Значение — введите конфиденциальные данные для хранения
p@$$w0rd
.
- Имя —
-
Создайте объект ExternalSecret, указывающий на секрет
lockbox-secret
в хранилищеsecret-store
:1kubectl -n external-secrets apply -f - <<< ' 2apiVersion: external-secrets.io/v1alpha1 3kind: ExternalSecret 4metadata: 5 name: external-secret 6spec: 7 refreshInterval: 1h 8 secretStoreRef: 9 name: secret-store 10 kind: SecretStore 11 target: 12 name: k8s-secret 13 data: 14 - secretKey: password 15 remoteRef: 16 key: <ИДЕНТИФИКАТОР_СЕКРЕТА> 17 property: password'
Где:
spec.target.name
— имя нового секрета. External Secret Operator создаст этот секрет в кластере Deckhouse Kubernetes Platform и поместит в него параметры секрета Yandex Lockboxlockbox-secret
.spec.data[].secretKey
— название ключа в поле.data
секрета, который создаст External Secret Operator.spec.data[].remoteRef.key
— идентификатор созданного ранее секрета Yandex Lockboxlockbox-secret
. Например,e6q28nvfmhu539******
.spec.data[].remoteRef.property
— ключ, указанный ранее, для секрета Yandex Lockboxlockbox-secret
.
-
Убедитесь, что новый ключ
k8s-secret
содержит значение секретаlockbox-secret
:1kubectl -n external-secrets get secret k8s-secret -ojson | jq -r '.data.password' | base64 -d
В выводе команды будет содержаться значение ключа
password
секретаlockbox-secret
, созданного ранее:1p@$$w0rd
Интеграция с Yandex Managed Service for Prometheus
С помощью данной интеграции вы можете использовать Yandex Managed Service for Prometheus в качестве внешнего хранилища метрик, например, для долгосрочного хранения.
Запись метрик
- Создайте сервисный аккаунт с ролью
monitoring.editor
. - Создайте API-ключ для сервисного аккаунта.
-
Создайте ресурс
PrometheusRemoteWrite
:1kubectl apply -f - <<< ' 2apiVersion: deckhouse.io/v1 3kind: PrometheusRemoteWrite 4metadata: 5 name: yc-remote-write 6spec: 7 url: <URL_ЗАПИСИ_МЕТРИК> 8 bearerToken: <API_КЛЮЧ> 9'
Где:
<URL_ЗАПИСИ_МЕТРИК>
— URL со страницы Yandex Monitoring/Prometheus/Запись метрик.<API_КЛЮЧ>
— API-ключ, созданный на предыдущем шаге. Например,AQVN1HHJReSrfo9jU3aopsXrJyfq_UHs********
.
Также вы можете указать дополнительные параметры в соответствии с документацией.
Подробнее с данной функциональностью можно ознакомиться в документации Yandex Cloud.
Чтение метрик через Grafana
- Создайте сервисный аккаунт с ролью
monitoring.viewer
. - Создайте API-ключ для сервисного аккаунта.
-
Создайте ресурс
GrafanaAdditionalDatasource
:1kubectl apply -f - <<< ' 2apiVersion: deckhouse.io/v1 3kind: GrafanaAdditionalDatasource 4metadata: 5 name: managed-prometheus 6spec: 7 type: prometheus 8 access: Proxy 9 url: <URL_ЧТЕНИЕ_МЕТРИК_ЧЕРЕЗ_GRAFANA> 10 basicAuth: false 11 jsonData: 12 timeInterval: 30s 13 httpMethod: POST 14 httpHeaderName1: Authorization 15 secureJsonData: 16 httpHeaderValue1: Bearer <API_КЛЮЧ> 17'
Где:
<URL_ЧТЕНИЕ_МЕТРИК_ЧЕРЕЗ_GRAFANA>
— URL со страницы Yandex Monitoring/Prometheus/Чтение метрик через Grafana.<API_КЛЮЧ>
— API-ключ, созданный на предыдущем шаге. Например,AQVN1HHJReSrfo9jU3aopsXrJyfq_UHs********
.
Также вы можете указать дополнительные параметры в соответствии с документацией.
Подробнее с данной функциональностью можно ознакомиться в документации Yandex Cloud.