cloudflared 핫픽스 + GitOps 정합성 개선
Sprint 69: cloudflared 핫픽스 + GitOps 정합성 개선
Decisions
D1: cloudflared 핫픽스는 AlgoSu 직접 apply 방식 유지, GitOps 편입은 이월
- Context: Cloudflare Error 1033으로 blog.algo-su.com 접근 불가. 근본 원인 진단 과정에서 cloudflared가 ArgoCD 관리 대상이 아님을 발견(
kubectl.kubernetes.io/last-applied-configuration만 존재, ArgoCD tracking-id 없음). GitOps 편입 작업을 동시에 진행할지, 핫픽스만 먼저 적용할지 결정 필요. - Choice: 핫픽스만 먼저
AlgoSu/infra/k3s/cloudflared.yaml경로를 그대로 유지한 채kubectl apply로 즉시 반영. GitOps 편입(69-2)·태그 고정(69-3)·고아 매니페스트 정리(69-4)는 이월. - Alternatives: (a) 핫픽스와 GitOps 편입을 동시 진행 — 서비스 다운타임 연장 위험으로 기각. (b) 클러스터에 직접
kubectl edit만 적용 — 소스 파일과 드리프트 발생으로 기각. - Code Paths:
infra/k3s/cloudflared.yaml
Patterns
해당 없음 (단일 플래그 추가 핫픽스)
Gotchas
G1: cloudflared --metrics 명시 필수 — liveness probe와 포트 정합
- Symptom: cloudflared pod가 28시간 동안 누적 427회 CrashLoopBackOff. 각 사이클에서 pod가 ~88초 기동 후
Initiating graceful shutdown due to signal terminated로그와 함께 종료. blog.algo-su.com에서 간헐적으로 Cloudflare Error 1033(Argo Tunnel error) 노출. - Root Cause: Deployment args에
--metrics플래그가 없어 cloudflared가 metrics/ready 엔드포인트를 랜덤 포트(실측[::]:20241)에서 바인딩. 그러나livenessProbe.httpGet.port: 2000으로 고정돼 있어 probe가dial tcp 10.42.0.216:2000: connection refused로 1275회 실패 → kubelet이 3회 실패 후 SIGTERM → 컨테이너가 Exit 0으로 정상 종료 → CrashLoopBackOff 백오프 루프. - Fix:
args맨 앞에- --metrics/- 0.0.0.0:2000추가. 재배포 후 로그에서Starting metrics server on [::]:2000/metrics확인, 신규 podRunning 1/1유지, 재시작 0회, blog.algo-su.com HTTP 200 복구.
G2: 외부 도메인 라우팅 검증 시 Ingress만 보지 말 것
- Symptom: CD 배포 검증 중
kubectl get ingress결과에 blog 라우트가 없어 "blog는 외부에 노출되지 않았다"고 순간 오해. - Root Cause: blog 서비스는 Ingress를 경유하지 않고
algosu/cloudflaredpod가 Cloudflare Tunnel(QUIC)로 직접 in-clusterblogService(ClusterIP)로 전달. Ingress에는 흔적이 없음. - Fix: 외부 도메인 응답을 확인할 때는 (1)
kubectl get pods | grep cloudflared로 터널 pod 존재 확인, (2) 실제curl -sSI https://<domain>/으로 HTTP 응답 검증, (3) Cloudflare Zero Trust 대시보드 경유 경로 확인.reference_domain.md에 blog 도메인 및 라우팅 메커니즘을 기록해 재발 방지.
G3: cloudflared가 GitOps 관리 외부 — 드리프트 탐지 불가
- Symptom:
kubectl -n argocd get application algosu결과가Synced / Healthy인데도 불구하고 cloudflared는--metrics플래그 없는 상태로 28시간 CrashLoop 상태였음. ArgoCD는 이 문제를 보고하지 않음. - Root Cause: cloudflared Deployment가
kubectl apply -f AlgoSu/infra/k3s/cloudflared.yaml로 직접 적용돼 ArgoCD tracking 대상이 아님. 별도로 aether-gitopsalgosu/base/monitoring/cloudflared.yaml고아 매니페스트도 존재하지만 overlays/prod kustomization에서 참조하지 않아 무시됨. - Fix: (이월) 69-2에서 cloudflared를 aether-gitops base에 편입하고 overlays/prod resources에 포함. 이후
AlgoSu/infra/k3s/cloudflared.yaml삭제, aether-gitopsalgosu/base/monitoring/cloudflared.yaml을 정리(또는 SSoT 승격). 편입 후에는 ArgoCD Health 가 드리프트/장애를 보고할 수 있음.
Metrics
- Commits: 1건 (49b719a)
- Files changed: 1개 (+4/-0)
- 서비스 영향: blog.algo-su.com — 간헐적 Error 1033 상태(28h)에서 HTTP 200 상시 응답으로 복구
- 이월 작업: 3건 (69-2 GitOps 편입, 69-3 태그 고정, 69-4 고아 매니페스트 정리)