Files
obsidian/services/n8n.md

75 lines
2.6 KiB
Markdown

---
title: n8n
updated: 2026-07-11
tags: [services, n8n, oidc, gitea]
---
## 개요
워크플로 자동화. K3s `n8n` 네임스페이스.
- URL: https://n8n.inouter.com
- 이미지: `n8nio/n8n:latest`
- DB: `pgpool.db.svc.cluster.local:9999` (Patroni 직결, [[../infra/postgresql-ha|postgresql-ha]] 참조)
## 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 + 수동 패치 혼재 (주의)
n8n은 Helm release(`n8n-2.0.1`, chart 자체는 OIDC 애드온 미지원)로 설치되어 있으나, OIDC 관련 리소스(`n8n-oidc-secret`, `n8n-oidc-hooks` ConfigMap, `n8n-app-config`의 OIDC 관련 키, hooks volume mount, `envFrom` 항목)는 설치 후 `kubectl apply`/`kubectl patch`로 **Helm 값 외부에서 수동 추가**됨. `helm get values n8n`에는 이 내용이 전혀 안 보임.
- **드리프트 위험**: `helm upgrade`를 values 변경 없이 재실행하면 Deployment가 chart 템플릿대로 재렌더링되면서 수동 patch (`envFrom``n8n-oidc-secret` secretRef 등)가 **되돌아갈 수 있음**. OIDC 관련 변경 후에는 반드시 `kubectl -n n8n get deployment n8n -o yaml`로 envFrom/volumeMounts 유지 여부 확인할 것.
- `envFrom` 순서(2026-07-11 기준): `configMapRef n8n-app-config``secretRef n8n-app-secret``secretRef n8n-oidc-secret`
### 동작
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 접속 경로