Kubernetes – Cert-manager 2025

By | 2025년 6월 1일
Table of Contents

Kubernetes – Cert-manager 2025

Kubernetes 클러스터에 Cert-manager 를 설치합니다.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

용어정리

CA는 Certificate Authority(인증 기관)의 줄임말입니다.

버전 확인

kubectl version
Client Version: v1.29.15
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
Server Version: v1.29.15

# cert-manager version
# 1.18.2

cert-manager 설치

k8s 버전을 확인해서 적절한 버전의 cert-manager 을 설치합니다.

자세한 내용은 여기 에서 확인합니다.

kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.18.2/cert-manager.yaml

용어정리

개념 설명
Issuer 네임스페이스 범위에서 인증서를 발급할 수 있게 해주는 리소스
ClusterIssuer 클러스터 전체 범위에서 인증서 발급 가능
Certificate 실제로 발급받고자 하는 인증서 정의
issuerRef 어떤 Issuer를 사용할지 지정

Root CA 생성을 위한 ClusterIssuer 생성

ClusterIssuer 는 모든 Namespace 에서 사용 가능한 Certificate 를 발행할 수 있습니다.

vi selfsigned-cluster-issuer.yaml
---------------------------
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: selfsigned-cluster-issuer
spec:
  selfSigned: {}
---------------------------
kubectl apply -f selfsigned-cluster-issuer.yaml

Root CA 용 Certificate 발급

vi root-ca.yaml
---------------------------
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: root-ca
  namespace: cert-manager
spec:
  isCA: true
  commonName: "Private CA Cert"
  secretName: root-ca-secret
  duration: 87600h # 10년
  privateKey:
    algorithm: RSA
    size: 2048
    rotationPolicy: Never  # 또는 Always
  issuerRef:
    name: selfsigned-cluster-issuer
    kind: ClusterIssuer
---------------------------
kubectl apply -f root-ca.yaml
kubectl describe secret root-ca-secret -n cert-manager

Root CA 를 통해 발급한 Certificate 의 Issuer 등록

vi ca-cluster-issuer.yaml
---------------------------
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: ca-cluster-issuer
spec:
  ca:
    secretName: root-ca-secret
---------------------------
kubectl apply -f ca-cluster-issuer.yaml

설치상태 확인

kubectl get all -n cert-manager

NameSpace 인증서 발급

vi example-wildcard-cert.yaml
---------------------------
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: example-wildcard-cert
  namespace: example
spec:
  secretName: example-wildcard-tls
  commonName: "*.local.example"
  dnsNames:
    - "*.local.example"
    - "gitlab.example.com"  # 루트 도메인도 포함하려면 명시적으로 작성
  issuerRef:
    name: ca-cluster-issuer
    kind: ClusterIssuer
  duration: 8760h # 1년
  privateKey:
    algorithm: RSA
    size: 2048
    rotationPolicy: Never  # 또는 Always
---------------------------
kubectl create namespace example
kubectl apply -f example-wildcard-cert.yaml

답글 남기기