Skip to content

Vortrag

Grundlagen

Secrets in Vanilla Kubernetes

Die Ressource Secret ist eine Kubernetes Native Ressource.
Die sensiblen Daten der Secrets werden mit base64 kodiert.
Diese Daten liegen dann mit anderen State Daten von Kubernetes in der ETCD Datenbank.

Wieso Secrets extern Speichern?

Alle Secrets an einem Ort und nicht verteilt überall da wo sie gebraucht werden (CI/CD Pipeline, Kubernetes Cluster, Lokal)

Optionen

Secrets Store CSI Drivers (CSI based)

  • Secrets können als File oder als ENV Variable in Workload bereitgestellt werden
  • Sync der Secrets aus Key Vault zu K8S Secrets kann aktiviert werden
  • Secrets können in Kubernetes als Objekt gespeichert werden, müssen aber nicht wenn z.B. File-Read ausreicht

External Secrets Operator / ESO (Operator based)

  • CRD SecretStore -> CRD External Secret -> Creates Secret
  • Bitwarden Support und viele andere
  • Releases sind aktuell pausiert, da nicht genug Mainter an Board sind

AKV2K8S Projekt (Operator / Sidecar Based)

  • hat 2 Modi: Env Injektion oder Controller
  • Env Injector stellt keine Secrets bereits sondern bringt die Secrets direkt als Envs in den POD
  • Mehr Ressourcenverbrauch, wenn man mit vielen Pods arbeitet
  • Update mit z.B. Reloader wird schwierig, da kein Secret oder ConfigMap von ihm überwacht werden kann
  • Sehr sicher - ist nirgendwo im Pod Spec, Logs oder sonstiges erwähnt - kann dann nur von der App oder durch Shell Zugriff abgerufen werden

Wieso Reloader

Unsere Kubernetes Secrets werden mit der Implementierung von Azure im Standard alle 2 Minunten von der Key Vault in das Kubernetes Secret synchronisiert. Dadurch bekommen aber unsere Workloads nichts davon mit, sofern sie ENV Variablen verwenden. Secrets die über das File-System bezogen werden, sind immer aktuell. Sie müssen nur erneut eingelesen werden.

Für dieses Problem gibt es den Reloader, dieser veranlasst einen Reload des Workloads, z.B. des Deployments, je nachdem welche Update Strategy im Manifest definiert ist. Dafür müssen wir nur den Reloader im Cluster ausrollen und dem Workload eine Annotation mitgeben.


Demo

Architektur Beispiel aus meinem Blog: Link


Hinweise

Die ETCD Datenbank sollte verschlüsselt werden, wenn darin Secrets gespeichert werden. In Azure geht das mit einer Integration in die Key Vault: https://learn.microsoft.com/en-us/azure/aks/use-kms-etcd-encryption


References

Hilfereicher Blog SVA Präsentation SVA Code Examples