Kubeseal
Kubeseal is a Kubernetes controller and tool for one-way encrypted Secrets.
Getting Started
Installation
Client side
Use kubeseal.sh script.
Cluster side
Install SealedSecret CRD, server-side controller into kube-system namespace.
$ kubectl apply -f https://github.com/bitnami-labs/sealed-secrets/releases/download/$KUBESEAL_VERSION/controller.yaml
NOTE: If you can't (or don't want) to use the kube-system namespace, please consider this approach
NOTE: if you want to install it on a GKE cluster for which your user account doesn't have admin rights, please read this
NOTE: since the helm chart is currently maintained elsewhere (see https://github.com/helm/charts/tree/master/stable/sealed-secrets the update of the helm chart might not happen in sync with releases here.
Sealed Secrets
- create working directory
mkdir -p sealed-secrets
cd sealed-secrets
- create base directory
mkdir -p base
- create base/kustomization.yaml file
vi base/kustomization.yaml
- test kustomize
kustomize build base
- download sealed-secrets controller
export URL=https://github.com/bitnami-labs/sealed-secrets/releases/
export URL=${URL}/download/v0.14.1/controller.yaml
wget ${URL} -O base/controller.yaml
- check base/controller.yaml file
vi base/controller.yaml
kustomize build base
- update base/kustomization.yaml file
vi base/kustomization.yaml
kustomize build base
- apply kustomize output
kustomize build base | kubectl apply --filename -
- get pods
kubectl get all -n sealed secrets
kubectl get all -n sealed-secrets
kubectl get pod -n sealed secrets
- get ingress
kubectl get ingresses -A
kubectl -n sealed-secrets get ingresses
kubectl --namespace argo get ingresses
kubectl --namespace sealed-secrets get ingresses
- get namespaces
kubectl get namespaces
- create test-secrets namespace
kubectl create namespace test-secrets
- try to simulate create secret
kubectl --namespace test-secrets create secret generic mysecret \
--dry-run=client --from-literal foo=bar --output json
- pipe the simulation result to kubeseal
kubectl --namespace test-secrets create secret generic mysecret \
--dry-run=client --from-literal foo=bar --output json | kubeseal \
--controller-namespace=sealed-secrets
- pipe the simulation result to kubeseal with yaml format
kubectl --namespace test-secrets create secret generic mysecret \
--dry-run=client --from-literal foo=bar --output json | kubeseal \
--controller-namespace=sealed-secrets -o yaml
- pipe the kubeseal output to mysecret.yaml
kubectl --namespace test-secrets create secret generic mysecret \
--dry-run=client --from-literal foo=bar --output json | kubeseal \
--controller-namespace=sealed-secrets -o yaml | tee mysecret.yaml
- try to simulate to create resource using mysecret.yaml
kubectl create --filename mysecret.yaml --dry-run=client
- create resource using mysecret.yaml
kubectl create --filename mysecret.yaml
- get sealedsecrets resource
kubectl -n test-secrets get sealedsecrets.bitnami.com
- get sealedsecrets resource mysecret
kubectl -n test-secrets get sealedsecrets.bitnami.com mysecret
- output sealedsecrets resource mysecret in yaml format
kubectl -n test-secrets get sealedsecrets.bitnami.com mysecret -o yaml
- output sealedsecrets resource mysecret in json format
kubectl -n test-secrets get sealedsecrets.bitnami.com mysecret -o json
- get secrets resource
kubectl -n test-secrets get secrets
- output secrets resource mysecret in yaml format
kubectl -n test-secrets get secrets mysecret --output yaml
- output a value from secrets resource mysecret in jsonpath format
kubectl -n test-secrets get secrets mysecret \
--output jsonpath="{.data.foo}"
- decode base64 a value from secrets resource mysecret in jsonpath format
kubectl -n test-secrets get secrets mysecret \
--output jsonpath="{.data.foo}" | base64 --decode && echo
- fetch sealed-secrets controller certificate
kubeseal --controller-namespace=sealed-secrets --fetch-cert