- Встановлюємо Sealed Secrets:
KUBESEAL_VERSION='0.25.0' # Set this to, for example, KUBESEAL_VERSION='0.23.0'
wget "https://github.com/bitnami-labs/sealed-secrets/releases/download/v${KUBESEAL_VERSION:?}/kubeseal-${KUBESEAL_VERSION:?}-linux-amd64.tar.gz"
tar -xvzf kubeseal-${KUBESEAL_VERSION:?}-linux-amd64.tar.gz kubeseal
sudo install -m 755 kubeseal /usr/local/bin/kubeseal
- Створюємо HelmRepository для Sealed Secrets:
flux create source helm sealed-secrets \
--url https://bitnami-labs.github.io/sealed-secrets \
--export > sealed-secrets-repo.yaml
Отримуємо маніфест:
---
apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: HelmRepository
metadata:
name: sealed-secrets
namespace: flux-system
spec:
interval: 1m0s
url: https://bitnami-labs.github.io/sealed-secrets
- Створюємо HelmRelease для Sealed Secrets:
flux create helmrelease sealed-secrets \
--chart sealed-secrets \
--source HelmRepository/sealed-secrets \
--target-namespace flux-system \
--release-name sealed-secrets-controller \
--crds CreateReplace \
--chart-version ">=1.15.0-0" \
--export > sealed-secrets-helmrelease.yaml
Отримуємо маніфест:
---
apiVersion: helm.toolkit.fluxcd.io/v2beta2
kind: HelmRelease
metadata:
name: sealed-secrets
namespace: flux-system
spec:
chart:
spec:
chart: sealed-secrets
reconcileStrategy: ChartVersion
sourceRef:
kind: HelmRepository
name: sealed-secrets
version: '>=1.15.0-0'
install:
crds: Create
interval: 1m0s
releaseName: sealed-secrets-controller
targetNamespace: flux-system
upgrade:
crds: CreateReplace
- Розгортаємо маніфести у Flux і перевіряємо працездатність розгортання:
k get po -A
- Створюємо публічний ключ для шифрування секрету:
kubeseal --fetch-cert \
--controller-name=sealed-secrets-controller \
--controller-namespace=flux-system \
> pub-sealed-secrets.pem
- Створюємо Secret маніфест (на прикладі боту і токена для нього):
read -s TELE_TOKEN
k -n kbot create secret generic kbot \
--dry-run=client \
--from-literal=token=$TELE_TOKEN \
-o yaml > secret.yaml
Отримуємо маніфест з токеном:
apiVersion: v1
data:
token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
kind: Secret
metadata:
creationTimestamp: null
name: kbot
namespace: kbot
- Шифруємо наш токен за допомогою публічного ключа:
kubeseal --format=yaml \
--cert=pub-sealed-secrets.pem \
< secret.yaml > secret-sealed.yaml
rm secret.yaml
Отримуємо маніфест з зашифрованим токеном:
---
apiVersion: bitnami.com/v1alpha1
kind: SealedSecret
metadata:
creationTimestamp: null
name: kbot
namespace: kbot
spec:
encryptedData:
token: AgCRaiMVEYlfHmvMGNkqiLGTf7bRBV1iFzpjrA5GvXWT0EKgVxMORcN6XMmsKChdw8q6af6D/SylMzGuBHTCuvrD7ONfUJQlL4xXubjyqHUU+Vkz369BGro7xLCb0yCjH8yQOXibR4K5RWo45igx83eFCgNEUvEh2xjfiE467PZ9caYO/8QFn4Rygotaryqa5OUM+iv1hMSOFCyP2Aa/9RrRijyjFXuJ+uz5QOzMqNAH2VfVQDkfme7WubmiE6Zp1t0t9C3lvdGLvUv1YCkb3GOsB9LgSV485EUURAC+GFAbx/+SkvITP0Iqv5Zp7LzpffVlvj5ZLjR4DqrQ3lTanyFnfy4fjPVf16jbiXkV158hRgS4A+WAVP3DVg69cgVN1pae2Txn2An8ruZoOha8lSFnrBtzzKYnNJjs3qmckDgOQDMvO/MNpE4ZXk8RlJZ1GXDHAkiWGbCJwTdQ+LQ+Vk5HaE9OhGlgPkAdCxSKQpjhS+KCC8hyP3F2mQgi6mb9ZZelp/4gAPtAcM79dI1AazdhFllbDhX8I7UiO3o04j7XHi9CNUl7kqYKOn4wJ1u0zOAqIFs6NBvkgeJCwhzmqdCidZfwRg0TSH/QmoC2Ih4UNmnkCHbVZNiYn2x+o61CxkUQ0NU5Yc/Z948FJW0dMZrHB5t35e4IC+xy8wIg4JIzMxVCk3lavCrkU/G/1ehjrym9ccUV+bUPnbkWjCnSz30XNPAFObdjKWumdrPJGCSbHcead2Ne4Tw9ihh6+s9K
template:
metadata:
creationTimestamp: null
name: kbot
namespace: kbot
- Розміщуємо маніфест у репозиторії Flux та через декілька хвилин перевіряємо наявність потрібного секрету:
k get secrets -A