SOPS
SOPS jest narzędziem, które wykorzystuję do szyfrowania secretów Kubernetes. Potrafi wykonać szyfrowanie w oparciu o mechanizmy dostarczane przez chmury publiczne oraz lokalne narzędzia takie jak PGP oraz Age.
Instalacja
SOPS Install
Jeśli mamy inny system operacyjny niż linux oraz inną architekturę procesora trzeba pobrać curlem odpowiedni link ze strony https://github.com/getsops/sops/releases
curl -LO https://github.com/getsops/sops/releases/download/v3.9.0/sops-v3.9.0.linux.amd64
sudo mv sops-v3.9.0.linux.amd64 /usr/local/bin/sops
sudo chmod +x /usr/local/bin/sops# MacOSX
brew install age
# Linux
sudo apt install age
# Windows
choco install age.portableInstalacja klucza age
age-keygen -o age.agekey
cat age.agekey |
kubectl create secret generic sops-age \
--namespace=flux-system \
--from-file=age.agekey=/dev/stdinKonfiguracja w repozytorium
Klucz age zawiera string będący kluczem publicznym age. Można go odczytać z utworzonego wcześniej secretu
{
"age.agekey": "# created: 2026-06-25T22:40:53+02:00\n# public key: agexxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\nAGE-SECRET-KEY-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxZ\n"
}W głównym katalogu repozytorium należy utworzyć plik .sops.yaml wykorzystując pozyskany we wcześniejszym kroku klucz publiczny.
creation_rules:
- encrypted_regex: "^(data|stringData)$"
age: agexxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxKonfigurację pliku clusters/raspberry/apps.yaml wzbogacamy o konfigurację dekrypcji
---
apiVersion: kustomize.toolkit.fluxcd.io/v1beta2
kind: Kustomization
metadata:
name: apps-cl2
namespace: flux-system
spec:
interval: 1m0s
sourceRef:
kind: GitRepository
name: flux-system
decryption:
provider: sops
secretRef:
name: sops-age
path: ./apps-raspberry
prune: true
wait: true
timeout: 1m0sSzyfrowanie secretów
W repozytorium klastra przyjęta została zasada, że pliki z secretami mają nazwę pasującą do wzorca: *-secrets-clear.yaml oraz *-secrets-enc.yaml. Te z clear w nazwie pliku nie są publikowane w repozytorium.
apiVersion: v1
kind: Secret
metadata:
name: app-secret
namespace: default
type: Opaque
data:
secret_password: U3VwZXJTZWNyZXRQYXNzd29yZA==.gitignore
Koniecznie należy zaktualizować plik .gitignore aby przypadkowo nie ujawnić żadnych secretów. Wystarczy wpis: **/*-secrets-clear.yaml
Aby zaszyfrować dany secret, należy wejść do katalogu z manifestem secretu i wykonać polecenie:
sops -e app-secrets-clear.yaml | tee app-secrets-enc.yamlSpowoduje to utworzenie pliku app-secrets-enc.yaml, który jest zaszyfrowany z użyciem Age. Tak przygotowany plik można opublikować w repozytorium klastra. Zostanie on automatycznie wdrożony przez fluxa.
