Secrets¶
Der Secrets-Helper erstellt Kubernetes Secrets mit optionaler automatischer Passwort-Generierung.
Übersicht¶
Mit dem Secrets-Helper können Sie:
- Secrets mit vordefinierten Werten erstellen
- Passwörter automatisch generieren lassen
- Secrets in beliebigen Namespaces erstellen
- Mehrere Secrets auf einmal definieren
Basis-Konfiguration¶
secrets:
- name: database-credentials
namespace: production
values:
username: admin
password: "mein-sicheres-passwort"
Automatische Passwort-Generierung¶
Lassen Sie Werte leer, um automatisch sichere Passwörter zu generieren:
secrets:
- name: database-credentials
namespace: production
values:
username: admin
password: "" # Wird automatisch generiert
api-key: "" # Wird automatisch generiert
Generierte Passwörter
Automatisch generierte Passwörter sind kryptografisch sicher und bleiben bei helm upgrade erhalten.
Mehrere Secrets¶
secrets:
# Datenbank-Credentials
- name: postgres-credentials
namespace: production
values:
username: postgres
password: ""
# API-Keys
- name: api-keys
namespace: production
values:
stripe-secret: "sk_live_xxx"
sendgrid-key: "SG.xxx"
internal-api-key: "" # Auto-generiert
# JWT-Secret
- name: jwt-secret
namespace: production
values:
secret: "" # Auto-generiert
refresh-secret: "" # Auto-generiert
Mehrere Keys pro Secret¶
Ein Secret kann beliebig viele Key-Value-Paare enthalten:
secrets:
- name: app-secrets
namespace: production
values:
db-host: "postgres.production.svc.cluster.local"
db-port: "5432"
db-name: "myapp"
db-user: "app_user"
db-password: ""
redis-host: "redis.production.svc.cluster.local"
redis-password: ""
session-secret: ""
encryption-key: ""
Vollständiges Beispiel¶
Multi-Service Setup¶
# Chart.yaml
apiVersion: v2
name: my-stack
version: 1.0.0
dependencies:
- name: ohmyhelm
alias: secrets-helper
repository: https://gitlab.com/ayedocloudsolutions/ohmyhelm
version: 1.13.0
# values.yaml
secrets-helper:
secrets:
# PostgreSQL
- name: postgres-credentials
namespace: database
values:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: ""
POSTGRES_DB: production
# Redis
- name: redis-credentials
namespace: database
values:
REDIS_PASSWORD: ""
# Backend API
- name: backend-secrets
namespace: production
values:
DATABASE_URL: "postgres://postgres:$(POSTGRES_PASSWORD)@postgres:5432/production"
REDIS_URL: "redis://:$(REDIS_PASSWORD)@redis:6379"
JWT_SECRET: ""
SESSION_SECRET: ""
# Frontend
- name: frontend-secrets
namespace: production
values:
NEXT_PUBLIC_API_URL: "https://api.example.com"
ANALYTICS_KEY: "UA-XXXXX"
Secrets im Container verwenden¶
Als Umgebungsvariablen¶
# In Ihrem Deployment
env:
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: postgres-credentials
key: POSTGRES_PASSWORD
- name: JWT_SECRET
valueFrom:
secretKeyRef:
name: backend-secrets
key: JWT_SECRET
Als Volume¶
volumeMounts:
- name: secrets
mountPath: /etc/secrets
readOnly: true
volumes:
- name: secrets
secret:
secretName: backend-secrets
Mit anderen Helpern kombinieren¶
myapp:
# Zuerst Namespace erstellen
namespaces:
setPreInstallHook: true
spaces:
- name: production
# Dann Secrets
secrets:
- name: app-secrets
namespace: production
values:
api-key: ""
# Dann Deployment
chart:
enabled: true
fullnameOverride: "myapp"
container:
image: myapp:latest
env:
- name: API_KEY
valueFrom:
secretKeyRef:
name: app-secrets
key: api-key
Best Practices¶
- Automatische Generierung nutzen - Lassen Sie Passwörter generieren statt sie hardcoded einzutragen
- Separate Secrets pro Service - Isolieren Sie Credentials für bessere Sicherheit
- Namespace-Isolation - Erstellen Sie Secrets im Namespace der nutzenden Anwendung
- Keine Secrets in Git - Verwenden Sie Helm Values mit
--setoder externe Secret-Manager - Rotation planen - Implementieren Sie einen Prozess für regelmäßige Secret-Rotation
Externe Secret-Manager¶
Für Production-Umgebungen empfehlen wir externe Secret-Manager:
- External Secrets Operator - Synchronisiert Secrets aus AWS Secrets Manager, Vault, etc.
- Sealed Secrets - Verschlüsselte Secrets die in Git committed werden können
- Vault - HashiCorp Vault für Enterprise Secret Management