Let’s Encrypt Wildcard SSL Certification with GKE+GCLB

Harrison Jung
Dreamyoungs
Published in
4 min readMay 17, 2021

도메인이 하나둘 늘어나고, 그리고 서브 도메인들을 매번 추가하느라 인증서 관리가 매우 복잡해졌습니다.

심지어, 쿠키 관련 이슈때문에 결국 프론트에서는 ( 서비스별 * 개발자별 ) 서브 도메인을 독립적으로 할당받아야 하는 상황까지 왔습니다.

급기야, 기존에 GCP에서 관리형 인증서( 그냥 설정만 하면 구글에서 자동으로 해주는 관리형 인증서.. )를 쓰다가 이젠 더 이상 쓰기가 오히려 힘든 상황이 되었습니다. GCP에서 제공해주는 관리형 인증서는 단순히 소수의 도메인을 관리하기에는 적합하나, 기본적으로 wildcard ( * ) 도메인을 사용할 수가 없습니다.

* 부분이 wildcard 입니다.

쉽게 말해 위와 같은 형태로 [ *.example.com ]의 인증서를 발급받으려면 “쉬운방법”인 관리형이 아닌 직접 무언가로 받아야 한다는 것입니다.

그리고 이런 경우에는 심지어 “유료”인증서가 손이 더 많이 갑니다. ( 매번 갱신도 해줘야 하고, 이것저것 할게 많죠. )

오히려 유지보수가 제일 쉬운 Let’s Encrypt가 제일 쉽습니다. ( 물론 처음에 시작이 어려울뿐 한번 해두면 편안..)

  • 기존에 DNSSEC 을 사용했다면 해제를 먼저 해줘야 합니다. 이 과정은 약 2일 이상이 걸립니다.
  • Google Cloud DNS를 이용해서 DNS Zone을 설정해야 합니다.
  • DNS Zone 을 생성하고 나면 화면에서 유형에서 NS를 보면 입력해야 할 DNS서버 이름이 표시됩니다.
ns-cloud-b 라고 되어 있는 부분은 a~e 까지 다양해서 경우에 따라 다릅니다.
  • 일반적으로 위와 같은 DNS 서버 주소가 생성될것이고, 해당 사항을 자신이 가지고 있는 Domain에서 Name Server 목록으로 설정합니다. ( 설정 방법은 구입한곳마다 다릅니다. )
  • IAM에서 새로운 Service Account를 생성하고, 위와 같은 권한을 부여합니다. 그리고 해당 key 파일을 다운로드 받습니다.
  • 해당 파일을 사용할 클러스터/namespace에서 secret 으로 등록합니다.
  • 다음으로 CronJob을 생성합니다. ( Cronjob은 시작시 해당 secret 을 읽을 수 있도록 설정해야 합니다.)

위와 같이 CronJob을 생성합니다.

Serivce-key를 읽을 수 있도록 설정을 추가하고, 시작시 cert.sh 라는 파일을 실행할 수 있도록 설정합니다.
( 해당 파일은 사실상의 코어 파일입니다. )

Dockerfile을 생성합니다.

설치해야할 부분이 좀 있습니다. 기본적으로 우분투베이스에서 gcloud와 certbot 을 설치해야 합니다.

그래서 관련된 파일설치가 좀 많이 복잡합니다. 자세한 내용은 직접 읽어보시기 바랍니다.

마지막으로 cert.sh 입니다.

certbot으로 인증서를 발급받고, 발급받은 인증서를 GCLB에 복사한뒤, 해당 인증서를 실제로 사용하는 설정을 하는 부분입니다.

( 물론 이 방식으로 하면 만료된 인증서 찌꺼기가 디렉토리에 남게되지만, 뭐 1년에 한번쯤 혹은 몇년에 한번쯤 들어가서 일괄 삭제해주면 되긴 합니다. )

쉽다면 쉽고, 어렵다면 어려운 내용인데, 검색해도 안나와서 한번 정리했습니다.

--

--