spring boot - certmanager를 통해 http2 설정 및 테스트 (1/2)

1. 개요

쿠버네티스를 사용하는 환경에서 spring boot로 서비스 진행을 하다보면, http2를 제공해야되는 상황이 필요할 수 있다.
이때, 쿠버네티스의 cert-manager를 통해서 self-signed 인증서를 발급받아 간편하게 http2 인증을 할 수 있는 방법을 로컬환경과 쿠버네티스 환경에서 사용 및 테스트를 해볼 수 있도록 한다.

이번 문서에서는 쿠버네티스 환경에 cert-manager 배포와 인증을 위한 기본설정에 대해서 알아볼 수 있도록 한다.



2. 준비

http2를 하기 위해선 tls 인증이 기본으로 필요하다. 따라서, tls 인증서를 발급 해주는 cert-manager 설치를 위한 쿠버네티스 환경이 필요하다.
쿠버네티스 환경 구성이 어려운 경우 아래의 방법을 권장한다.

  • Docker Desktop을 이용한 kubernetes 설치
  • WSL2(Ubuntu)를 이용한 microk8s
  • WSL2(Ubuntu)를 이용한 minikube

또한 쿠버네티스에서 패키지 관리를 도와주는 helm도 같이 설치 하는 것을 권장한다.



3. 방법

쿠버네티스에 cert-manager 설치

cert-manager 공식문서를 참고해서 설치 할 수 있도록 한다.
아래는 설치에 필요한 명령어로 맞는 환경에 설치를 진행할 수 있도록 한다.

kubectl apply

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

helm

helm install cert-manager -n cert-manager \
--create-namespace --set installCRDs=true

정상적으로 설치 되었을 경우 다음과 같이 배포되어있는 것을 확인할 수 있다.
helm chart를 이용해서 설치했을 때 다음과 같이 설치된다.

Issuer, Certificate 배포

Issuer란 서명할 수 있는 주체로 인증서를 생성할 수 있다. 이를 통해 self-signed 인증서를 발급 받아서 진행 할 수 있도록 한다.

Issuer 생성

쿠버네티스 환경에서 Issuer는 ClusterIssuerIssuer가 있다.
Issuer의 경우 특정 namespace에 속한 리소스로 해당 namespace에서만 사용할 수 있다.
CluserIssuer의 경우 특정 namespace가 아닌 클러스터 전역으로 사용할 수 있다.

구성과 목적에 맞게 이용하면 되지만, 본 문서에서는 CluserIssuer를 기준으로 설명한다.

# ClusterIssuer 생성
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: selfsigned-issuer
spec:
  selfSigned: {}

배포 후 아래와 같이 나오면 된다.

Certificate 생성

위에서 만든 ClusterIssuer로 인증서를 만들 수 있도록 한다.
아래의 yaml은 위에서 만든 selfsigned-issuer를 통해 인증서를 발급을 진행한다.

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: selfsigned-cert
spec:
  secretName: selfsigned-cert-tls
  duration: 8760h # 365일
  renewBefore: 168h # 7일
  commonName: example.com
  isCA: false
  privateKey:
    size: 2048
    algorithm: RSA
    encoding: PKCS1
  usages:
    - digital signature
    - key encipherment
    - server auth
  issuerRef:
    name: selfsigned-issuer
    kind: ClusterIssuer

배포 후 아래와 같이 나오면 된다.

인증서가 정상적으로 배포가 되었을 경우 secrets이 생성이 된다. secrets명은 위 사진처럼 인증서 조회 시 확인할 수있다.

다음 문서에서는 spring boot 환경 구성, 로컬 테스트, 쿠버네티스 환경 배포테스트를 할 수 있도록 진행한다.