因為 GitOps 需要將所有的 config(yaml) 包含 secret 都存在 Git 上,Kubernetes Secret 基本上也算是明文,為了更完善 GitOps,我們必須加密 secrets,再推上 Git Repo。
在本地端加密 secrets.yaml,透過 sealed-secrets 解密,還原 kubernetes secrets。
release=$(curl --silent "https://api.github.com/repos/bitnami-labs/sealed-secrets/releases/latest" | sed -n 's/.*"tag_name": *"\([^"]*\)".*/\1/p') |
Create secret.yaml
:
apiVersion: v1 |
Encrypt secret.yaml
:
kubeseal <secret.yaml >encrypted.yaml --format yaml |
產生 SealedSecret CRD encrypted.yaml
:
apiVersion: bitnami.com/v1alpha1 |
Apply encrypted.yaml
:
kubectl apply -f encrypted.yaml |
Get mysecret
:
sealedsecret.bitnami.com/mysecret created |
結論
所以我們只要把 encrypted.yaml
推上我們的 Git Repo,讓 GitOps 工具(Argo, Flux, …)自動部署到 cluster,sealed-secrets Controller 將會解密成 Kubernetes secret。
記住,不要把未加密的
secret.yaml
傳到 Git!好好的保留在本機就好。
Other Choices
Reference
https://github.com/argoproj/argo-cd/issues/1364
https://www.weave.works/blog/storing-secure-sealed-secrets-using-gitops