From fb5a34ebcc2a4720442cdaa012016844971834d6 Mon Sep 17 00:00:00 2001 From: kappa Date: Fri, 10 Apr 2026 00:36:19 +0900 Subject: [PATCH] =?UTF-8?q?edge=20gateway:=20"APISIX=20=3D=20SafeLine=20WA?= =?UTF-8?q?F=20=EC=A0=84=EC=9A=A9"=20=ED=91=9C=ED=98=84=20=EC=A0=95?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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). --- infra/apisix.md | 6 +++--- infra/crowdsec-safeline.md | 2 +- infra/gateway-api.md | 4 ++-- infra/infra-hosts.md | 2 +- infra/k3s-migration.md | 6 +++--- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/infra/apisix.md b/infra/apisix.md index 0642d91..720e111 100644 --- a/infra/apisix.md +++ b/infra/apisix.md @@ -43,11 +43,11 @@ BunnyCDN(iron-jp, ID 5555247) → apisix-osaka(172.233.93.180) → 백엔드 - 보안: SafeLine WAF + CrowdSec 연동 - upstream: incus-jp1 내부(10.253.x), K3s Traefik -### 서울 (K3s 새 클러스터, apisix 네임스페이스) — SafeLine WAF 전용 +### 서울 (K3s 새 클러스터, apisix 네임스페이스) — 독립 외부 인입 게이트웨이 ``` 외부 → OpenWrt HAProxy(:9080/:9443) → MetalLB 192.168.9.50(80/443) → APISIX(replica 2) → K3s 서비스 ``` -- 용도: SafeLine WAF 전용 리버스 프록시 (메인 라우팅은 Traefik으로 이전) +- 용도: **Traefik(VIP 192.168.9.53)과 동등한 병렬 독립 LoadBalancer gateway**. "SafeLine WAF 전용" 이 아니라, 2026-03-25 에 메인 HTTP 라우팅을 Traefik 으로 이전한 이후 현재 APISIX 에는 `juiceshop.keepanker.cv` 1건만 남아 있고 그것이 chaitin-waf 플러그인으로 SafeLine 통합 테스트 용도라 **결과적으로 현재만** SafeLine 테스트 전용처럼 보일 뿐 — 언제든 새 ApisixRoute 추가 가능한 범용 gateway. - 클러스터: K3s 새 클러스터 (Supabase PostgreSQL 백엔드, kr2+kr1+hp2) - 배포: K3s apisix 네임스페이스, **Deployment replica 2** (2026-04-04 HA 업그레이드) - APISIX: 3.15.0-ubuntu @@ -57,7 +57,7 @@ BunnyCDN(iron-jp, ID 5555247) → apisix-osaka(172.233.93.180) → 백엔드 - etcd: **K3s 내부 apisix-etcd StatefulSet 3 replicas** (Bitnami etcd 차트, Longhorn PVC 5Gi × 3), prefix `/apisix`. ClusterIP `apisix-etcd.apisix.svc.cluster.local:2379`. 외부 통합 etcd로 잠시 이전했다가(2026-04-06) Patroni와의 장애 격리 + 네트워크 단순화를 위해 K3s 내부로 복귀(2026-04-08). - Admin API: `apisix-admin` ClusterIP :9180 (`adminKey: edd1c9f034335f136f87ad84b625c8f1`). admin allow IPs: `127.0.0.1/24`, `10.42.0.0/16`(pod), `10.43.0.0/16`(svc), `192.168.9.0/24`(LAN), `100.64.0.0/10`(Tailscale) - HAProxy: OpenWrt에서 :9080→192.168.9.50:80, :9443→192.168.9.50:443 (MetalLB) -- 2026-03-25 메인 라우팅 역할을 Traefik으로 이전, APISIX는 SafeLine WAF 전용으로 축소 +- 2026-03-25 메인 HTTP 라우팅을 Traefik 으로 이전. APISIX route 축소되어 현재 juiceshop 1건만 (SafeLine chaitin-waf 통합 테스트). **APISIX 자체는 여전히 독립 외부 LoadBalancer gateway — MetalLB VIP 별도 유지** - 2026-04-08 ApisixRoute CRD 사용을 위해 ingress controller 복구 + K3s 내부 etcd 복귀 #### plugin_metadata (GatewayProxy CR로 관리) diff --git a/infra/crowdsec-safeline.md b/infra/crowdsec-safeline.md index aba85db..43358e5 100644 --- a/infra/crowdsec-safeline.md +++ b/infra/crowdsec-safeline.md @@ -279,7 +279,7 @@ Kappa 계정용 `cs-cf-worker-bouncer`와 별도 컨테이너로 분리 운영. ## iron-kr-waf BunnyCDN Pull Zone (구 waf-kr) -APISIX SafeLine WAF 전용. +APISIX 외부 인입 경로 (juiceshop SafeLine 통합 테스트 용도). APISIX 자체는 독립 LoadBalancer gateway (MetalLB 192.168.9.50) 이지 "SafeLine 전용" 이 아님 — 현재 1 route 가 SafeLine 용일 뿐. | 항목 | 값 | |------|-----| diff --git a/infra/gateway-api.md b/infra/gateway-api.md index 9ca5b0b..1f79737 100644 --- a/infra/gateway-api.md +++ b/infra/gateway-api.md @@ -11,8 +11,8 @@ K3s 메인 라우팅을 Traefik이 담당 (2026-03-25 APISIX에서 전환). ### 전환 이력 - 2026-03-21: K3s Ingress → Gateway API 전환 (기존 클러스터, Traefik v3.6.9) - 2026-03-24: 새 클러스터(kr2)에서 APISIX + Ingress Controller 2.0으로 구성 -- 2026-03-25: APISIX Ingress Controller의 Gateway API 플러그인 제한으로 **Traefik으로 교체** - - APISIX는 SafeLine WAF 전용 replica 1로 축소 +- 2026-03-25: APISIX Ingress Controller의 Gateway API 플러그인 제한으로 **메인 HTTP 라우팅을 Traefik 으로 교체** + - APISIX 는 여전히 독립 LoadBalancer (MetalLB VIP 192.168.9.50) 로 운영 중, 다만 route 는 `juiceshop.keepanker.cv` 1건만 남아 SafeLine chaitin-waf 플러그인 통합 테스트 용도. Traefik 과 동등한 병렬 gateway 로 언제든 새 route 추가 가능. ## Traefik 배포 (새 클러스터) diff --git a/infra/infra-hosts.md b/infra/infra-hosts.md index f465808..5cc6b2b 100644 --- a/infra/infra-hosts.md +++ b/infra/infra-hosts.md @@ -36,7 +36,7 @@ tags: [infra, network, kr-zone, openwrt] > anvil/ironclad ns는 삭제됨. system-upgrade ns도 현재 없음. vault ns는 빈 상태로 ClusterIP 서비스(`vault-external`)만 잔존 — 실제 Vault 서버는 jp1 incus 컨테이너로 이전됨 (아래 "서비스 위치" 참조). -게이트웨이: Traefik (메인) + APISIX (SafeLine WAF 전용), 2026-03-25 전환 +게이트웨이: 두 독립 LoadBalancer 병렬 운영 — Traefik (MetalLB VIP 192.168.9.53, 메인 라우팅 14 HTTPRoute + 5 legacy IngressRoute) + APISIX (MetalLB VIP 192.168.9.50, 2026-03-25 축소 이후 `juiceshop.keepanker.cv` 1 route · chaitin-waf SafeLine 통합) - Traefik DaemonSet, MetalLB LoadBalancer 192.168.9.53 + Gateway API - APISIX Deployment **replica 2**, MetalLB LoadBalancer 192.168.9.50, SafeLine WAF chaitin-waf 플러그인 연동, Admin API 수동 관리 - APISIX etcd: 통합 etcd 클러스터 사용 (K3s 내 StatefulSet 삭제, 2026-04-06). prefix `/apisix-seoul` diff --git a/infra/k3s-migration.md b/infra/k3s-migration.md index fc1e677..c02f14e 100644 --- a/infra/k3s-migration.md +++ b/infra/k3s-migration.md @@ -35,7 +35,7 @@ tags: [k3s, migration, postgresql, supabase] | Pod CIDR | 10.42.0.0/16 | | Service CIDR | 10.43.0.0/16 | | tls-san | k3s.inouter.com, 192.168.9.135, 100.119.109.41 | -| 게이트웨이 | Traefik (메인, DaemonSet LoadBalancer 192.168.9.53) + APISIX (SafeLine WAF 전용, LB 192.168.9.50) | +| 게이트웨이 | 두 독립 LoadBalancer 병렬: Traefik (DaemonSet, MetalLB 192.168.9.53, 메인 HTTPRoute 라우팅) + APISIX (Deployment replica 2, MetalLB 192.168.9.50, 현재 juiceshop 1 route · chaitin-waf SafeLine 통합) | | LB | MetalLB L2 (192.168.9.50-59), K3s ServiceLB 비활성화 | | 스토리지 | Longhorn v1.8.2 | | 인증서 | cert-manager + Google Trust Services (와일드카드 8개, Reflector) | @@ -64,7 +64,7 @@ tags: [k3s, migration, postgresql, supabase] - kr2 첫 server 구성, Supabase PostgreSQL 연결 - cert-manager + 와일드카드 인증서 6개 + Reflector - Traefik DaemonSet (hostPort 80/443) + Gateway API -- APISIX replica 1 (SafeLine WAF 전용, Ingress Controller 제거) +- APISIX replica 1 (초기엔 SafeLine WAF 테스트 라우트 1건, Ingress Controller 제거). 2026-04-04 에 replica 2 HA 로 확장 - HAProxy 80/443 → Traefik hostPort 복원 - Longhorn v1.8.2 @@ -104,7 +104,7 @@ tags: [k3s, migration, postgresql, supabase] | Namespace | 서비스 | 비고 | |-----------|--------|------| | kube-system | Traefik (LB .53) | 메인 라우팅 | -| apisix | APISIX (LB .50) | SafeLine WAF 전용 | +| apisix | APISIX (LB .50) | 독립 외부 gateway (Traefik 과 병렬). 현재 route juiceshop 1건 (SafeLine 통합 테스트) | | sshpiper | sshpiper (LB .51) | SSH 리버스 프록시 | | teleport | Teleport (LB .52) | 접근 관리 | | metallb-system | MetalLB | L2 LB |