Docker-Images bauen und veroeffentlichen / build-and-push (push) Successful in 1m40s
Befunde des Commit-Security-Reviews behoben: - Klartextuebertragung: vers=3.1.1 mit "seal" (SMB3-Verschluesselung) fuer Medien- und Backup-Volume. - Rueckschritt Zugriffskontrolle: Backup-PV/PVC wieder ReadWriteOnce statt ReadWriteMany (nur der Backup-Job haengt es ein). - Zu weite Rechte: Medien-Volume nur lesbar (dir_mode 0550, file_mode 0440); geschrieben wird ausschliesslich ueber das NAS. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
83 lines
3.1 KiB
YAML
83 lines
3.1 KiB
YAML
# PersistentVolumes auf einer SMB-Freigabe (csi-driver-smb, smb.csi.k8s.io).
|
|
#
|
|
# VORAUSSETZUNG: csi-driver-smb im Cluster installiert, z. B.:
|
|
# helm repo add csi-driver-smb https://raw.githubusercontent.com/kubernetes-csi/csi-driver-smb/master/charts
|
|
# helm install csi-driver-smb csi-driver-smb/csi-driver-smb -n kube-system
|
|
# und das Zugangs-Secret "artista-modelcamp-smb" (k8s/secret.example.yaml).
|
|
#
|
|
# ANZUPASSEN: "source" (//<nas>/<freigabe>/<ordner>) je Volume. Die Ordner
|
|
# muessen auf der Freigabe bereits existieren.
|
|
#
|
|
# BEWUSST NICHT AUF SMB: das PostgreSQL-Datenverzeichnis. SMB bildet
|
|
# POSIX-Sperren, fsync-Garantien und Dateirechte nicht so ab, wie PostgreSQL
|
|
# sie fuer Absturzsicherheit braucht (Briefing §13). Die Datenbank bleibt auf
|
|
# Blockspeicher und wird taeglich per pg_dump auf das Backup-Volume unten
|
|
# gesichert — damit liegen die Geschaeftsdaten trotzdem auf dem NAS.
|
|
#
|
|
# Rechte: fsGroup wirkt auf SMB nicht. Besitz und Rechte setzen deshalb
|
|
# uid/gid/dir_mode/file_mode in den mountOptions (Muster aus Wabenhain).
|
|
# Aenderungen an mountOptions greifen erst beim naechsten Einhaengen.
|
|
# reclaimPolicy Retain: Loeschen von PVC/PV laesst die Dateien auf dem NAS.
|
|
|
|
# --- Medien (Bilder/Videos) ----------------------------------------------------
|
|
# Die App liest nur (readOnly-Mount). Neue Bilder legst du direkt ueber die
|
|
# SMB-Freigabe ab, z. B. vom Windows-Explorer aus.
|
|
apiVersion: v1
|
|
kind: PersistentVolume
|
|
metadata:
|
|
name: artista-modelcamp-media-smb
|
|
spec:
|
|
capacity:
|
|
storage: 5Gi
|
|
accessModes: ["ReadWriteMany"]
|
|
persistentVolumeReclaimPolicy: Retain
|
|
storageClassName: ""
|
|
mountOptions:
|
|
- vers=3.1.1
|
|
- seal # SMB3-Verschluesselung: keine Klartextdaten im Netz
|
|
- uid=1001 # Containerbenutzer "nextjs" (Dockerfile)
|
|
- gid=1001
|
|
- dir_mode=0550 # App liest nur; Schreiben ausschliesslich ueber das NAS
|
|
- file_mode=0440
|
|
- mfsymlinks
|
|
- nobrl
|
|
csi:
|
|
driver: smb.csi.k8s.io
|
|
# Muss im Cluster eindeutig sein.
|
|
volumeHandle: artista-modelcamp-media-smb
|
|
volumeAttributes:
|
|
source: //nas.example.lan/artista/modelcamp-media
|
|
nodeStageSecretRef:
|
|
name: artista-modelcamp-smb
|
|
namespace: artista
|
|
---
|
|
# --- Datenbank-Sicherungen ------------------------------------------------------
|
|
apiVersion: v1
|
|
kind: PersistentVolume
|
|
metadata:
|
|
name: artista-modelcamp-db-backup-smb
|
|
spec:
|
|
capacity:
|
|
storage: 10Gi
|
|
# ReadWriteOnce: nur der Backup-Job haengt dieses Volume ein.
|
|
accessModes: ["ReadWriteOnce"]
|
|
persistentVolumeReclaimPolicy: Retain
|
|
storageClassName: ""
|
|
mountOptions:
|
|
- vers=3.1.1
|
|
- seal # SMB3-Verschluesselung: keine Klartextdaten im Netz
|
|
- uid=70 # Benutzer "postgres" im pg_dump-Job (postgres:18-alpine)
|
|
- gid=70
|
|
- dir_mode=0700 # Sicherungen enthalten personenbezogene Daten
|
|
- file_mode=0600
|
|
- mfsymlinks
|
|
- nobrl
|
|
csi:
|
|
driver: smb.csi.k8s.io
|
|
volumeHandle: artista-modelcamp-db-backup-smb
|
|
volumeAttributes:
|
|
source: //nas.example.lan/artista/modelcamp-backup
|
|
nodeStageSecretRef:
|
|
name: artista-modelcamp-smb
|
|
namespace: artista
|