Zum Inhalt

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

  1. Automatische Generierung nutzen - Lassen Sie Passwörter generieren statt sie hardcoded einzutragen
  2. Separate Secrets pro Service - Isolieren Sie Credentials für bessere Sicherheit
  3. Namespace-Isolation - Erstellen Sie Secrets im Namespace der nutzenden Anwendung
  4. Keine Secrets in Git - Verwenden Sie Helm Values mit --set oder externe Secret-Manager
  5. 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

Siehe auch