Kubernetes 환경에서 cert-manager + Cloudflare DNS-01 방식을 사용하여
와일드카드 SSL 인증서를 자동 발급 및 자동 갱신하려고 한다.
1. Cloudflare API 토큰 발급 (DNS 편집 권한)

Permissions: Zone → DNS → Edit
Zone Resources: Include → Specific zone → example.com (자기 도메인)
이 토큰은 cert-manager가 Cloudflare DNS에 TXT 레코드를 자동 생성할 때 사용된다.
2. 토큰 정상확인
curl "https://api.cloudflare.com/client/v4/user/tokens/verify" \ -H "Authorization: Bearer <발급 받은 토큰>"
정상 응답 예:
{"result":{"id":"50085ca2361196445cbb8d1c7a2413eb","status":"active"},"success":true,"errors":[],"messages":[{"code":10000,"message":"This API Token is valid and active","type":null}]}
3. Kubernetes Secret 생성 (API 토큰 저장)
kubectl create secret generic cloudflare-api-token-secret \
--from-literal=api-token="여기에_아까_복사한_토큰"
-n cert-manager
4. ClusterIssuer 생성 (DNS-01 + Cloudflare 설정)
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-dns01
spec:
acme:
email: 너의_이메일@example.com
server: https://acme-v2.api.letsencrypt.org/directory
privateKeySecretRef:
name: letsencrypt-dns01-account-key
solvers:
- dns01:
cloudflare:
apiTokenSecretRef:
name: cloudflare-api-token-secret
key: api-token
5. 와일드카드 Certificate 리소스 생성
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: wildcard-example-com
namespace: cert-manager # TLS Secret이 어디 생성될지 여기로 결정됨
spec:
secretName: wildcard-example-com-tls
issuerRef:
name: letsencrypt-dns01
kind: ClusterIssuer
dnsNames:
- "*.example.com" # 와일드카드
- "example.com" # 루트 도메인도 함께
발급이 성공하면 cert-manager가
wildcard-example-com-tls 이라는 TLS Secret을 자동 생성한다.
이때 metadata.namespace는 https를 적용할 ingress가 있는 ns를 적어야한다.
6. Ingress에서 TLS Secret 사용
tls:
- hosts:
- example.com
- "*.example.com"
secretName: 시크릿이름
이제 Ingress는 와일드카드 인증서를 사용하여
example.com, *.example.com 모든 서브도메인에서 HTTPS를 적용할 수 있다.
'개발' 카테고리의 다른 글
| 가비아에서 Cloudflare로 DNS 네임서버 옮긴 이유 (0) | 2025.10.12 |
|---|---|
| Kubernetes에서 Cert Manager로 HTTPS 인증서 자동 갱신하기 (+ NAT 문제 해결) (0) | 2025.10.12 |
| 객체지향의 본질을 꿰뚫다 (0) | 2025.09.10 |