[Video Course][Siddharth Barahalikar] FluxCD 101 with Hands-On Labs [ENG, 2023][~5h 45m]


Mozilla SOPS


06. DEMO - Mozilla SOPS - Admin

Настраивается админом


$ cd ~/projects/dev/fluxcd/bb-app-source/infrastructure/


$ gpg --batch --full-generate-key <<EOF
%no-protection
Key-Type: 1
Key-Length: 3072
Subkey-Type: 1
Subkey-Length: 3072
Expire-Date: 0
Name-Comment: k8s
Name-Real: dev.us-e1.k8s
Name-Email: [email protected]
EOF


gpg: key 19E6D3BCD21F8CCF marked as ultimately trusted
gpg: directory '/home/marley/.gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/home/marley/.gnupg/openpgp-revocs.d/F4CAF8D8C08255FA4125215E19E6D3BCD21F8CCF.rev'


$ gpg --list-public-keys
$ gpg --list-secret-keys


// 19E6D3BCD21F8CCF при генерации в output
$ gpg --export-secret-keys --armor 19E6D3BCD21F8CCF


$ cd ~/projects/dev/fluxcd/bb-app-source/infrastructure/
$ mkdir sops
$ cd sops
$ gpg --export-secret-keys --armor 19E6D3BCD21F8CCF > sops-gpg.key
$ gpg --export --armor 19E6D3BCD21F8CCF > sops-gpg.pub


$ kubectl -n flux-system create secret generic sops-gpg --from-file=sops.asc=sops-gpg.key


$ rm sops-gpg.key


$ gpg --delete-secret-and-public-keys 19E6D3BCD21F8CCF


commit / push


07. DEMO - Mozilla SOPS - Developer

Настраивается девелопером. Вроде как админ сгенерил, удалил у себя а девелоперу передал pubic key.


$ cd ~/projects/dev/fluxcd/bb-app-source/infrastructure/database
$ rm sealed-secret-mysql.yaml


$ vi secret-mysql.yaml


apiVersion: v1
kind: Secret
metadata:
  name: secret-mysql
  namespace: database
stringData:
  password: mysql-password-0123456789


$ gpg --import sops/sops-gpg.pub


$ gpg --list-public-keys 19E6D3BCD21F8CCF


Устанавливаем sops


https://github.com/mozilla/sops/releases


$ cd ~/tmp
$ wget https://github.com/mozilla/sops/releases/download/v3.7.3/sops-v3.7.3.linux.amd64
$ chmod +x sops-v3.7.3.linux.amd64
$ sudo mv sops-v3.7.3.linux.amd64 /usr/bin/sops


$ cd ~/projects/dev/fluxcd/bb-app-source/infrastructure/database
$ sops --encrypt \
  --encrypted-regex="^(data|stringData)$" \
  --pgp 19E6D3BCD21F8CCF \
  --in-place secret-mysql.yaml


$ kubectl -n database get secrets
NAME           TYPE     DATA   AGE
secret-mysql   Opaque   1      146m


$ flux reconcile source git infra-source-git
$ flux reconcile kustomization infra-database-kustomize-git-mysql
$ flux resume kustomization infra-database-kustomize-git-mysql


// Должен обновиться, но у меня нет
$ kubectl -n database get secrets


$ kubectl -n database get secrets secret-mysql -o json | jq .data.password -r | base64 -d


$ kubectl -n flux-system get secrets sops-gpg
NAME       TYPE     DATA   AGE
sops-gpg   Opaque   1      42m


$ vi infra-database-kustomize-git-mysql.yml

Добавить на уровне targetNamespace: database

decription:
  provider: sops
  secretRef:
    name: sops-gpg


commit / push


$ flux reconcile source git flux-system
$ flux reconcile kustomization infra-database-kustomize-git-mysql


$ kubectl -n flux-system get secrets


// Д.б. понятный пароль из-за того, что добавили блок decription
$ kubectl -n database get secrets secret-mysql -o json | jq .data.password -r | base64 -d