개발

Cloudflare를 이용해 cert-manager로 와일드카드 인증서 자동 발급하기

ksc036 2025. 10. 12. 17:46

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를 적용할 수 있다.