Sealed Secrets Web — веб-интерфейс для Sealed Secrets от Bitnami.
Sealed Secrets Web — веб-интерфейс для Sealed Secrets от Bitnami. Он позволяет кодировать и декодировать ключи в поле data секрета, загружать существующие Sealed Secrets и создавать новые. Под капотом инструмент использует API сервиса Sealed Secrets для шифрования секретов. Веб-интерфейс устанавливается прямо в кластер Kubernetes, чтобы разработчикам не требовался прямой доступ к кластеру через kubectl.
-
Encode (кодирование): кодирует в Base64 каждый ключ из поля
stringDataсекрета. -
Decode (декодирование): декодирует из Base64 каждый ключ из поля
dataсекрета. -
Secrets (секреты): возвращает список всех Sealed Secrets во всех пространствах имён. По клику на Sealed Secret загружается расшифрованный секрет Kubernetes.
-
Seal (запечатать): шифрует секрет Kubernetes и создаёт соответствующий Sealed Secret.
-
Validate (проверить): проверяет корректность Sealed Secret.
Установка
sealed-secrets-web устанавливается через Helm-чарт:
helm repo add bakito https://charts.bakito.net
helm repo update
helm upgrade --install sealed-secrets-web bakito/sealed-secrets-web
Параметры Sealed Secrets можно изменить, передав нужные аргументы через флаг --set. Например, задать другое имя controller-name при установке можно следующей командой:
helm upgrade --install sealed-secrets-web bakito/sealed-secrets-web \
--set sealedSecrets.namespace=sealed-secrets \
--set sealedSecrets.serviceName=sealed-secrets
Если нужно отключить возможность загружать существующие секреты и использовать инструмент исключительно для запечатывания новых, используйте:
helm upgrade --install sealed-secrets-web bakito/sealed-secrets-web \
--set disableLoadSecrets=true
Чтобы отрендерить шаблоны локально:
cd chart
helm template . -f values.yaml
Все доступные значения Helm можно посмотреть по адресу https://github.com/bakito/sealed-secrets-web/blob/main/chart/values.yaml, а параметры приложения — по адресу https://github.com/bakito/sealed-secrets-web/blob/main/pkg/config/types.go#L14-L22.
Использование API
Получение текущего сертификата
curl --request GET 'https://<SEALED_SECRETS_WEB_BASE_URL>/api/certificate'
Запечатывание секрета с помощью серверного сертификата
Вывод запечатанного секрета в формате YAML
curl --request POST 'https://<SEALED_SECRETS_WEB_BASE_URL>/api/kubeseal' \
--header 'Accept: application/yaml' \
--data-binary '@stringData.yaml'
Вывод запечатанного секрета в формате JSON
curl --request POST 'https://<SEALED_SECRETS_WEB_BASE_URL>/api/kubeseal' \
--header 'Accept: application/json' \
--data-binary '@stringData.yaml'
Запечатывание одного значения со стандартной областью видимости (scope)
curl -request POST 'https://<SEALED_SECRETS_WEB_BASE_URL>/api/raw' \
--header 'Content-Type: application/json' \
--data '{ "name": "mysecretname", "namespace": "mysecretnamespace", "value": "value to seal" }'
Проверка запечатанного секрета
|
Примечание
|
Проверка (Validate) доступна только при использовании внутреннего API кластера (то есть когда certURL не задан) — см. bitnami-labs/sealed-secrets.
|
curl --request POST 'https://<SEALED_SECRETS_WEB_BASE_URL>/api/validate' \
--header 'Accept: application/yaml' \
--data-binary '@stringData.yaml'
Разработка
Для локальной разработки используется кластер Kubernetes, поднятый с помощью kind. После создания кластера Sealed Secrets устанавливается через Helm:
./run_local.sh
Интерфейс будет доступен по адресу http://localhost/ssw.
Traefik
Этот раздел посвящён использованию sealed-secrets-web совместно с Ingress-контроллером Traefik.
По умолчанию Traefik не удаляет префикс пути при проксировании запросов к приложению. Если задан путь localhost/seal, Traefik передаст запрос приложению как /seal, а не /.
Чтобы настроить Traefik правильно, примените следующий ресурс:
$ cat << EOF > traefik-strip-prefix-middleware.yaml
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: strip-prefix
namespace: kube-system # может быть любым, но требует аннотации ingress.metadata.annotations spec: traefik.ingress.kubernetes.io/router.middlewares: namespace-strip-prefix@kubernetescrd
spec:
stripPrefixRegex:
regex:
- ^/[^/]+
EOF
$ kubectl apply -f traefik-strip-prefix-middleware.yaml
Затем в файле values.yaml адаптируйте следующие параметры под свой хост:
ingress:
enabled: true
className: traefik
hosts:
- host: your.host
paths:
- path: /seal
pathType: ImplementationSpecific
annotations:
traefik.ingress.kubernetes.io/router.middlewares: kube-system-strip-prefix@kubernetescrd
sealedSecrets:
certURL: https://your.host/v1/cert.pem
webLogs: true
webContext: /seal