49 Commits

Author SHA1 Message Date
kaffa
fbb3506643 history: Longhorn sftpgo corruption loop 해소 + snapshot 자동 retention 영구 수정
- sftpgo replica kr1 13분 주기 corruption loop → kr2 anti-affinity reschedule로 해소
- root cause: snapshot .checksum 누락 + chain meta 손상 (디스크 정상)
- 시스템 차원 발견: 906/906 snapshot이 recurring-job 라벨 누락
- snapshot 일괄 정리 906 → 194 (volume당 7~8개)
- RecurringJob 4개 spec.labels patch — 자동 retention 영구 수정
- 후속: ArgoCD/IaC 매니페스트 반영 필요
2026-06-01 11:38:19 +09:00
kaffa
156e1b2dce history: termix image.tag 명시 고정은 정책 위배 — :latest 복귀 위임 기록
- 사용자 정책: 컨테이너 이미지 tag는 :latest 유지가 디폴트
- 헤임달의 image.tag 고정 변경 및 본 history의 '교훈' 가이드 모두 정정
- 헤임달에 :latest 복귀 별도 위임
2026-05-29 19:56:38 +09:00
kaffa
26cd0ba2ba history: termix :latest → release-2.3.1 업그레이드 + image.tag 명시 고정
- chart 0.1.2 → 0.1.4, commit 5d3b027
- ImagePullBackOff 1차 실패 (release tag 이름 vs registry tag 이름 차이) 기록
- ArgoCD Synced/Healthy, pod Running, https://termix.inouter.com/ HTTP 200
2026-05-29 19:52:04 +09:00
kaffa
1a944bdd6b nas: r8152 v2.20.1-1 → v2.21.4-1 (LPM 재발 대응) + spk_su 설치 절차 기록
- 5/24 LPM disconnect 재발 → 새 카드 4일 만에 빈도 증가
- bb-qq r8152 패키지 업그레이드. 첫 install이 의도적으로 fail (spk_su 부재) → spk_su manual install 후 SPK 재install로 정상화
- 검증: status=running, driver v2.21.4 (2025-10-28), end-to-end JF (ping -M do -s 8972) 통과
- 효과(LPM 발화 빈도 감소)는 며칠 관찰 필요
- nas-storage.md에 5/24 재발 + 5/26 업그레이드 시점 추가
- history/2026-05-26 신규 — 설치 절차 함정(spk_su) 정리
2026-05-26 17:12:02 +09:00
kaffa
03ef787444 cf-bouncer: fall-mvp.com zone 제거 — netbis CF bouncer 21일 만에 동기화 재개
fall-mvp.com zone이 CF에서 삭제되어 bouncer가 2026-05-02부터 fatal 루프로 정지. config에서 2줄 제거 후 enable+start. LAPI pull 2026-05-23T04:56:28Z로 갱신 확인.
- infra/security/crowdsec-safeline.md: 적용 zone 6 → 5
- history/2026-05-23-cf-bouncer-fall-mvp-removal.md: 인시던트 기록
2026-05-23 14:00:25 +09:00
kaffa
ae8d8b7dfa history: kr1 k3s 12시간 stuck — etcd/cf-bouncer/longhorn 연쇄 인시던트 기록
2026-05-22 20:02 JST kr1 k3s.service가 activating 상태로 12시간 매달려 노드 NotReady → instance-manager 9d Terminating → 4 볼륨 degraded + apisix-etcd-0 raft 손상까지 연쇄. systemctl restart 한 번으로 4분 안에 회복. 재발 방지 룰 정리.
2026-05-23 10:41:58 +09:00
kaffa
5be51134c9 incus-hp1 storage-net 참여 사실 반영 + kr2 multus-shim ETXTBSY 인시던트 기록
- infra-hosts.md: hp1 행 갱신 (이전 "1GbE only" → 2.5G 192.168.205.227, MAC 20:e1:5d:6a:2b:2e, MTU 9000 JF OK), 2.5G 표 hp1 행 추가, NAS NIC 정보(USB cdc_ncm → r8152 RTL8157 chip rev 14 + MAC)로 정확화, 호스트 자원 표에 hp1 추가, SSH 정보 라인에 hp1 접근 한계 명시
- nas-storage.md: K3s 노드 표 3→4 노드로 갱신 (hp1 추가), nodeAffinity 설명 표현 갱신
- history/2026-05-20-kr2-multus-shim-etxtbsy.md: ETXTBSY 데드락 RCA 및 `rm /opt/cni/bin/multus-shim` 회피책 기록
2026-05-20 17:10:07 +09:00
kaffa
ba30121962 NAS eth2 USB 2.5GbE 카드 교체 (rev 17 → rev 14, USB 4-1 → 2-2)
- ethtool: 2500 Mb/s Full Duplex 정상 협상
- iperf v2 (MTU 9000): TX 2.26 Gbit/s, RX 2.45 Gbit/s (이론 91%/98%)
- DSM ifcfg가 슬롯 기반으로 eth2 자리 자동 매핑 → 이름/IP/MTU 승계
- watchdog 그대로 유효, 새 카드도 RTL8157 계열이므로 LPM 재발 모니터링 대상
2026-05-20 15:41:31 +09:00
kaffa
0223c832ab history: complete safeline chaos/detector-logs preemptive PVC replacement (2026-05-18) 2026-05-18 19:35:38 +09:00
kaffa
aec8891bac history: add 2026-05-18 detector PVC follow-up + remaining timebombs (chaos / detector-logs) 2026-05-18 17:54:15 +09:00
kappa
2763e33675 history: SafeLine RWX PVC ext4 호환성 인시던트 복구 기록 (2026-05-17) 2026-05-17 16:33:53 +09:00
heimdall
81e270a90f longhorn: snapshot-purge 임시 cron 회수 (1.11.2 fix 적용 후 의미 소멸) 2026-05-09 20:37:13 +09:00
heimdall
02a9b9dfd8 longhorn: 1.11.1 → 1.11.2 (snapshot warning #12856 fix) 2026-05-07 08:10:59 +09:00
kaffa
0a45e0536c AMD-Vi (IOMMU) Completion-Wait timeout 메커니즘 정본 신설
incus-kr2 freeze 사건 분석으로 확정된 IOMMU 부분 hang 메커니즘과
운영 규칙(`iommu=pt` 선제 적용)을 별도 reference 문서로 분리.
호스트 사연(history)과 메커니즘(reference)을 분리해 다른 AMD Ryzen
호스트 도입 시 재사용 가능한 정본으로 정리.

- infra/compute/amd-vi-iommu.md 신규 (메커니즘 + 차단 + 운영 규칙)
- compute _index.md, hosts/incus-kr2.md, history 문서에 링크
2026-05-05 11:47:31 +09:00
kaffa
35f1e16f09 incus-kr2 freeze 원인 = AMD-Vi (IOMMU) Completion-Wait timeout
호스트 약 2주 간격 freeze 재발 패턴 분석 결과 AMD Ryzen 6900HX의
IOMMU Completion-Wait queue stall이 근본 원인. GRUB cmdline에
`iommu=pt` 추가하여 IOMMU passthrough 모드로 차단.

- infra/compute/hosts/incus-kr2.md 신규 (호스트 정본)
- history/2026-05-04-amd-iommu-freeze.md 신규 (사건 기록)
- _index.md / infra-hosts.md 갱신
2026-05-05 07:18:28 +09:00
heimdall
46419eb8a1 longhorn: snapshot-purge cron 워크어라운드 (v1.11.1 stuck snapshot) 2026-05-02 15:22:51 +09:00
heimdall
3afb3c884d outline: history 갱신 — pgpool DML 라우팅도 동일 버그, haproxy-pg override 영구 유지 2026-04-29 15:44:44 +09:00
heimdall
23a91899e5 outline: 0.82.0 -> 1.7.0 메이저 업그레이드 (OIDC SameSite 쿠키 수정) 2026-04-29 15:30:25 +09:00
kaffa
d25dc3e52f obsidian 정합성 정정 — bouncer 단일화 잔존 stale 정리
- infra/compute/infra-hosts.md: jp1 default 20→19, cs-cf-worker-bouncer 컨테이너 라인에서 제거
- services/bunnycdn-security.md: Edge Script 64811 / bloom filter / 국가차단 / Turnstile inouter-bunny 폐기 반영. 현재 layer (Bunny Shield + Rate Limit + 대역폭 한도) 중심 재작성
- infra/network/apisix.md: Edge Script 64811 attach 라인 폐기 표시
- infra/security/cloudflare.md: Workers 인벤토리 + Worker 라우트 + CF proxy 패턴 + cfb-manager 절 모두 폐기 반영
- infra/security/crowdsec-safeline.md: cs-cf-worker-bouncer 운영 중 문장 폐기 표시
- ops-agents/overview.md: Syn 영역 정의에서 폐기 자산 명시
- history/_index.md: 누락된 2026-04-25-netbis-npm-vector-msg-rewrite, 2026-04-26-bouncer-consolidation 등록 + frontmatter updated
2026-04-26 10:33:48 +09:00
kaffa
560dde3f88 cloudflare: Turnstile 위젯 6개 + Edge Script 64811 정리 추기
- Turnstile 4개 (cs-cf-worker-bouncer-widget): 삭제
- Turnstile inouter (legacy orphan): 삭제
- Turnstile inouter-bunny-middleware: 삭제 (BunnyCDN 미들웨어 64811과 함께)
- Edge Script 64811: DELETE /compute/script/64811 HTTP 204
  - 4개 풀존 (iron-jp/iron-kr/iron-kr-waf/iron-git) MiddlewareScriptId null 자동 정리 확인
- 보류: Turnstile crowdsec-captcha (8 도메인 사용처 추적 미완)
- bouncer 단일화 history에 Syn 회신 + Turnstile/Edge Script 추가 정리 결과 추기
2026-04-26 10:27:02 +09:00
heimdall
53172c06e8 bouncer 단일화: netbis-cf-firewall만 유지, 나머지 3종(cs-cf-worker/apisix-waf/bunny-cdn) 폐기 2026-04-26 09:55:55 +09:00
heimdall
f733dd574a netbis: NPM Vector _msg 재합성 (proxy_v2 → nginx combined) — child-nginx-logs unparsed 84% 해결 2026-04-25 15:17:01 +09:00
kaffa
46cb3236d3 deprecate anomaly-detect (오탐 다수로 인스턴스까지 제거)
원인: Grok-4-fast agentic 분석기가 더미 IP(1.1.1.1, 1.2.3.4 시퀀스),
Cloudflare 엣지 IP(172.70.x), 자체 Linode IDC 대역(45.79.x)을
path-enumeration으로 오탐 ban. 같은 기간 hub 시나리오는 진짜 스캐너
1건(India SoloRDP)을 정확히 잡음.

작업:
- infra/platform/anomaly-detect.md → deprecated stub
- history/2026-04-25-anomaly-detect-removal.md 신규 (폐기 사유, 재가동 조건 정리)
- crowdsec-safeline.md acquisition 다이어그램에서 anomaly-detect 분기 제거
- infra/compute/infra-hosts.md hp2 default 5→4 갱신
- infra/platform/_index.md, history/_index.md 인덱스 갱신
- infra/security/vault.md apps 목록에서 항목 제거 (apps/anomaly-detect 경로는 비어있음, 유지)

보존:
- Vault secret/ai/openrouter (다른 서비스 공용 가능성)
- Gitea kaffa/anomaly-detect repo (재구축 reference)
2026-04-25 15:00:13 +09:00
kaffa
e5c6b4deab netbis CF firewall bouncer 재구축 (origin filter) + VL acquisition 통합 + sigmatch v2.4
- crowdsec-safeline.md: VL → CrowdSec acquisition 3개(apisix/traefik/npm) → 1개 통합
  (victorialogs-nginx.yaml, query OR 결합). Netbis NPM CrowdSec 연동 활성.
  netbis-cf-firewall 재구축 섹션 추가.
- services/netbis.md: bouncer 폐기 → 재구축 정정. firewall_bouncer_token 정보 갱신.
  Worker bouncer는 트래픽 비례 비용으로 재구축 안 함 명시.
- history/2026-04-25-netbis-cf-firewall-rebuild.md: 오늘 작업 종합 (sigmatch v2.4
  MP 제거, VL 통합, CrowdSec 연동, CF Firewall bouncer 재구축, origin filter로
  10k 한도 회피).

origin filter [crowdsec, cscli] 적용으로 2026-04-23 폐기 사유였던 CF IP List
10k 한도 회피. Worker bouncer는 origin filter로 회피 불가 (트래픽 비례 비용)
이라 재구축 안 함.
2026-04-25 12:43:47 +09:00
kaffa
102da9c2fe cloudflare: Pseudo IPv4 (Class E 240/4) 정리 — Netbis 관찰 기반
- infra/security/cloudflare.md: Pseudo IPv4 섹션 신규 (동작 원리·모드·함의·오해 주의)
- services/netbis.md: client_ip 의미에서 부정확한 '254.x 범위' → '240.0.0.0/4' 정정, CF docs 링크
- history: 2026-04-24 CF Pseudo IPv4 정체 규명 (CGNAT 오진 교훈 포함)
2026-04-24 08:11:44 +09:00
heimdall
2a8cf22e43 netbis: NPM client_ip 실 IP 추출 정비 (nginx real_ip_header + Vector VRL) 2026-04-23 16:06:37 +09:00
heimdall
461ee81839 netbis: NPM 6대 Vector→zlambda→VL 로그 수집 파이프라인 구축 2026-04-23 15:23:37 +09:00
heimdall
bf33c043f9 netbis: CF 바운서 전량 제거 (netbis-cf + netbis-cf-firewall) 2026-04-23 13:52:59 +09:00
heimdall
29c17065b2 netbis: crowdsec-cloudflare-bouncer (firewall rule) 추가 — worker bouncer와 병행 2026-04-23 13:27:23 +09:00
kaffa
3dfceb81b7 ironclad production cutover (2026-04-21): apex → Worker 전환
products/ironclad-website.md: 배포 표에 라우팅 방식 컬럼 추가.
production만 zone route 방식(custom_domain 대신 zone_name + /*)을 써서
기존 APISIX A record를 건드리지 않고 Cloudflare 엣지에서 Worker가
매칭 요청을 가로채는 구조. 전제 조건(crowdsec bouncer wildcard가
apex를 가로채지 않도록 *.ironclad.it.com/* 수정) 명시.

history/2026-04-21: 3차에 걸친 cutover 경로(DNS 충돌 → route 전환 →
crowdsec wildcard dot 누락 수정) + 현재 prod 상태 + 후속 정리 항목.
2026-04-21 17:13:33 +09:00
kaffa
71aae4e374 products/ironclad-website: Next.js 16 + Claude Design 전환 반영
기존 Astro+Stitch 계획을 실제 구현(Next.js 16 App Router, opennextjs-cloudflare,
독자 Worker 3환경) 기준으로 갱신. 보안서비스 페이지 섹션별 콘텐츠 규칙 정리.
anvil-hosting(hosting.inouter.com)은 폐기된 실험으로 명시.

history/2026-04-21: Claude Design 도입 + /ko/security 본체 교체 경위 기록.
2026-04-21 15:48:53 +09:00
kaffa
0fbce86cfc outline: route via APISIX (port 9443, ApisixRoute CRD), not Traefik
Switched Bunny iron-kr-nowaf origin from :443 (Traefik) to :9443 (APISIX,
no SafeLine plugin) since APISIX plugins are per-route. Used existing
:9443 path (juiceshop already there) instead of opening a new OpenWrt
port. Outline route managed via ApisixTls + ApisixRoute CRDs because
admin-API direct PUTs get swept by apisix-ingress-controller as orphans.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 10:08:16 +09:00
kaffa
a20c68e3a1 outline: split to iron-kr-nowaf pull zone, restore iron-kr WAF rules
Created new Bunny pull zone iron-kr-nowaf (ID 5720695) without Shield to
host outline.inouter.com exclusively. Uploaded *.inouter.com wildcard cert
from cert-manager since Bunny LE auto-provision kept returning invalid.
Restored 7 CRS rules (942100,932230/235/260/370/380,933160) on iron-kr
Shield so vault/n8n/telegram-webhook/jarvis regain protection.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 09:32:11 +09:00
kaffa
5d0632cb68 backup: install Velero v1.18 (chart 12.0.0) + daily-full schedule to R2 velero-backup 2026-04-20 10:12:21 +09:00
kaffa
a2884a60d8 backup: add k8s VolumeSnapshot API (snapshot-controller v8.5.0) as Velero prereq; fix democratic-csi restart loop 2026-04-20 09:06:48 +09:00
kaffa
7d58e159af metallb: raise controller mem limit 64Mi→256Mi (OOM fix) 2026-04-20 08:20:39 +09:00
heimdall
7395446478 docs: add _index.md MOC to all directories 2026-04-16 13:46:06 +09:00
heimdall
226b377387 kine pgx multi-host 직결: HAProxy 의존 제거, API 다운타임 <1s 2026-04-16 12:34:53 +09:00
heimdall
33ce94a75a pgpool 전면 전환 + pgcat 퇴역: postgresql-ha.md 전면 갱신 2026-04-16 12:24:39 +09:00
heimdall
0d59adb95f pgpool-II PoC (n8n 전용 전환) + postgresql-ha.md 섹션 추가 2026-04-16 08:25:02 +09:00
heimdall
125413d083 pgcat+Patroni TCP keepalive 적용: 좀비 소켓 방지 (Step 1 옵션 B) 2026-04-16 07:26:37 +09:00
heimdall
a7ecd4b982 pgcat HA 승격 (Step 0): replicas=2 + podAntiAffinity + PDB 2026-04-15 17:21:13 +09:00
syn
ad230522be infra/crowdsec-safeline: remove APISIX → CrowdSec (:8085) legacy section
Verified removed across all 3 sites:
- K3s APISIX: no http-logger plugin in global_rules/routes/services/plugin_configs
- CrowdSec: no apisix-logs HTTP acquisition file, :8085 not listening
- Osaka APISIX: http-logger exists but targets VictoriaLogs (vector.inouter.com), not legacy

Runtime verification via cs_parser_hits metrics: only source is
https://vl.inouter.com/ (victorialogs type).

Split detailed findings to history/2026-04-15-apisix-http-logger-removal.md.
2026-04-15 16:31:18 +09:00
kappa
b24d10d156 vault-mcp-server 실 아키텍처 정정 (중복 아님, jp1 단일 인스턴스)
- infra/vault.md MCP 서버 섹션 전체 재작성: K3s Deployment 아니라 Pod 없는 리버스 프록시 파사드, 세 접근 경로 모두 jp1 Incus vault 컨테이너(10.253.101.58)로 수렴
- 과거 오류 정정 callout 추가: vault-active.vault.svc.cluster.local 경로 실존 안 함, hcv/mcp URL은 Vault UI로 307 (올바른 MCP 경로는 vault-mcp.inouter.com/mcp)
- history/2026-04-15-vault-mcp-duplicate-investigation.md 인시던트 기록

근거: Heimdall 조사 (Outline 5b6ddffa) + kappa 로컬 확인 (jp1 systemd active + 활성 트래픽)
2026-04-15 13:29:18 +09:00
kappa
220157e948 history 중복 제거: longhorn-label-typo (헤임달의 longhorn-backup-label-typo로 통합) 2026-04-15 11:26:55 +09:00
heimdall
f55e1cffb4 Longhorn recurring job 라벨 오타 수정 + history 기록
critical/standard 18 볼륨이 recurringjob-group (대시 누락) 으로 라벨
붙어 3주간 백업 전무. recurring-job-group 으로 재라벨 + backup.md 에
라벨 키 규약 명시.
2026-04-15 10:52:06 +09:00
kappa
703d5609ec Longhorn recurring-job 라벨 키 오타 정정 + 인시던트 기록
- infra/k3s-backup.md: recurringjob-group → recurring-job-group (대시 포함). silent failure 주의 callout 추가
- history/2026-04-15-longhorn-label-typo.md: 18볼륨 백업 미동작 인시던트 기록
2026-04-15 08:32:13 +09:00
kappa
2356b86d36 obsidian: 정본 문서에서 히스토리/인시던트 분리 완료
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>
2026-04-10 12:09:21 +09:00
kappa
72750cfc9d obsidian: 정본에서 변경 이력 분리, history/ 도입
- history/README.md: 변경 이력/인시던트 기록 규약
- history/2026-04-10-edge-cleanup.md: 오늘의 엣지 정리·인시던트·복구 전체 연대기
- infra/cloudflare.md: 연대기 주석/strikethrough/인시던트 서사 제거, 현재 사실만
- infra/crowdsec-safeline.md: 인시던트 bullet 제거, 과거 이력은 history/ 참조
- services/bunnycdn-security.md: sitekey 이력표 제거, 현재 위젯 정보만
- infra/nas-storage.md: reverse proxy 섹션의 날짜 주석 제거
2026-04-10 11:38:36 +09:00