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 상태 + 후속 정리 항목.
This commit is contained in:
kaffa
2026-04-21 17:13:33 +09:00
parent 71aae4e374
commit 3dfceb81b7
2 changed files with 85 additions and 5 deletions

View File

@@ -31,11 +31,15 @@ ironclad.it.com 공식 홈페이지. 호스팅 상품 소개, 가격표, 회사
→ Worker ironclad-site-{staging|preview|} + R2 ironclad-cache-{staging|preview|prod}
```
| 환경 | Worker | R2 버킷 | 도메인 | 배포 트리거 |
|------|--------|---------|--------|------------|
| production | `ironclad-site` | `ironclad-cache-prod` | `ironclad.it.com` · `www.ironclad.it.com` | manual workflow_dispatch (`deploy-production.yml`) |
| staging | `ironclad-site-staging` | `ironclad-cache-staging` | `staging.ironclad.it.com` | main push 자동 (`deploy-staging.yml`) |
| preview | `ironclad-site-preview` | `ironclad-cache-preview` | `preview.ironclad.it.com` | manual workflow_dispatch (`deploy-preview.yml`) |
| 환경 | Worker | R2 버킷 | 도메인 | 배포 트리거 | 라우팅 방식 |
|------|--------|---------|--------|------------|------------|
| production | `ironclad-site` | `ironclad-cache-prod` | `ironclad.it.com` · `www.ironclad.it.com` | `v*` 태그 push (`deploy-production.yml`) | **zone route** (`pattern: ironclad.it.com/*, zone_name: ironclad.it.com`) — 기존 A record(APISIX 172.233.93.180) 유지, Worker가 엣지에서 가로챔 |
| staging | `ironclad-site-staging` | `ironclad-cache-staging` | `staging.ironclad.it.com` | main push 자동 (`deploy-staging.yml`) | `custom_domain: true` |
| preview | `ironclad-site-preview` | `ironclad-cache-preview` | `preview.ironclad.it.com` | manual workflow_dispatch (`deploy-preview.yml`) | `custom_domain: true` |
**왜 production만 zone route?** apex 도메인(`ironclad.it.com`)은 이미 APISIX origin을 가리키는 A record가 등록되어 있어 wrangler의 `custom_domain` 등록이 실패(`code: 100117`). `custom_domain` 대신 zone route를 쓰면 기존 DNS 레코드를 건드리지 않고 Cloudflare 엣지에서 Worker가 매칭된 요청만 처리. 롤백 시 DNS 수동 복구 불필요.
**전제 조건**: Cloudflare zone에 등록된 Worker route 중 apex를 가로채는 wildcard가 없어야 한다. [[crowdsec-safeline|crowdsec-cloudflare-worker-bouncer]]의 zone route가 `*ironclad.it.com/*`로 오설정되어 있었고 이걸 `*.ironclad.it.com/*`로 수정해야 apex가 `ironclad-site` Worker로 직행 (2026-04-21 조치).
- 공통 KV: `CROWDSECCFBOUNCERNS` (id `9af0d1c1c14a4bc1a3835c2a5b22fd7a`) — CrowdSec bouncer 미들웨어 상태 공유
- 배포 후 smoke test: `curl -skL -w '%{http_code}' https://<domain>/` 5xx면 실패