HTTPS 인증서와 cert-manager
HTTPS 인증서가 필요한 이유, 갱신이 필요한 이유, cert-manager가 어떤 도움을 주는지 정리
HTTPS 인증서는 서버와 클라이언트 간 통신을 암호화하고, 서버의 신원을 확인하는 데 사용되는 디지털 문서
이를 통해 데이터 도청과 중간자 공격(Man-in-the-Middle)을 방지 가능
- HTTP vs HTTPS:
- HTTP는 암호화 없이 데이터를 전송. 민감한 정보에 부적합
- HTTPS는 인증서를 사용하여 암호화된 안전한 통신 제공
1. 인증서가 왜 필요한가?
- 사용자가 사이트에 접속할 때 “정말 이 서버가 믿을 수 있는 서버인가?”를 판단해야 함
- 인증서는 제3자인 인증기관(CA)이 서버의 신원을 보증하는 구조
- HTTPS 통신을 통해 데이터가 암호화되어 전송됨
2. 왜 인증서를 갱신해야 하나?
- 인증서는 보통 90일 ~ 1년 주기로 유효기간이 있음
- 갱신하지 않으면 브라우저가 접속을 차단하거나 ‘주의 요함’ 경고 발생
- 키 유출/위조 방지와 보안 강화를 위해 짧은 유효기간이 선호됨
- Let’s Encrypt는 기본적으로 90일 유효기간을 제공함
3. Kubernetes에서 cert-manager의 역할
- cert-manager는 인증서 발급/갱신/관리 자동화 도구
- Let’s Encrypt 같은 CA와 연동 가능
- ingress 리소스와 연동되어 HTTPS 자동 설정 가능
- 예시 사용법:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: enginrect-cert namespace: default spec: secretName: enginrect-tls issuerRef: name: letsencrypt-prod kind: ClusterIssuer commonName: www.enginrect.com dnsNames: - www.enginrect.com - api.enginrect.com
- 발급된 인증서는 Secret 리소스로 저장되고 Ingress에서 참조 가능:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: enginrect-ingress annotations: cert-manager.io/cluster-issuer: "letsencrypt-prod" spec: tls: - hosts: - www.enginrect.com secretName: enginrect-tls rules: - host: www.enginrect.com http: paths: - path: / pathType: Prefix backend: service: name: web-service port: number: 80
This post is licensed under CC BY 4.0 by the author.