В Deckhouse Platform порядок загрузки плагинов отличается от Standalone-установки: администратор не копирует бинарные файлы на сервер вручную, а описывает список плагинов в ModuleConfig.
После этого платформа:
- скачивает плагины по указанным URL;
- проверяет их контрольные суммы;
- помещает плагины в контейнер Stronghold;
- перезапускает Stronghold при изменении списка плагинов.
После загрузки плагин всё равно нужно зарегистрировать в Stronghold и затем включить по нужному пути.
Настройка списка плагинов
Список загружаемых плагинов задаётся в ModuleConfig.
Пример:
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: stronghold
spec:
enabled: true
version: 1
settings:
plugins:
- name: "vault-plugin-secrets-github"
url: "https://github.com/martinbaillie/vault-plugin-secrets-github/releases/download/v2.3.2/vault-plugin-secrets-github-linux-amd64"
sha256: "72cb1f2775ee2abf12ffb725e469d0377fe7bbb93cd7aaa6921c141eddecab87"
- name: "vault-plugin-auth-any"
url: "https://plugins.example.local/myplugins/vault-plugin-auth-any-linux-amd64"
sha256: "c943b505b39b53e1f4cb07f2a3455b59eac523ebf600cb04813b9ad28a848b21"
ignoreFailure: true
insecureSkipVerify: false
ca: |
-----BEGIN CERTIFICATE-----
MIIDDTCCAfWgAwIBAgIJAOb7PcmW8W9MMA0GCSqGSIb3DQEBCwUAMBQxEjAQBgNV
BAMTCWxvY2FsaG9zdDAeFw0yNjA1MjAwMDAwMDBaFw0yNjA2MjAwMDAwMDBaMBQx
EjAQBgNVBAMTCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
ggEBAKHh4g5i1R+3+9XdG0RFLiX1x5T2PvQ92E/78vR6+Bn09+G0P+C6143+wLn
j96/E8rHbHr4R6L0f62/OJZh8JnZ/qRqE1N8oNc06Vh9Y7X8EzF4nZ4KgX/3y6L
vXD251Qm7g==
-----END CERTIFICATE-----Параметры загрузки
Каждый плагин в списке загрузки описывается следующими параметрами:
name— имя бинарного файла плагина;url— URL, откуда нужно скачать плагин. Последний сегмент URL (имя файла) не должен содержать точек, поэтому не включайте в него версию (например,vault-plugin-auth-any-linux-amd64): передавайте её флагом-versionпри регистрации плагина;sha256— SHA256 контрольная сумма плагина;ignoreFailure— разрешает продолжить запуск Stronghold, даже если данный плагин не удалось скачать;insecureSkipVerify— отключает проверку TLS-сертификата удалённого сервера;ca— CA-сертификат в формате PEM для проверки TLS-соединения. Это единственный доверенный CA для URL этого плагина: системные CA не используются.
Что происходит при обновлении списка плагинов
Добавление или удаление плагинов вызывает перезапуск Stronghold.
Если плагин не удаётся скачать или провалидировать:
- перезапуск Stronghold блокируется;
- исключение составляют плагины с
ignoreFailure: true; - если не проходит проверка контрольной суммы, плагин считается не загруженным и удаляется.
Закрытые контуры
В закрытых контурах, где у Stronghold нет доступа во внешний интернет, плагин можно разместить внутри самого кластера Deckhouse Platform.
Один из практических вариантов:
- Подготовить контейнер с
nginx, в который помещён бинарный файл плагина. - Запустить этот контейнер в Kubernetes.
- Создать внутренний
Service, который публикуетnginxвнутри кластера. - Указать в
ModuleConfigURL видаhttp://<SERVICE>.<NAMESPACE>.svc.cluster.local/..., чтобы платформа скачивала плагин через внутренний Kubernetes-сервис.
Пример фрагмента ModuleConfig:
spec:
settings:
plugins:
- name: "vault-plugin-auth-any"
url: "http://plugin-repo.plugins.svc.cluster.local/vault-plugin-auth-any"
sha256: "c943b505b39b53e1f4cb07f2a3455b59eac523ebf600cb04813b9ad28a848b21"Такой подход позволяет:
- не открывать исходящий доступ в интернет;
- хранить плагины внутри внутреннего контура;
- централизованно управлять версиями плагинов через внутренний сервис.
Регистрация плагина
После доставки плагина в контейнер его нужно зарегистрировать через CLI:
- Stronghold в Deckhouse Platform
- Stronghold в Linux
PLUGIN_SHA=$(sha256sum <PLUGIN_BINARY> | awk '{print $1;}')
d8 stronghold plugin register -command <PLUGIN_COMMAND> -sha256 "${PLUGIN_SHA}" -version "<PLUGIN_VERSION>" <PLUGIN_TYPE> <PLUGIN_NAME>PLUGIN_SHA=$(sha256sum <PLUGIN_BINARY> | awk '{print $1;}')
stronghold plugin register -command <PLUGIN_COMMAND> -sha256 "${PLUGIN_SHA}" -version "<PLUGIN_VERSION>" <PLUGIN_TYPE> <PLUGIN_NAME>В командах:
<PLUGIN_BINARY>— путь к бинарному файлу плагина;<PLUGIN_COMMAND>— команда запуска бинарного файла плагина;<PLUGIN_VERSION>— семантическая версия плагина, напримерv1.0.1;<PLUGIN_TYPE>— тип плагина:secret,authилиdatabase;<PLUGIN_NAME>— имя, под которым регистрируется плагин.
Пример регистрации secret-плагина mykv:
- Stronghold в Deckhouse Platform
- Stronghold в Linux
d8 stronghold plugin register -command mykvplugin -sha256 "${PLUGIN_SHA}" -version "v1.0.1" secret mykvstronghold plugin register -command mykvplugin -sha256 "${PLUGIN_SHA}" -version "v1.0.1" secret mykvВключение плагина
После регистрации плагин можно включить как secret или auth engine:
- Stronghold в Deckhouse Platform
- Stronghold в Linux
d8 stronghold <secrets|auth> enable -path <MOUNT_PATH> <PLUGIN_NAME>stronghold <secrets|auth> enable -path <MOUNT_PATH> <PLUGIN_NAME>Пояснение:
secrets— для плагинов типаsecret;auth— для плагинов аутентификации;-path— путь монтирования;<PLUGIN_NAME>— имя, под которым плагин зарегистрирован.
Пример:
- Stronghold в Deckhouse Platform
- Stronghold в Linux
d8 stronghold secrets enable -path test-kv mykvstronghold secrets enable -path test-kv mykvОтключение и удаление плагина
Чтобы отключить и удалить плагин, выполните следующие шаги:
- Отключите все
secretиauthметоды, использующие плагин. - Снимите плагин с регистрации:
- Stronghold в Deckhouse Platform
- Stronghold в Linux
d8 stronghold plugin deregister secret my-custom-pluginstronghold plugin deregister secret my-custom-plugin- Удалите плагин из конфигурации
ModuleConfig.
Практические рекомендации
При использовании плагинов в Deckhouse Platform следуйте этим правилам:
- Для production используйте внутренний репозиторий плагинов или доверенный артефактный storage.
- Всегда задавайте
sha256и проверяйте, что он соответствует реальному бинарному файлу. - Используйте
ignoreFailureтолько для необязательных плагинов. - Помните, что изменение списка плагинов приводит к перезапуску Stronghold.