--- apiVersion: v1 kind: Namespace metadata: name: n8n --- apiVersion: v1 kind: Secret metadata: name: n8n-secrets namespace: n8n type: Opaque data: # Base64 values from your previous manifest N8N_ADMIN_USER: a2h3ZXpp N8N_ADMIN_PASSWORD: cWVaVllWQ20wOEhaWmU= POSTGRES_PASSWORD: RmJsV0xPTlM4alVjNUE= N8N_ENCRYPTION_KEY: Tm90U2VjcmV0S2V5MTIzIQ== N8N_TASKS_RUNNER_AUTH_TOKEN: bXktc2hhcmVkLXNlY3JldC10b2tlbi0xMjM= --- apiVersion: v1 kind: ConfigMap metadata: name: n8n-config namespace: n8n data: N8N_HOST: "n8n.khongisa.co.za" N8N_PROTOCOL: "https" NODE_ENV: "production" WEBHOOK_URL: "https://n8n.khongisa.co.za/" GENERIC_TIMEZONE: "Africa/Johannesburg" DB_TYPE: "postgresdb" DB_POSTGRESDB_HOST: "n8n-db-service" DB_POSTGRESDB_PORT: "5432" DB_POSTGRESDB_DATABASE: "n8n_db" DB_POSTGRESDB_USER: "n8n_user" N8N_PROXY_HOPS: "1" # DEFINITIVE FIX: Force n8n to listen on all interfaces N8N_LISTEN_ADDRESS: "0.0.0.0" N8N_PORT: "5678" --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: n8n-data-pvc namespace: n8n spec: accessModes: ["ReadWriteOnce"] resources: requests: storage: 10Gi --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: n8n-db-pvc namespace: n8n spec: accessModes: ["ReadWriteOnce"] resources: requests: storage: 10Gi --- # Database Deployment apiVersion: apps/v1 kind: Deployment metadata: name: n8n-db namespace: n8n spec: replicas: 1 selector: matchLabels: app: n8n-db template: metadata: labels: app: n8n-db spec: containers: - name: postgres image: postgres:14-alpine env: - name: POSTGRES_USER value: "n8n_user" - name: POSTGRES_DB value: "n8n_db" - name: POSTGRES_PASSWORD valueFrom: secretKeyRef: name: n8n-secrets key: POSTGRES_PASSWORD ports: - containerPort: 5432 volumeMounts: - name: db-storage mountPath: /var/lib/postgresql/data volumes: - name: db-storage persistentVolumeClaim: claimName: n8n-db-pvc --- # Database Internal Service apiVersion: v1 kind: Service metadata: name: n8n-db-service namespace: n8n spec: ports: - port: 5432 selector: app: n8n-db --- # n8n Application Deployment apiVersion: apps/v1 kind: Deployment metadata: name: n8n namespace: n8n spec: replicas: 1 selector: matchLabels: app: n8n-app # Standardized label selector template: metadata: labels: app: n8n-app # Matches selector and service spec: containers: - name: n8n image: docker.n8n.io/n8nio/n8n:latest ports: - containerPort: 5678 - containerPort: 5679 # Explicitly open the Task Broker port envFrom: - configMapRef: name: n8n-config env: # DEFINITIVE FIX: Align communication between main process and Task Runner - name: N8N_TASKS_RUNNER_BROKER_HOST value: "127.0.0.1" - name: N8N_TASKS_RUNNER_BROKER_PORT value: "5679" - name: N8N_TASKS_RUNNER_AUTH_TOKEN valueFrom: secretKeyRef: name: n8n-secrets key: N8N_TASKS_RUNNER_AUTH_TOKEN # Database and Admin overrides - name: DB_POSTGRESDB_PASSWORD valueFrom: secretKeyRef: name: n8n-secrets key: POSTGRES_PASSWORD - name: N8N_ENCRYPTION_KEY valueFrom: secretKeyRef: name: n8n-secrets key: N8N_ENCRYPTION_KEY - name: N8N_USER_MANAGEMENT_ADMIN_USER valueFrom: secretKeyRef: name: n8n-secrets key: N8N_ADMIN_USER - name: N8N_USER_MANAGEMENT_ADMIN_PASSWORD valueFrom: secretKeyRef: name: n8n-secrets key: N8N_ADMIN_PASSWORD - name: N8N_SECURE_COOKIE value: "false" - name: N8N_COOKIES_SAME_SITE value: "lax" - name: N8N_PROXY_HOPS value: "1" volumeMounts: - name: n8n-data mountPath: /home/node/.n8n volumes: - name: n8n-data persistentVolumeClaim: claimName: n8n-data-pvc --- # NodePort Service apiVersion: v1 kind: Service metadata: name: n8n-service namespace: n8n spec: type: NodePort selector: app: n8n-app # Correctly targets the refactored Deployment labels ports: - protocol: TCP port: 5678 targetPort: 5678 nodePort: 30567