1. Встановлюємо 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
  1. Створюємо 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
  1. Створюємо 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
  1. Розгортаємо маніфести у Flux і перевіряємо працездатність розгортання:
k get po -A
  1. Створюємо публічний ключ для шифрування секрету:
kubeseal --fetch-cert \
--controller-name=sealed-secrets-controller \
--controller-namespace=flux-system \
> pub-sealed-secrets.pem
  1. Створюємо 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
  1. Шифруємо наш токен за допомогою публічного ключа:
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
  1. Розміщуємо маніфест у репозиторії Flux та через декілька хвилин перевіряємо наявність потрібного секрету:
k get secrets -A