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