- hp2 NAS 연결 상태 갱신 (미연결 → 192.168.205.134로 정상 참여)
- nfs-provisioner nodeAffinity 실제값 반영 (제약 없음)
- iSCSI ScsiTarget on-demand 동작 설명 추가
- 2026-04-14 iSCSI smoke test 결과 기록
- eth2 USB NIC watchdog 섹션 신설 (LPM exit latency 이슈 대응)
- dev/obsidian-schema.md: type별 frontmatter 규약 문서화
- infra/hosts/{incus-hp2,incus-kr1,zlambda}.md: 구조화된 필드로 파일럿 3개
- infra/hosts.base: Bases 쿼리 (전체/서울/K3s/유료/Critical 뷰)
기존 infra-hosts.md 본문은 그대로 유지. 파일럿 검증 후 나머지 호스트 확장 예정.
- 오사카 APISIX에 Vector(Docker) 추가, VictoriaLogs ES bulk API로 로그 전송
- CrowdSec에 victorialogs acquisition (tail 모드) 추가, 서울+오사카 통합 수신
- anomaly-detect 설명에 오사카 포함 반영
- 기존 http-logger 직접 push는 레거시로 병행 유지 (추후 제거)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
15개 정본 문서에서 날짜별 변경이력, 인시던트 기록, 폐기된 구현 상세를
history/ 디렉토리로 분리. 정본은 현재 상태만 기술하는 백서 형태로 정리.
각 정본에 history 위키링크 추가.
분리된 history 파일 12건:
- apisix git push 500, k3s postgresql migration, apisix→traefik 전환
- netbis DDoS 공격, gitea 이전/분리, usb 2.5g hang + NFS hard mount
- supabase→patroni, apisix etcd 통합/분리, anomaly-detect 재설계
- patroni failover incident, zlambda nixos migration, ops-agents setup
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- /etc/cron.d/cf-zone-sync 파일 삭제
- /usr/local/bin/auto-add-cf-zones.sh → .disabled.20260410-incident archive (chmod 600)
- 신규 zone 추가는 cfb-manager POST /domains 또는 수동 yaml edit
- bouncer 정상 running 확인 (PID 371770 uptime 1h28min)
- infra/cloudflare.md: Worker 라우트 / Turnstile 위젯 표를 cleanup-2 후 상태로 갱신. inouter/anvil 라우트 + 6개 옛 bouncer-managed widget sitekey 폐기 표시. 신규 inouter-bunny-middleware (0x4AAAAAAC3otPWhldI96Aks) 추가, freeze 보장 근거 명시. Turnstile 토큰 권한 사실 (Vault api_token read-only vs bouncer 토큰 read+write). 인시던트 이력 섹션 추가 + 인시던트 doc 8f5c43f8 링크.
- infra/crowdsec-safeline.md: cs-cf-worker-bouncer 보호 zone 4개로 갱신, 제거된 zone 와 freeze widget 명시.
- services/bunnycdn-security.md: 미들웨어 64811 Turnstile sitekey 변경 이력표 (옛/삭제/신규 3행). sitekey gap 항목을 신규 위젯 기준으로 갱신, nas.inouter.com 정리 완료 표시.
cf-audit-cleanup-2 인시던트 + 복구 상세는 Outline doc 8f5c43f8 의 "## 복구 완료" 섹션 참조.
3건 DNS 레코드 삭제 (CF API 200, kappa 승인):
- nas.inouter.com CNAME actions.b-cdn.net (dead 풀존 참조, Synology LAN 전용)
- ironclad.jp.inouter.com A 10.19.228.193 (사설 IP 공개 노출)
- k8s.jp.inouter.com A 10.253.103.124 (사설 IP 공개 노출)
infra/cloudflare.md 의 inouter.com DNS 표에서 해당 행 제거.
특이사항 섹션의 dead reference / 사설 IP 노출 항목을 정리 이력으로 변경.
servidor.it.com zone 은 'death 도메인 아님' 판정으로 유지.
- infra/cloudflare.md 전면 재작성: zone 6개(actions/anvil/inouter/ironclad/keepanker/servidor) 전수, DNS 레코드 zone별 핵심, Workers 9개 + 라우트, Turnstile 위젯 8개. dead reference (nas.inouter.com / *.actions.it.com → actions.b-cdn.net), servidor.it.com orphan zone, 사설 IP 노출, CF proxy on/off 함의 등 특이사항 정리. 옛 jarvis/n8n/vault → actions.b-cdn.net 기록 폐기.
- services/bunnycdn-security.md: 5개 풀존 전수표, 17개 호스트네임 인벤토리, 미들웨어 64811 attach 매트릭스, bouncer.py 동기화 흐름. cfb-manager 가 BunnyCDN 미들웨어를 갱신한다는 옛 오기록 정정 (cfb-manager 는 CF Worker bouncer 전용).
- 두 문서 모두 Outline 감사 doc 51b963c3 링크.
kappa 피드백 + kubectl 실측 기반 정정. 이전 기록의 "SafeLine WAF 전용 리버스
프록시" 또는 "SafeLine WAF 전용" 표현은 오해의 소지가 있음.
실측 사실 (2026-04-10 kubectl get svc + ApisixRoute + HTTPRoute):
- APISIX (svc apisix-gateway): MetalLB VIP 192.168.9.50, gateway 80/443 +
admin 9180. 독립 LoadBalancer. Deployment replica 2.
ApisixRoute 1건: juiceshop/juiceshop → juiceshop.keepanker.cv → juiceshop
svc (chaitin-waf plugin 으로 SafeLine 통합 테스트)
- Traefik (svc traefik): MetalLB VIP 192.168.9.53, 80/443.
HTTPRoute 14건 (argocd/gitea/grafana/n8n/nocodb/sftpgo/openmemory/searxng/
kroki/safeline-mgt/vault-ui + api/namecheap + api/vultr + bunnycdn-mcp)
+ 5 legacy IngressRoute (vlogs/outline/vault-mcp/vault-mcp-http/bunnycdn-mcp)
→ **두 gateway 는 동등한 병렬 독립 LoadBalancer**. APISIX 는 Traefik 뒤의
리버스 프록시가 아니라 자체 MetalLB VIP 를 가진 별개 외부 인입 채널.
"SafeLine WAF 전용" 이 아니라, 2026-03-25 메인 라우팅이 Traefik 으로 이전된
이후 현재 APISIX route 가 SafeLine 테스트용 1건만 남은 상태일 뿐 — 범용
gateway 로 언제든 새 route 추가 가능.
정정 대상:
- infra/apisix.md — 서울 섹션 헤더/용도/축소 문구
- infra/infra-hosts.md — 게이트웨이 한 줄 요약
- infra/k3s-migration.md — 게이트웨이 열 + Phase 0 + Namespace 표
- infra/gateway-api.md — 전환 이력 2026-03-25 줄
- infra/crowdsec-safeline.md — waf-kr BunnyCDN Pull Zone 섹션 머리말
부수적으로 2026-04-10 에 발견된 heimdall kubectl 부재 문제 해결
(kubectl + helm + kubeconfig 복원) + tofu cloud-init 자동화 추가 —
commit bd5e4cb (ops-agents-tofu).
- iron-kr 호스트 7개 (사용자 6 + 시스템 1) 명시. gitea.inouter.com 제거 (iron-git 분리됨), outline.inouter.com 추가
- iron-jp 호스트 5개 정정 (anvil.it.com 계열, 옛 inouter.com 표기 제거)
- 옛 풀존 ID 5316471/5330178/5554681 → iron-kr/iron-jp/iron-kr-waf 통합 메모
- Edge Script 64811 attach: iron-kr + iron-jp 두 풀존 모두 (단일 아님)
- iron-kr-waf 섹션을 waf-kr 에서 재명명, 새 경로 표기
- Patch DATABASE_URL to OpenWrt HAProxy (192.168.9.1:5432) so Outline
follows Patroni leader automatically
- Record 2026-04-08 incident: postgres-1 demoted to replica caused all
write queries (incl. apiKeys.lastActiveAt) to fail with 500
- Document heimdall outline MCP setup and new agent-qna collection
- 코드 커밋 해시 3개(a702870/af2873d/d7789ad) 기록
- simulate.py 5/5 PASS 결과
- vlogs 주입 270 rows → 31 IP 정확 탐지
- LAPI POST 201 Created, cscli cleanup 정상
- 운영 중 주의사항 (injected 로그 잔재, 재테스트 시 cleanup 절차)
- custom/apisix-{high-rate-per-ip,499-burst,single-path-flood,5xx-burst} 4종 추가 (ddos-detect AI 폐기 후 deterministic 패턴 매칭으로 대체)
- 모두 leaky bucket, ban 4h, K3s 서울 APISIX 트래픽만 대상
- APISIX → CrowdSec http-logger 송신처가 K3s 서울 단독임을 명확화 (osaka는 crowdsec-bouncer로 결정 소비만)
- K3s APISIX 글로벌 limit-req(20 req/s, burst 10) 발견 사항 기록 — CrowdSec 시나리오는 이 1차 차단을 통과한 트래픽만 보는 2차 layer라는 점 포함