k8s Secret과 Traefik의 무중단 TLS 핫 리로드 원리
1. Secret의 본질 : 파드가 아니라 "데이터 레코드"
[ Pod (파드) ] [ Secret (시크릿) ]
┌──────────────────────┐ ┌─────────────────────────────────┐
│ 실행 중인 컨테이너 │ │ 쿠버네티스 DB 안의 텍스트 데이터 │
│ (CPU/메모리 먹는 │ VS │ (tls.crt, tls.key 본문 문자열) │
│ 실제 프로세스) │ │ * 프로세스 아님! 단순 데이터! │
└──────────────────────┘ └─────────────────────────────────┘
2. 무중단 실시간 갱신 메커니즘 (ASCII 시각화)
========================================================================================
Certbot 갱신 시 Traefik이 무중단으로 새 인증서를 교체하는 흐름
========================================================================================
1. [호스트 Certbot] (6일 주기 갱신 완료)
│
│ deploy-hook 실행: kubectl apply (Secret 덮어쓰기)
▼
2. [k8s Secret (web-builder-tls)]
┌────────────────────────────────────────────────────────┐
│ 쿠버네티스 내부 DB │
│ 기존 만료 인증서 ──────(내용물 UPDATE)─────▶ 새 인증서 │
└────────────────────────┬───────────────────────────────┘
│
│ 🔔 k8s Watch API 이벤트 실시간 발송!
│ "web-builder-tls Secret이 변경되었습니다!"
▼
3. [Traefik Ingress Pod] (상시 러닝 중)
┌────────────────────────────────────────────────────────┐
│ Traefik Pod │
│ - 파드 재부팅(Restart) 없음! (다운타임 0초) │
│ - 메모리 상에서 구버전 인증서 버리고 새 인증서 로드 │
│ (In-Memory Hot Reload) │
└────────────────────────┬───────────────────────────────┘
│
▼
4. [외부 사용자 접속]
다음 접속자부터 즉시 새 인증서로 암호화(HTTPS) 핸드셰이크 처리 완료!
========================================================================================
3. 핵심 3줄 요약
- Secret은 파드가 아니다: 백그라운드 프로세스가 아니며, 쿠버네티스 DB에 저장된 순수 설정 텍스트(문자열)입니다.
- 이름 그대로 덮어쓴다: 새 리소스를 만드는 게 아니라, 기존
web-builder-tls의 내용물만 UPDATE합니다.
- 무중단 핫 리로드: Traefik은 k8s Watch 이벤트로 Secret 변경을 실시간 감지하여, 파드 재부팅 없이 메모리에서 즉시 새 인증서로 갈아끼웁니다.