Files
obsidian/services/n8n.md

79 lines
3.4 KiB
Markdown

---
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 접속 경로