From 4bd868e2190e765b3c69156c9d574613c6f988db Mon Sep 17 00:00:00 2001 From: kappa Date: Thu, 9 Apr 2026 14:51:31 +0900 Subject: [PATCH] =?UTF-8?q?ops-agents:=20Heimdall/Syn=20=EB=82=B4=EB=B6=80?= =?UTF-8?q?=20=EC=9A=B4=EC=98=81=20=EC=97=90=EC=9D=B4=EC=A0=84=ED=8A=B8=20?= =?UTF-8?q?=EC=B2=B4=EA=B3=84=20=EB=AC=B8=EC=84=9C=ED=99=94,=20Syn=20hp2?= =?UTF-8?q?=20=EC=9D=B4=EC=A3=BC=20=EA=B8=B0=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ops-agents/overview.md | 104 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 ops-agents/overview.md diff --git a/ops-agents/overview.md b/ops-agents/overview.md new file mode 100644 index 0000000..5992c9f --- /dev/null +++ b/ops-agents/overview.md @@ -0,0 +1,104 @@ +--- +title: 내부 운영 에이전트 (Ops Agents) +updated: 2026-04-09 +tags: [agent, ops, claude-code] +--- + +kappa가 혼자 쓰는 **내부 인프라·운영 자동화 Claude Code 에이전트** 집합. 고객 대상 OpenClaw 에이전트(jp1 `agents` 프로젝트, anvil/stamp/flux 등)와는 완전히 분리된 영역. 외부 클라우드 BM 프로비저닝(jp1 `infra-tool` 의 Tofu API)과도 무관. + +**명명 규칙**: 북유럽 신화 (Heimdall = 파수꾼, Syn = 문지기, …). OpenClaw 쪽은 대장간/중세 기능 네이밍(anvil/forge/smelt/stamp/…)이라 자연스럽게 분리됨. + +## 에이전트 목록 + +| 이름 | 호스트 | Incus 프로젝트 | IP | 역할 | 비고 | +|------|--------|---------------|-----|------|------| +| **[[heimdall]]** | kr1 | `default` | 10.100.3.92 | 인프라 전반 (K3s, Incus, Longhorn, 스토리지, 네트워크, 일반 서비스) | 수동 생성, tofu 미관리 (브라운필드 import 예정) | +| **[[syn]]** | hp2 | `ops` | 10.100.2.173 | 엣지 레이어 전담 (BunnyCDN, SafeLine WAF, APISIX, Cloudflare 엣지) | 2026-04-09 신규, tofu 관리 (`kaffa/ops-agents-tofu`) | + +## 공통 원칙 + +### 통신 프로토콜 (ssh + tmux send-keys 체인) + +모든 내부 에이전트는 **한 줄 태그 포맷**으로 서로와 kappa에 신호 전송: + +| 태그 | 의미 | +|------|------| +| `[SYN DONE] ...` | 작업 완료 | +| `[SYN FAIL] ...` | 실패 (원인 한 줄) | +| `[SYN ASK] ...` | 결정/입력 필요 | +| `[SYN PROGRESS] ...` | 중간 이정표 (드물게) | +| `[SYN→HEIMDALL] ...` | 피어 투 피어 | +| `[HEIMDALL→SYN] ...` | 역방향 | +| `[SYN CC] ...` / `[HEIMDALL CC] ...` | 피어 대화를 kappa 에 CC | + +핵심 규칙: **한 줄만**. 상세는 자기 tmux 창 또는 Outline `agent-qna` 문서에 남기고, 신호에는 포인터만. + +### 통신 경로 + +- **kappa Mac → Syn**: `tmux send-keys -t 0:0 '...' Enter` (window 0 이 syn-login, ssh 체인 유지) +- **kappa Mac → Heimdall**: `ssh root@10.100.3.92 'tmux send-keys -t heimdall ...'` +- **Syn → kappa Mac**: `ssh kaffa@100.106.245.27 '/opt/homebrew/bin/tmux send-keys -t 0:1 ...'` +- **Syn → Heimdall**: `ssh root@10.100.3.92 'tmux send-keys -t heimdall ...'` +- **Heimdall → Syn**: `ssh kaffa@100.106.245.27 '/opt/homebrew/bin/tmux send-keys -t 0:0 ...'` (경유 필요) + +Syn 컨테이너는 hp2 subnet routing 덕분에 **Tailscale 설치 없이** tailnet의 다른 노드(kappa Mac 100.106.245.27, heimdall 10.100.3.92 등)에 직접 reachable. 호스트의 tailscale0 interface가 container bridge 로 투명하게 열려있음 — 2026-04-09 실측 확인. + +## 역할 분담 원칙 + +**Heimdall 전담 (Syn 손대지 말 것)**: +- K3s 클러스터 전반 (노드, Longhorn, 일반 워크로드) +- Incus 호스트 관리 +- 스토리지, 네트워크 (Tailscale/OpenWrt/HAProxy) +- 일반 서비스 파드 (Outline/Gitea/Vault 본체 등) +- Obsidian 정본 전체 쓰기 권한 + +**Syn 전담 (Heimdall 손대지 말 것)**: +- BunnyCDN: 풀존, 엣지 스크립트(MiddlewareScriptId 64811 `crowdsec-bouncer-middleware` 포함), Shield/WAF, 캐시 정책 +- SafeLine WAF: K3s `safeline` ns, Traefik middleware, 탐지 규칙, APISIX 통합 +- APISIX: 모든 인스턴스 (K3s 서울 / osaka-gw / sandbox-tokyo / zlambda), 라우트, 플러그인, Admin API +- Cloudflare 엣지 관련: Turnstile 위젯, cs-cf-worker-bouncer, cfb-manager +- Obsidian 중 엣지 범위 파일 쓰기: `infra/apisix.md`, `infra/crowdsec-safeline.md` 의 엣지 섹션, `services/bunnycdn*.md` + +**공동/협업**: +- CrowdSec 시나리오: Heimdall 소유, Syn은 APISIX/SafeLine용 시나리오 파라미터 튜닝 제안만 +- 두 에이전트 모두 Vault·OpenMemory·Outline 읽기·쓰기 OK (MCP 경유) + +## 배포 관리 + +### Heimdall +- 수동 생성 (2026-03 경). 컨테이너 IP 10.100.3.92, kr1 default project. +- Tofu 미관리. 브라운필드 import 예정 (`kaffa/ops-agents-tofu/heimdall/` 향후 추가). + +### Syn +- OpenTofu 관리: [`kaffa/ops-agents-tofu`](https://gitea.inouter.com/kaffa/ops-agents-tofu) (2026-04-09 신규) +- 변경 플로우: 로컬 clone → `syn/` 에서 `tofu plan` → `tofu apply` +- State: 로컬 `terraform.tfstate` (gitignore, 수동 백업). 향후 R2 s3 backend 이주 검토. +- Secrets (`terraform.tfvars`): Vault 참조, 커밋 금지 + +### 런타임 설정 (Syn 기준) +- Debian 13 cloud 이미지, 4GiB RAM / 4 vCPU, limits.cpu/memory +- 유저: kaffa (uid 1000, NOPASSWD sudo) +- Claude Code 공식 인스톨러 (`curl -fsSL https://claude.ai/install.sh | bash`), npm 미사용 +- uv / uvx (MCP 서버용) +- `~/syn/` workspace: CLAUDE.md + bunnycdn/cloudflare/safeline/apisix 런북 + .mcp.json (bunnycdn/vault/openmemory/kubernetes) +- systemd `syn-tmux.service` (enabled, 첫 로그인 후 수동 start) + +## 향후 확장 후보 + +내부 에이전트를 더 찍어낸다면 (Tofu 템플릿화 완료 후): + +| 이름 (북유럽) | 역할 후보 | +|---|---| +| **Mimir** | 지식·메모리 관리 (Obsidian 정합성, OpenMemory 큐레이션) | +| **Forseti** | 분쟁 조정 — CI/CD, PR 리뷰, 코드 품질 | +| **Bragi** | 프론트엔드·UX·카피 | +| **Eir** | 헬스체크·복구·장애 대응 | +| **Vör** | 관찰성 (VictoriaMetrics/Logs/Grafana) | + +이름 예약만. 실제 생성은 필요 시점에. + +## 참조 + +- [[infra-hosts]] — 전체 인프라 토폴로지 +- [[../openclaw/openclaw-agents|openclaw-agents]] — 분리된 OpenClaw 시스템 (고객용) +- [`kaffa/ops-agents-tofu`](https://gitea.inouter.com/kaffa/ops-agents-tofu) — Tofu IaC 정본