cert-manager
목적
cert-manager는 Lumie ingress 호스트와 명시적 인증서 리소스의 TLS 발급을 담당 합니다. 이 페이지는 cert-manager 배포, ACME issuer 위치, Cloudflare 토큰 동기화, 네임스페이스 차트 구성과 클러스터 범위 issuer 매니페스트 사이의 경계를 다루는 레퍼런스 문서입니다.
소스 경로
| 경로 | 역할 |
|---|---|
lumie-infra/platform/cert-manager/argocd.yaml | cert-manager용 Argo CD 애플리케이션 |
lumie-infra/platform/cert-manager/helm-values.yaml | 컨트롤러, webhook, cainjector용 Jetstack 차트 값 |
lumie-infra/platform/cert-manager/common-values.yaml | 공유 차트 값과 오래된 clusterIssuers 블록 |
lumie-infra/platform/cert-manager/manifests/vault-static-secret.yaml | Cloudflare API 토큰을 동기화하는 VaultStaticSecret |
lumie-infra/applications/cluster-bootstrap/manifests/cluster-issuer.yaml | 활성 ClusterIssuer 정의 |
lumie-infra/applications/lumie/frontend/manifests/custom-domain.example.yaml | 화이트라벨 커스텀 도메인 ingress 계약 |
lumie-infra/security/teleport/manifests/certificate.yaml | 명시적 Certificate 소비자 예시 |
퍼블릭 표면
| 표면 | 목적 |
|---|---|
cert-manager 컨트롤러 | Certificate와 issuer 리소스를 위한 메인 reconciliation 루프 |
cert-manager-webhook | cert-manager CRD용 admission 및 validation |
cert-manager-cainjector | webhook 기반 리소스용 CA 번들 주입 |
VaultStaticSecret cloudflare-api-token-vss | Cloudflare API 토큰을 cert-manager 네임스페이스로 sync |
ClusterIssuer letsencrypt-prod | 표준 Lumie 도메인을 위한 프로덕션 ACME issuer |
ClusterIssuer letsencrypt-staging | 안전한 테스트용 스테이징 ACME issuer |
ClusterIssuer letsencrypt-customdomain | 운영자가 온보딩한 화이트라벨 도메인을 위한 DNS-01 전용 issuer |
런타임 흐름
활성 Issuer
권위 있는 issuer 정의는 cert-manager 차트 값이 아니라 applications/cluster-bootstrap/manifests/cluster-issuer.yaml에 있습니다.
이 파일은 다음을 정의합니다.
letsencrypt-prod: ingress 수업traefik을 통한 HTTP-01과lumie-infra.com용 Cloudflare DNS-01을 모두 사용letsencrypt-staging:traefik을 통한 HTTP-01 사용letsencrypt-customdomain: 운영자가 온보딩한 테넌트 도메인을 위한 DNS-01 전용 사용
커스텀 도메 인 issuer는 Certificate 또는 Ingress마다 의도적으로 opt-in 방식이며, 운영자가 lumie-infra.com 바깥 도메인도 온보딩할 수 있으므로 dnsZones를 제한하지 않습니다.
Cloudflare 시크릿 동기화
Cloudflare 자격 증명은 Git에 두지 않습니다. Vault에서 동기화됩니다.
apiVersion: secrets.hashicorp.com/v1beta1
kind: VaultStaticSecret
metadata:
name: cloudflare-api-token-vss
spec:
path: tokens
destination:
name: cloudflare-api-token
2026년 6월 14일에 확인한 라이브 클러스터에는 cert-manager 네임스페이스에 cloudflare-api-token-vss가 존재했고, 세 ClusterIssuer 리소스 모두 READY=True를 보고했습니다.
소비자
저장소에서 흔한 패턴은 다음과 같습니다.
- 표준 Lumie 호스트를 위한
cert-manager.io/cluster-issuer: letsencrypt-prod같은Ingressannotation - 화이트라벨 호스트를 위한
letsencrypt-customdomain기반 도메인별 프런트엔드 ingress security/teleport/manifests/certificate.yaml의 Teleport 와일드카드 인증서 같은 명시적Certificate오브젝트
OCI는 TCP passthrough만 수행하므로, 발급된 시크릿은 결국 워커에서 TLS 종료를 수행하는 Traefik이 소비합니다.
계약 드리프트
저장소 내부에 중요한 불일치가 하나 있습니다.
platform/cert-manager/common-values.yaml에는 아직clusterIssuers블록이 남아 있지만,charts/common/templates/에는ClusterIssuer렌더러가 없습니다. 활성 issuer 리소스는 공유 차트 값이 아니라applications/cluster-bootstrap/manifests/cluster-issuer.yaml에서 옵니다.
issuer 동작을 바꿀 때는 먼저 cluster-부트스트랩 매니페스트를 수정하고, clusterIssuers values 블록은 제거되거나 렌더러에 연결되기 전까지 오래된 값으로 취급하세요.
장애 지점
| 장애 지점 | 영향 |
|---|---|
| Cloudflare 토큰 누락 또는 오래됨 | lumie-infra.com 또는 커스텀 도메인의 DNS-01 발급 실패 |
| 잘못된 issuer annotation | ingress가 기대한 TLS 시크릿을 받지 못함 |
| 커스텀 도메인 ingress에 명시적 host 항목 누락 | Traefik이 인증서를 SNI 저장소에 적재하지 못함 |
운영자가 오래된 clusterIssuers values 블록만 수정함 | 라이브 issuer 변경이 전혀 일어나지 않음 |
검증
kubectl get pods -n cert-manager
kubectl get vaultstaticsecret -n cert-manager
kubectl get clusterissuers
rg -n "ClusterIssuer|cert-manager.io/cluster-issuer|cloudflare-api-token-vss" \
lumie-infra/platform/cert-manager \
lumie-infra/applications/cluster-bootstrap \
lumie-infra/applications/lumie \
lumie-infra/security/teleport