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