선배 https설정 해주세요. 선배 혹시 traefik도 같이?

peterTheAnteater·2024년 8월 31일
54

데브옵스

목록 보기
2/11
post-thumbnail

글을 쓰게 된 동기

제 블로그 글들을 읽는 모든 독자들을 위한 한마디: 저는 모든게 귀찮은 귀차니즘 max찍은 개발자로서 제가 사용해보고 글을 쓰는 기술들은 "어캐하면 더 쉽게 할수있을까" 와 "어캐 하면 재미있을까" 에서 나오는 글들입니다.

일단 저번 글에서 반말로 모든걸 했더니 기분이 너무 이상해 이번 글에서는 반존대를 할 생각입니다 선배들 설레게하는 반존대의 정석

물론 위 같이 반존대 싫어하시면 죄송합니다. 하지만 어쩔티비

HTTPS

요즘 대부분의 웹사이트는 접속을 하면 http가 아닌 https로 접속을 합니다. 그말은 즉슨 저희가 실서비스를 목표로 프로젝트를 진행하면 https가 되도록 해야된다는 겁니다. Https의 대한 자세한 내용은 벨로그에 넘치고 넘쳤으니 그걸 보러 가시고...

중요한 점은 크롬에서 http를 접속 하려고 하면 아래와 같이 뜬다는 점입니다.

서비스를 접속 하려고 하는데 저런 문구가 어디가 생각나는 빨간색이 보이면 다들 거부감이 들겠죠.

그럼 이걸 해결 하기 위해서는... SSL 인증을 받으면 됩니다.

SSL인증을 받을수있는 방식은 여러가지 방식이 있습니다.,

  1. 클라우드 서비스에서 자체 제공 (AWS Certificate Manager, Route53 등등..)
  2. 리버스 프록시 서버에 직접 연동 (SSL 인증서 적용)

저는 그 중 직접 리버스 프록시 서버에 적용하는 방식으로 사용했습니다.

왜냐?


내 돈 뜯어가는 악덕 토끼
클라우드 서비스에서 인증서를 받고 그걸 거기서 또 설정하고 등등...을 거치다 보면 다 결국 돈! 입니다.

하지만 이건 회사에서 돈을 주는거도 아니고 프로젝트 정도에서 굳이 돈을 또 쓰기에는 아깝죠.
네 사실 저는 짠돌이 입니다 꼬우면 돈 주던가

그래서 결국 엔진엑스에 Lets Encrypt라는 무료 인증서 생성기를 사용하시는 분들이 많은데... 엔진엑스+Lets Encrypt조합에 문제가 몇가지 있습니다.

  1. 엔진엑스는 동적 서비스 디스커버리가 안된다 (이건 저희 프로젝트가 쿠버네티스와 같이 컨테이너 스케일링을 도커 스웜으로 구현 했기 때문에 엔진엑스로 조금 어렵습니다.) 무슨 소리인지 이해 안되도 정상입니다
  2. Let's Encrypt 인증서는 90일동안만 유효하기 때문에 직접 계속 갱신을 해줘야 됩니다.

젤~~~ 위에 제가 이 글을 쓰는 이유를 적었었죠. 저는 매우 귀차니즘이 심한 개발자입니다.

90일마다 갱신을 하는 작업 자체가 너무 저한테는 어려운 일입니다. 이러면서 매일 게임 출석은 잘 합니다

그래서 나온 결과는: Traefik을 한번 써보자 였습니다.

Traefik


커여운 울 고퍼짱
물론 단점도 존재하는 Reverse Proxy겸 Load Balancer (사실상 엔진엑스) 이지만 아주 큰 장점이 존재 합니다.

  1. 서비스를 자동으로 찾아서 연결 해주고
  2. Https ssl 인증서 자동 생성 및 갱신.

음..?
...

자동 생성 및 갱신??

네 바로 저 부분에 제가 꽂혀서 사용했습니다. 이정도면 귀차니즘과 밀당하는 개발자

NGINX 에서 구현할때는 Certbot 으로 인증서 생성하고 그걸 또 엔진엑스에 사용하게 설정 하고 등등... 너무 복잡한 방법과 그걸 또 90일만에 또 갱신 해야되는 점을 없에주는 마법같은 내용이었습니다.

대충 사용법

일단 트레픽 컨테이너를 띄웁니다.

traefik:
    image: traefik:v2.9
    command:
      - "--api.insecure=false"
      - "--providers.docker=true" 
      - "--providers.docker.swarmMode=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.websecure.address=:443"
      - "--entrypoints.web.http.redirections.entrypoint.to=websecure"
      - "--entryPoints.web.http.redirections.entrypoint.scheme=https"
      - "--certificatesresolvers.letsencrypt.acme.tlschallenge=true"
      - "--certificatesresolvers.letsencrypt.acme.email=<인증서 관련되서 알림 받을 이메일>"
      - "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
      - "--log.level=INFO"
      - "--accesslog=true"
      - "--api.dashboard=true"
    ports:
      - target: 443
        published: 443
        protocol: tcp
        mode: host
      - target: 8080
        published: 8080
        protocol: tcp
        mode: host
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
      - "traefik-certificates:/letsencrypt"  
    networks:
      - 네트워크

위 같이 만들었으면 이제 https를 설정 해둘 서비스 (장고, 스프링, 등등)에 아래와 같은 labels를 도커 컴포즈에 추가 해주시면 끝납니다.

서비스이름:
    image: 이미지
    networks:
      - 네트워크
    deploy:
      replicas: 2
      labels:
        - traefik.enable=true
        - traefik.http.services.서비스이름.loadbalancer.server.port=8000
        - traefik.http.routers.서비스이름.entrypoints=websecure
        - traefik.http.routers.서비스이름.rule=Host(`<도메인 이름>`) && PathPrefix(`/api/v1`)
        - traefik.http.routers.서비스이름.middlewares=서비스이름-stripprefix
        - traefik.http.middlewares.서비스이름-stripprefix.stripprefix.prefixes=/api/v1
        - traefik.http.routers.서비스이름.tls.certresolver=letsencrypt

네 저게 끝입니다. 네?

이제 <내 도메인>/api/v1으로 들어가면 https로 잘 들어가지는걸 확인 할수있습니다.

그 와 동시에 저는 서비스 replicas:2를 해놨기 때문에 위 백엔드 서비스가(컨테이너) 2개 생성되는데 트레픽에서 자동으로 두개의 컨테이너를 찾아서 로드 벨런싱을 해줍니다. 자동화 개꿀

결론

트레픽이 생소하신 분들도 있고 엔진엑스로 사용하시는걸 좋아하시는분들도 있으신데 한번쯤 기회가 되면 트레픽을 사용해보는건 어떨까요? 특히 저와 같은 귀차니스트들은 아주 좋을겁니다.

읽어주셔서 감사합니다

profile
소프트웨어 개발과 밀당하는 개발자

10개의 댓글

comment-user-thumbnail
2024년 9월 3일

개인 프로젝트 매번 인증 갱신하는데... 신박하네요 ㄷㄷ

2개의 답글
comment-user-thumbnail
2024년 9월 8일

홈서버 관리용으로 엔진엑스 프록시 매니저 쓰고 있는데 이것도 괜찮아 보이네요
좋은 글 감사합니다!

답글 달기
comment-user-thumbnail
2024년 9월 9일

글에 밈이 가득해서 심각하지 않고 재밌게 읽었어요 ㅋㅋ
엔진엑스에 대해 공부하고 싶은데 혹시 어떤 강의나 책을 추천해주실 수 있을까요?

답글 달기
comment-user-thumbnail
2024년 9월 10일

프로젝트용으로 제격이네요 ㅎㅎ

답글 달기
comment-user-thumbnail
2024년 9월 11일

ㅋㅋㅋㅋㅋㅋㅋㅋ 재밌으면서 알차용

답글 달기
comment-user-thumbnail
2024년 9월 13일

제가 만든 개발진스 짤이 있어서 놀랬네요 ㅋㅋㅋ
인프라를 이제 공부하기 시작해서 아직 이해는 못했지만 나중에 써먹으면 좋겠네요
좋은 글 감사합니다~

1개의 답글
comment-user-thumbnail
2024년 10월 18일

제목을 보고 그냥 지나칠 수가 없어요 ㅠㅠㅋㅋㅋ

답글 달기