[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