Secret und Config Management

In diesem Abschnitt wird beschrieben, wie sensible Informationen (Secrets) und Konfigurationsdaten (ConfigMaps) in Kubernetes verwaltet werden und in der Applikation zur Anwendung kommen.


Warum Secret und Config Management?

Das Secret und Config Management ist essenziell, um sensible Daten wie API-Schlüssel, Passwörter und Konfigurationsdaten sicher und zentralisiert zu verwalten. In Kubernetes werden Secrets und ConfigMaps verwendet, um diese Daten bereitzustellen.


Kubernetes Secrets

Kubernetes bietet eine native Unterstützung für Secrets. Diese werden in Base64-kodierter Form gespeichert und können von Pods als Umgebungsvariablen oder Dateien verwendet werden.

Secret-Konfiguration:

Datei: backend-secret.yaml

apiVersion: v1
kind: Secret
metadata:
  name: backend-secret
  namespace: eventgallery
type: Opaque
data:
  S3_KEY: <BASE64_ENCODED_ACCESS_KEY>
  S3_SECRET: <BASE64_ENCODED_SECRET_ACCESS_KEY>
  AWS_REKOGNITION_KEY: <BASE64_ENCODED_REKOGNITION_KEY>
  AWS_REKOGNITION_SECRET: <BASE64_ENCODED_REKOGNITION_SECRET>
  DB_PASSWORD: <BASE64_ENCODED_DATABASE_PASSWORD>

Dieses Secret wird in der Applikation verwendet, um Verbindungen zu den entsprechenden Diensten wie S3, Rekognition und der Datenbank herzustellen.


Kubernetes ConfigMaps

ConfigMaps dienen dazu, Konfigurationsdaten wie Umgebungsvariablen oder Verbindungsinformationen bereitzustellen. Sie sind nicht verschlüsselt und für Daten gedacht, die nicht sensibel sind.

ConfigMap-Konfiguration:

Datei: backend-config.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: backend-config
  namespace: eventgallery
data:
  DATABASE_URI: "mysql+pymysql://root:root@eventgallery-db:3306/eventgallery"
  AWS_REGION: "eu-central-1"
  S3_BUCKET: "msvc-gallery"

Die ConfigMap wird in der Applikation genutzt, um Umgebungsvariablen wie die Datenbank-URI oder die AWS-Region bereitzustellen.


Verwendung in Pods

Secrets als Umgebungsvariablen einbinden:

Secrets werden in Pods als Umgebungsvariablen eingebunden, um sie sicher an Anwendungen weiterzugeben.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend
  namespace: eventgallery
spec:
  replicas: 2
  template:
    spec:
      containers:
      - name: backend
        image: ghcr.io/noluchs/sem4-eventgallery/eventgallery-backend:latest
        env:
        - name: S3_KEY
          valueFrom:
            secretKeyRef:
              name: backend-secret
              key: S3_KEY
        - name: S3_SECRET
          valueFrom:
            secretKeyRef:
              name: backend-secret
              key: S3_SECRET

ConfigMaps einbinden:

ConfigMaps werden ebenfalls als Umgebungsvariablen eingebunden, um Konfigurationsdaten bereitzustellen.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend
  namespace: eventgallery
spec:
  replicas: 2
  template:
    spec:
      containers:
      - name: backend
        image: ghcr.io/noluchs/sem4-eventgallery/eventgallery-backend:latest
        envFrom:
        - configMapRef:
            name: backend-config