Traefik 전환 정리: APISIX→Traefik 메인 라우팅 교체 (2026-03-25)

This commit is contained in:
kappa
2026-03-25 15:20:15 +09:00
parent 96a2728765
commit e916cec273
3 changed files with 54 additions and 82 deletions

View File

@@ -37,65 +37,23 @@ BunnyCDN(inouter, ID 5316471) → apisix-osaka(172.233.93.180) → 백엔드
- 보안: SafeLine WAF + CrowdSec 연동
- upstream: incus-jp1 내부(10.253.x), K3s Traefik
### 서울 (K3s 새 클러스터, apisix 네임스페이스)
### 서울 (K3s 새 클러스터, apisix 네임스페이스) — SafeLine WAF 전용
```
인터넷 → OpenWrt HAProxy(:80/:443) → 3노드 hostPort(80→9080, 443→9443) → APISIX → K3s 서비스 → pods
SafeLine WAF → APISIX(replica 1) → K3s 서비스
```
- 용도: KR존 리버스 프록시
- 용도: SafeLine WAF 전용 리버스 프록시 (메인 라우팅은 Traefik으로 이전)
- 클러스터: K3s 새 클러스터 (Supabase PostgreSQL 백엔드, kr2+kr1+hp2)
- 배포: K3s apisix 네임스페이스, Deployment replica 3, hostPort 80/443
- APISIX: 3.15.0-ubuntu, node_listen 9080, SSL 9443
- **관리 방식: Ingress Controller 2.0.1 + Gateway API CRD** (Admin API 수동 관리 불필요)
- GatewayClass: `apisix` (controllerName: `apisix.apache.org/apisix-ingress-controller`)
- Gateway: `apisix-gateway` (HTTP 9080, HTTPS 9443)
- GatewayProxy: `apisix-proxy` (ControlPlane, apisix-admin:9180)
- 라우트: HTTPRoute/TCPRoute CRD로 관리 → Ingress Controller가 Admin API를 통해 자동 sync
- SSL: Gateway listener에서 cert-manager 와일드카드 시크릿 참조
- `*.inouter.com` (wildcard-inouter-tls)
- `*.anvil.it.com` (wildcard-anvil-it-com-tls)
- `*.actions.it.com` (wildcard-actions-it-com-tls)
- 배포: K3s apisix 네임스페이스, **Deployment replica 1** (축소됨)
- APISIX: 3.15.0-ubuntu
- etcd: apisix-etcd StatefulSet (K3s 내부)
- Admin API: `apisix-admin` ClusterIP (9180), Ingress Controller 전용
- 2026-03-25 Admin API 수동 관리에서 CRD 자동 관리로 전환 완료
- 2026-03-25 메인 라우팅 역할을 Traefik으로 이전, APISIX는 SafeLine WAF 전용으로 축소
- Ingress Controller + Gateway API CRD 제거됨 (GatewayProxy 모드에서 ApisixRoute CRD 미지원, HTTPRoute에 플러그인 개별 적용 불가 문제)
#### 라우트 관리 (CRD 기반)
라우트 추가/수정은 HTTPRoute CRD로:
```yaml
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: my-service
namespace: my-namespace
spec:
hostnames: ["my-service.inouter.com"]
parentRefs:
- name: apisix-gateway
namespace: apisix
rules:
- backendRefs:
- name: my-service-svc
port: 8080
matches:
- path:
type: PathPrefix
value: /
```
플러그인 적용: `apisix.apache.org/plugin-config-name` 어노테이션으로 PluginConfig 참조.
#### global_rules (기존 etcd 직접 등록)
- `real-ip` — source: http_x_real_ip, trusted: 0.0.0.0/0
- `http-logger` → CrowdSec (10.253.100.240:8085, auth_header: apisix-crowdsec-log-2024)
#### 라우트 및 플러그인
| 라우트 ID | 호스트 | upstream | chaitin-waf | limit-req (rate/burst) |
|-----------|--------|----------|-------------|----------------------|
| gitea-anvil-it-com | gitea.anvil.it.com | K3s Traefik :443 (roundrobin) | block, match: `.git/` 제외 | 50/30 |
| hcv-inouter-com | hcv.inouter.com | K3s Traefik :443 (roundrobin) | block | 20/10 |
| nocodb | nocodb.inouter.com | K3s Traefik :443 (roundrobin) | block | 100/50 |
| nocodb-nuxt | nocodb.inouter.com | K3s Traefik :443 (roundrobin) | block | 100/50 |
#### 이전 사유 (2026-03-25)
- Ingress Controller 2.0 GatewayProxy 모드가 ApisixRoute CRD를 sync하지 않음
- Gateway API HTTPRoute에 플러그인 개별 적용 방법이 없음
- global_rules를 Ingress Controller가 덮어쓰려는 충돌 발생
- → Traefik으로 메인 라우팅 교체, APISIX는 SafeLine WAF 연동 전용으로 유지
### BunnyCDN Pull Zone 매핑