--- title: n8n updated: 2026-07-11 tags: [services, n8n, oidc, gitea, helm] --- ## 개요 워크플로 자동화. K3s `n8n` 네임스페이스. - URL: https://n8n.inouter.com - 이미지: `n8nio/n8n:2.29.10` (2026-07-11 업그레이드, [[../history/2026-07-11-n8n-upgrade-2.29.10-helm-native|이력]]) - DB: `pgpool.db.svc.cluster.local:9999` (Patroni 직결, [[../infra/postgresql-ha|postgresql-ha]] 참조) - 텔레메트리: `N8N_DIAGNOSTICS_ENABLED=false` (비활성 — 아웃바운드 차단 환경에서 재시도 폭주로 자체 IP 차단 유발했던 이력 있음) - 리소스: `limits.memory: 1Gi` / `requests.memory: 512Mi` (2.29.10부터 512Mi로는 OOM) ## Gitea OIDC SSO [n8n-oidc](https://github.com/cweagans/n8n-oidc) 사용 — n8n external hooks 방식, enterprise 불필요. ### 구성 요소 | 리소스 | 내용 | |---|---| | ConfigMap `n8n-oidc-hooks` | `hooks.js` (n8n-oidc 프로젝트 원본) | | Secret `n8n-oidc-secret` | `OIDC_CLIENT_ID`, `OIDC_CLIENT_SECRET` | | ConfigMap `n8n-app-config` | OIDC 관련 env vars | ### 환경변수 (`n8n-app-config`) ``` EXTERNAL_HOOK_FILES=/opt/n8n-oidc/hooks.js OIDC_ISSUER_URL=https://gitea.inouter.com OIDC_REDIRECT_URI=https://n8n.inouter.com/auth/oidc/callback OIDC_SCOPES=openid profile email N8N_ADDITIONAL_NON_UI_ROUTES=auth EXTERNAL_FRONTEND_HOOKS_URLS=/assets/oidc-frontend-hook.js ``` ### Gitea OAuth2 앱 - name: `n8n` - redirect URI: `https://n8n.inouter.com/auth/oidc/callback` - confidential client: yes - Gitea admin → Settings → Applications 에서 관리 ### 배포 구조 — Helm 완전 편입 (2026-07-11 정리 완료) n8n은 Helm release(`n8n-2.0.1`, OCI 차트 `oci://8gears.container-registry.com/library/n8n`). **한때 OIDC 관련 리소스가 `kubectl apply`/`patch`로 Helm 값 외부에서 수동 추가되어 있어 `helm upgrade` 시 드리프트(설정 유실) 위험이 있었으나, 2026-07-11 업그레이드 작업 중 전부 Helm values로 편입 완료** ([[../history/2026-07-11-n8n-upgrade-2.29.10-helm-native|이력]]). 이제 `helm upgrade`를 그대로 실행해도 안전함. - `main.config`: 임의 키가 재귀적으로 `KEY_UPPER_SNAKE` env var로 변환됨(`toEnvVars` helper, `n8n-app-config` ConfigMap 생성). OIDC 관련 키(`external_hook_files`, `oidc_issuer_url` 등) 전부 이 안에 선언되어 있음. - `main.extraEnv`: `OIDC_CLIENT_ID`/`OIDC_CLIENT_SECRET`을 `valueFrom.secretKeyRef`로 `n8n-oidc-secret` 참조. (각 entry는 raw `toYaml`이라 `value`든 `valueFrom`이든 표준 EnvVar 구조 그대로 지원) - `main.extraVolumes`/`main.extraVolumeMounts`: `n8n-oidc-hooks` ConfigMap → `/opt/n8n-oidc/hooks.js` 마운트. - **values.yaml 실물 파일**: `kaffa/helm-charts` repo `values/n8n.yaml`. 업그레이드/설정 변경 시 이 파일 수정 → `helm upgrade n8n oci://8gears.container-registry.com/library/n8n --version 2.0.1 -n n8n -f values/n8n.yaml` → 커밋/푸시. ### 동작 1. n8n 로그인 페이지에 "Sign in with SSO" 버튼 표시 2. 클릭 → Gitea authorize → 콜백 → JIT user provisioning (첫 유저 = owner) 3. SSO 우회: `https://n8n.inouter.com/signin?showLogin=true` 로 로컬 로그인 ### 볼륨 마운트 ```yaml volumes: - name: oidc-hooks configMap: name: n8n-oidc-hooks volumeMounts: - name: oidc-hooks mountPath: /opt/n8n-oidc/hooks.js subPath: hooks.js readOnly: true ``` ## 관련 - [[../infra/postgresql-ha]] — pgpool-II 접속 경로