88 lines
3.7 KiB
Markdown
88 lines
3.7 KiB
Markdown
---
|
|
title: APISIX 설정 및 운영
|
|
updated: 2026-03-16
|
|
---
|
|
|
|
## 아키텍처
|
|
|
|
2개의 독립 APISIX 인스턴스, BunnyCDN pull zone으로 분리. kr1의 Docker APISIX는 2026-03-15 제거 완료.
|
|
|
|
### 오사카 (apisix-osaka)
|
|
```
|
|
BunnyCDN(inouter, ID 5316471) → apisix-osaka(172.233.93.180) → 백엔드
|
|
```
|
|
- 용도: Ironclad 인프라 서비스 (ironclad.it.com, n8n, twilio 등)
|
|
- 보안: SafeLine WAF + CrowdSec 연동
|
|
- upstream: incus-jp1 내부(10.253.x), K3s Traefik
|
|
|
|
### 서울 (kr2, incus 컨테이너)
|
|
```
|
|
인터넷 → OpenWrt(:80/:443) → hp2(:9080/:9443, incus proxy device) → APISIX(10.179.99.126) → 백엔드
|
|
```
|
|
- 용도: KR존 리버스 프록시
|
|
- upstream: K3s Traefik (192.168.9.134/214/135:443), LAN 서비스(192.168.9.x)
|
|
- SSL: cert-manager wildcard `*.inouter.com` 인증서
|
|
- Admin API: `curl http://10.179.99.126:9180/apisix/admin` (incus proxy device, 192.168.9.0/24에서 접근 가능)
|
|
- etcd: apisix-etcd (10.179.99.101)
|
|
|
|
#### global_rules
|
|
- `real-ip` — source: http_x_real_ip, trusted: 0.0.0.0/0
|
|
- `chaitin-waf` — mode: block, SafeLine detector: 10.165.246.10:8000 (OVN 네트워크, plugin_metadata)
|
|
- `http-logger` → CrowdSec (10.253.100.240:8085, 인증: apisix-crowdsec-log-2024)
|
|
|
|
#### 라우트 및 limit-req
|
|
|
|
| 라우트 ID | 호스트 | upstream | limit-req (rate/burst) |
|
|
|-----------|--------|----------|----------------------|
|
|
| gitea-anvil-it-com | gitea.anvil.it.com | 192.168.9.100:8418 | 50/30 |
|
|
| hcv-inouter-com | hcv.inouter.com | K3s Traefik :443 (roundrobin) | 20/10 |
|
|
| nocodb | nocodb.inouter.com | K3s Traefik :443 (roundrobin) | 100/50 |
|
|
| nocodb-nuxt | nocodb.inouter.com | K3s Traefik :443 (roundrobin) | 100/50 |
|
|
|
|
### BunnyCDN Pull Zone 매핑
|
|
|
|
| Zone | Origin | 방향 | 주요 Hostnames |
|
|
|---|---|---|---|
|
|
| inouter (5316471) | 172.233.93.180 | → 오사카 | anvil.it.com, vault.inouter.com, n8n, kroki, tg.anvil.it.com |
|
|
| actions (5330178) | 220.120.65.245 | → 서울 | actions.it.com, gitea.anvil.it.com, hcv.inouter.com, nocodb.inouter.com |
|
|
|
|
## ironclad.it.com 라우트
|
|
|
|
ironclad.it.com Cloudflare DNS origin: 172.233.93.180 (osaka), zone ID: bc8761b398cc52cf731f804bd3cbf388. APISIX 라우트 ironclad-it-com → web 컨테이너 10.253.100.159:80. SSL: Google Trust Services wildcard cert (*.ironclad.it.com) in APISIX. → [[cert-manager]]
|
|
|
|
## SSL ID 규칙
|
|
|
|
APISIX SSL ID는 도메인 MD5 해시 앞 16자리
|
|
|
|
## 플러그인
|
|
|
|
APISIX 연동: ip-restriction + geoip-restriction 플러그인
|
|
|
|
## Twilio 라우트
|
|
|
|
APISIX 라우트 ID: twilio-jp-inouter-com → [[twilio]]
|
|
|
|
## Gitea POST 변환
|
|
|
|
[[gitea]]가 POST 미지원(AuthenticateNotImplemented, 404)하므로 APISIX에서 POST body 파라미터를 GET query string으로 변환
|
|
|
|
## hcv.inouter.com 라우트
|
|
|
|
APISIX 서울 라우트 hcv-inouter-com → K3s Traefik (192.168.9.134/214/135:443, roundrobin, scheme https). upstream ID: hcv-inouter-com. [[vault]] UI/API 서빙. DNS: k3s.inouter.com CNAME (LAN 직접 연결, BunnyCDN 우회). BunnyCDN pull zone actions (ID 5330178)에 hostname 등록. 오사카에서 서울로 이전 (2026-03-15).
|
|
|
|
## nocodb.inouter.com 라우트
|
|
|
|
트래픽 흐름: Cloudflare DNS (A 220.120.65.245, BunnyCDN 우회) → OpenWrt(:443) → hp2(:9443, incus proxy device) → APISIX(10.179.99.126, 라우트 nocodb/nocodb-nuxt) → K3s Traefik (192.168.9.134/214/135:443, roundrobin, scheme https) → nocodb svc:8080 (namespace tools).
|
|
|
|
BunnyCDN WAF가 NocoDB JS를 오탐 차단하여 CDN 우회 처리 (2026-03-15).
|
|
|
|
## CrowdSec 로그 연동
|
|
|
|
오사카/서울 양쪽 APISIX → CrowdSec (10.253.100.240:8085) http-logger global_rules로 전송.
|
|
|
|
인증: Authorization: apisix-crowdsec-log-2024
|
|
|
|
커스텀 파서: custom/apisix-json-logs (403 응답만 필터)
|
|
|
|
시나리오 매칭으로 반복 공격자 탐지.
|