cert-manager

지원 버전: cert-manager 1.16+, Kubernetes 1.31, 1.32, 1.33 마지막 업데이트: 2026년 2월 25일

cert-manager는 Kubernetes 클러스터 내에서 TLS 인증서의 발급, 갱신, 폐기를 자동화하는 CNCF Graduated 프로젝트입니다. X.509 인증서의 전체 수명주기를 Kubernetes 네이티브 방식으로 관리할 수 있습니다.

목차


개요

인증서 자동화의 필요성

수동 인증서 관리의 문제점:

문제
설명

만료 위험

인증서 갱신 누락으로 인한 서비스 장애

확장성 부족

마이크로서비스 환경에서 수백 개 인증서 수동 관리 불가

보안 취약점

긴 유효기간의 인증서 사용으로 인한 보안 위험

운영 부담

인증서 발급/갱신/폐기에 대한 반복 작업

일관성 부재

팀/서비스별 상이한 인증서 관리 방식

cert-manager의 주요 기능

기능
설명

자동 발급

Certificate CR 생성 시 자동으로 인증서 발급

자동 갱신

만료 전 자동 갱신 (기본 만료 30일 전)

다중 Issuer

Let's Encrypt, Vault, AWS PCA 등 다양한 발급자 지원

Ingress 통합

Ingress 어노테이션으로 자동 인증서 프로비저닝

Gateway API

Gateway API의 TLS 구성 자동화

서비스 메시

Istio, Linkerd와 통합하여 mTLS 인증서 관리

CNCF Graduated 프로젝트

cert-manager는 2022년 CNCF Graduated 프로젝트로 승격되었습니다. 이는 프로젝트의 성숙도, 채택률, 거버넌스가 프로덕션 환경에서 검증되었음을 의미합니다.


아키텍처

구성요소

spinner

구성요소 상세

구성요소
역할
설명

controller

핵심 컨트롤러

Certificate, Issuer 리소스 감시 및 인증서 수명주기 관리

webhook

Admission Webhook

CRD 유효성 검증, 기본값 설정, 버전 변환

cainjector

CA 번들 주입

ValidatingWebhookConfiguration, MutatingWebhookConfiguration에 CA 번들 자동 주입


설치

Helm을 사용한 설치

프로덕션 환경 권장 설정

설치 확인


핵심 개념

리소스 관계도

spinner

Certificate

Certificate 리소스는 원하는 인증서의 명세를 정의합니다.

Issuer vs ClusterIssuer

특성
Issuer
ClusterIssuer

범위

단일 네임스페이스

클러스터 전체

사용 사례

팀/앱별 독립적인 발급자

공유 발급자 (Let's Encrypt 등)

Secret 위치

동일 네임스페이스

cert-manager 네임스페이스

RBAC

네임스페이스 권한으로 제어

클러스터 관리자 권한 필요

CertificateRequest

CertificateRequest는 Certificate 컨트롤러가 자동으로 생성하는 리소스입니다. 직접 생성하는 경우는 드물지만, 외부 시스템과 통합 시 유용합니다.


Issuer 유형

유형별 비교

Issuer 유형
사용 사례
장점
단점

SelfSigned

개발/테스트, 부트스트랩 CA

즉시 발급, 외부 의존성 없음

브라우저 신뢰 불가

CA

내부 PKI, 프라이빗 서비스

전체 제어 가능, 비용 없음

CA 관리 필요

ACME

퍼블릭 웹사이트

무료, 자동화, 브라우저 신뢰

Rate Limit, 도메인 소유 필요

AWS PCA

엔터프라이즈 프라이빗 PKI

AWS 통합, 규정 준수

비용 발생

Vault PKI

복잡한 PKI 요구사항

유연성, 감사 로그

운영 복잡성

SelfSigned Issuer

개발/테스트 환경이나 Root CA 부트스트랩에 사용합니다.

Root CA 부트스트랩 패턴:

CA Issuer

기존 CA 인증서와 개인키를 사용하여 인증서를 발급합니다.

ACME Issuer (Let's Encrypt)

인증서 발급 흐름

spinner

HTTP-01 솔버

HTTP-01은 웹 서버를 통해 도메인 소유권을 증명합니다.

DNS-01 솔버 (Route53 + IRSA)

DNS-01은 DNS TXT 레코드를 통해 도메인 소유권을 증명합니다. 와일드카드 인증서 발급에 필수입니다.

IRSA 설정:

와일드카드 인증서

AWS Private CA Issuer

AWS Private Certificate Authority와 통합하여 프라이빗 인증서를 발급합니다.

Vault PKI Issuer

HashiCorp Vault의 PKI Secrets Engine과 통합합니다.

Vault PKI 설정:


EKS 통합 패턴

ACM vs cert-manager 비교

항목
AWS ACM
cert-manager

비용

퍼블릭 인증서 무료

무료 (인프라 비용만)

로드밸런서

ALB, NLB 네이티브 통합

Ingress/Gateway 통합

TLS 종단

로드밸런서에서 종단

Pod에서 종단 가능

프라이빗 인증서

ACM PCA (유료)

CA Issuer (무료)

와일드카드

지원

DNS-01로 지원

자동 갱신

자동

자동

Kubernetes 네이티브

아니오

멀티 클러스터

리전별 관리

GitOps로 통합 관리

서비스 메시

별도 구성 필요

istio-csr 통합

ALB Ingress + ACM

ACM 인증서를 ALB Ingress Controller와 함께 사용:

Ingress-nginx + cert-manager

Ingress-nginx와 cert-manager를 통합하여 자동 TLS:

NLB + TLS 종단

NLB에서 TLS를 종단하는 경우:

Gateway API + cert-manager

Gateway API와 cert-manager 통합:


서비스 메시 통합

Istio + istio-csr

istio-csr는 Istio의 워크로드 인증서를 cert-manager를 통해 발급합니다. 이를 통해 Istio의 mTLS를 외부 PKI와 통합할 수 있습니다.

istio-csr 아키텍처

spinner

istio-csr 설치

Istio CA Issuer 설정

Istio 설치 (istio-csr 사용)

Linkerd + trust-manager

Linkerd는 Trust Anchor를 통해 mTLS를 구현합니다. cert-manager와 trust-manager를 사용하여 인증서를 관리할 수 있습니다.


trust-manager

trust-manager는 cert-manager 프로젝트의 일부로, 여러 네임스페이스에 CA 번들을 배포하고 동기화합니다.

설치

Bundle 리소스

사용 예시


모니터링 및 트러블슈팅

Prometheus 메트릭

cert-manager는 다음 메트릭을 노출합니다:

메트릭
설명

certmanager_certificate_ready_status

인증서 Ready 상태

certmanager_certificate_expiration_timestamp_seconds

인증서 만료 시간

certmanager_certificate_renewal_timestamp_seconds

다음 갱신 시간

certmanager_controller_sync_call_count

컨트롤러 동기화 횟수

certmanager_http_acme_client_request_count

ACME 클라이언트 요청 횟수

Grafana 대시보드:

PrometheusRule for 알림:

인증서 상태 확인

cmctl CLI

cmctl은 cert-manager 전용 CLI 도구입니다.

일반적인 문제 해결

DNS 전파 지연 (DNS-01)

해결 방법:

  • DNS 전파 대기 시간 증가: --dns01-recursive-nameservers-only --dns01-recursive-nameservers=8.8.8.8:53

Let's Encrypt Rate Limit

제한
설명

도메인당 인증서

50/주

동일 도메인에 대한 인증서 발급 제한

중복 인증서

5/주

동일한 도메인 세트에 대한 인증서

실패한 검증

5/시간

동일 계정, 호스트명, 시간당

계정 등록

10/IP/3시간

신규 ACME 계정 등록

해결 방법:

  • 스테이징 서버에서 테스트: https://acme-staging-v02.api.letsencrypt.org/directory

  • 와일드카드 인증서 사용으로 인증서 수 감소

  • 인증서 재사용 (Secret 백업)

Webhook 타임아웃

해결 방법:

  • Webhook 타임아웃 증가: --webhook-timeout=30s

  • Webhook replica 수 증가


모범 사례

갱신 버퍼 설정

  • 권장: 유효기간의 1/3 지점에서 갱신

  • 최소: 만료 14일 전

백업 CA 전략

프로덕션 환경에서는 여러 Issuer를 구성하여 장애에 대비합니다:

멀티 테넌트 Issuer 전략

전략
구현
장점
단점

단일 ClusterIssuer

모든 네임스페이스가 공유

관리 단순

격리 부족

네임스페이스별 Issuer

각 네임스페이스에 Issuer

팀별 독립성

관리 복잡

하이브리드

공용 ClusterIssuer + 팀별 Issuer

유연성

정책 일관성 필요

개인키 관리

Secret 템플릿


요약 및 참고 자료

핵심 정리

개념
설명

Certificate

원하는 인증서 명세 정의

Issuer

네임스페이스 범위 인증서 발급자

ClusterIssuer

클러스터 범위 인증서 발급자

CertificateRequest

발급 요청 (자동 생성)

Order

ACME 주문 (자동 생성)

Challenge

도메인 검증 (자동 생성)

Issuer 선택 가이드

사용 사례
권장 Issuer

개발/테스트 환경

SelfSigned

내부 마이크로서비스

CA Issuer

퍼블릭 웹사이트

ACME (Let's Encrypt)

엔터프라이즈 프라이빗 PKI

AWS PCA, Vault PKI

서비스 메시 mTLS

istio-csr + CA Issuer

참고 자료

공식 문서:

AWS 관련:

Let's Encrypt:

HashiCorp Vault:

마지막 업데이트