apiVersion: v1 kind: Namespace metadata: name: artista labels: # Pod Security Admission: nur eingeschraenkte (non-root) Pods. pod-security.kubernetes.io/enforce: restricted --- # Nicht geheime Einstellungen. Geheimnisse: k8s/secret.example.yaml. apiVersion: v1 kind: ConfigMap metadata: name: artista-modelcamp-config data: APP_ENV: "production" APP_URL: "https://modelcamp.example.org" DATABASE_POOL_SIZE: "10" MAIL_TRANSPORT: "smtp" MAIL_FROM: "ARTISTA MODELCAMP " ADMIN_NOTIFY_EMAIL: "" SMTP_PORT: "587" SMTP_SECURE: "false" MEDIA_DIR: "/app/media" EXTERNAL_VIDEO_PROVIDER: "none" --- # Freigegebene Bilder und Videos (Unterkunft, Portraets, Feedback-Videos). # Dauerhaft, deshalb ein PersistentVolumeClaim und KEIN emptyDir. # # ReadWriteMany, weil mehrere App-Replikate dasselbe Verzeichnis lesen. # Geeignet: z. B. Longhorn (RWX), NFS oder eine SMB/CSI-Freigabe — fuer # Medien ist ein Netzwerkdateisystem unkritisch (anders als fuer PostgreSQL). # Steht nur ReadWriteOnce zur Verfuegung: replicas im Deployment auf 1 setzen. apiVersion: v1 kind: PersistentVolumeClaim metadata: name: artista-modelcamp-media spec: accessModes: ["ReadWriteMany"] # storageClassName: longhorn resources: requests: storage: 5Gi --- # Die Datenbank ist nur fuer Pods mit dem Label artista/db-client erreichbar # (App, Migration, Worker, Sicherung). apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: artista-modelcamp-postgres-access spec: podSelector: matchLabels: app.kubernetes.io/name: artista-modelcamp-postgres policyTypes: ["Ingress"] ingress: - from: - podSelector: matchLabels: artista/db-client: "true" ports: - port: 5432