[k8s] ingress-nginx & cert-managert 를 이용해서 [한번에] https 적용시키기

3
post-thumbnail

압축 요약: https://gist.github.com/juunini/cf579a0d9945c7eeb0e7b3a2ab8dc9b6

curl https://gist.githubusercontent.com/juunini/cf579a0d9945c7eeb0e7b3a2ab8dc9b6/raw/2bce86ce75771bf9cad7d8659dce300a422b8528/getting_start_cert_manager_with_ingress_nginx.sh -o getting_start_cert_manager_with_ingress_nginx.sh &&\
bash getting_start_cert_manager_with_ingress_nginx.sh

압축요약 링크를 걸어놨으니 잡설로 시작해야지

그게 뭔데 씹덕아

그것도 모르냐 씹덕아
k8s(kubernetes)

근황

이직하고 클라우드 인프라를 다루게 되었습니다.
그렇게 Re:제로부터 시작하는 k8s 생활 중입니다.

의식의 흐름

  1. k8s는 도커의 집합체이다. 아닌데 오케스트레이션인데
  2. 도커의 집합체라는건 엄청난 비약을 거치면 하나의 서버와 같지 않나?
  3. 하나의 서버에서 여러개의 웹앱을 띄우려면 nginx의 reverse proxy를 이용하는데...
  4. k8s에서는 ingress-nginx 라는걸 제공하는군
  5. 서버에서는 certbot 이라는걸 이용해서 let's encrypt 인증서를 쉽게 발급받았었는데
  6. k8s에서는 cert-manager 라는게 있구만

의식의 흐름을 요약해서 써놔서 "뭐야 개쉽네" 라고 생각할 수 있지만,
실은 ingress-nginx라는 키워드를 얻는데에도 꽤나 많은 검색과 삽질이 필요했고,
cert-manager라는 키워드를 찾는데에도 꽤나 많은 검색과 삽질이 필요했으며,

cert-manager를 적용하는 가이드들이 하나같이 다 어렵게 설명하고 있고 ㅅㅂ
(누구는 kubectl, 누구는 helm, 또 뭐 다른것도 여러가지...)

그래서 공식문서의 가이드까지 가서 그대로 따라해보면서도 뭐가 잘 안되서
몇 번 삽질을 해서 성공하게 되었습니다.

그래서 압축 요약 샘플 을 만들게 되었는데,
뭔 놈의 가이드가 뭘 해도 한번만에 성공하는게 없다보니 개빡쳐서
무지성으로 복붙하면 한번만에 성공하는 가이드를 만들게 되었습니다.

일단 무지성 복붙이라도 이렇게 하면 되는구나 하는게 보여야 뭘 하지
왜 이런 쉬운 가이드를 아무도 제공하지 않는거냐

잡설 끝! 본문 시작!

사용법

아래 코드 복붙

curl https://gist.githubusercontent.com/juunini/cf579a0d9945c7eeb0e7b3a2ab8dc9b6/raw/2bce86ce75771bf9cad7d8659dce300a422b8528/getting_start_cert_manager_with_ingress_nginx.sh -o getting_start_cert_manager_with_ingress_nginx.sh &&\
bash getting_start_cert_manager_with_ingress_nginx.sh

구성

순서

  1. ingress-nginx를 올립니다.
  2. kuard 앱을 올립니다.
  3. cert-manager를 올립니다.
  4. cert-manager로 kuard를 이용할 도메인의 인증서를 발급받습니다.
  5. ingress-nginx에 kuard를 연결시킵니다.

1. ingress-nginx 올리기

31 line이 ingress-nginx를 올리는 부분입니다.
34-63 line 을 보면, while 문으로 1초마다 반복하며 ingress-nginx의 status를 확인하고
구동이 완료되면 EXTERNAL-IP 를 도메인에 연결해달라는 문구를 띄웁니다.

2. kuard 앱 올리기

68-70 line이 kuard 앱을 올리는 부분입니다.
deploymentservice 로 되어있는데, 이걸 참고해서 배포 할 앱에 맞게 수정하면 됩니다.

3. cert-manager 올리기

72 line이 cert-manager를 올리는 부분입니다.
올리고 나서 75-88 line에서 deployments status를 확인해
완전히 올라갈 때 까지 기다립니다.

4. 인증서 발급

90 line이 인증서를 발급하는 부분입니다.
그 후 96-109 line 부분이 인증서가 완전히 발급되었는지 체크하는 부분이죠.

issuer 를 참고해서 여러분이 배포 할 앱에 맞게 수정하면 됩니다.

5. ingress 연결

line 93는 kuard를 ingress-nginx에 연결하는 부분입니다.
ingress-tls 를 참고해서 여러분이 배포 할 앱에 맞게 수정하면 됩니다.

6. 다 됐으면 설정한 도메인에 들어가보세요

0. 나머지 코드들

  • 3-28 line 까지는 준비를 위한 코드들입니다.
  • 맨 위에(line 10), 사용할 도메인 이름과, Let's Encrypt 에 사용 할 이메일이 들어갑니다.
  • 그 아래에는(line 11) 도메인과 이메일이 맞는지 확인하는 코드가 들어갑니다.
  • line 16-27 까지는 로딩 시 돌아가는 애니메이션을 표현하는 함수입니다.
    • 기다리는 중인데 아무런 피드백이 없으면 불안, 초조, 혼돈, 파괴, 망가 를 하게 되니까요
    • 로딩 쉘 스크립트는 gist에 올려두었습니다.

나머지 잡설

  • 저도 이제 막 k8s를 시작해서 잘 모릅니다 ㄷㄷ
  • auto renew는 다음번에 다룰겁니다.
  • yaml 작성이 너무 빡세서 언젠가 쉽게 만들어주는 도구를 만들 생각입니다.
    • 이미 Kubernetes YAML Generator 라는게 있습니다. 잘 사용하시는 분들도 계실듯.
    • 하지만 저는 제가 자주 사용하는 특정한 케이스 에 대해 템플릿별로 제공하는 도구를 만들 생각입니다.
profile
지상 최강의 개발자 쥬니니

2개의 댓글

comment-user-thumbnail
2023년 1월 29일

지나가던 뉴비입니다. Nginx에서는 Host기반 라우팅이 가능한 것으로 알고있는데요. 이렇게 하면 Ingress구성 시 Host기반 라우팅을 사용하지 못하는 것 아닌가요? Nginx ingress controller에 인증서를 연결하는 방법과 ingress구성 시에 인증서를 연결하는 방법 중 어떤 방법이 더 좋을까요?

1개의 답글