티스토리 뷰

DevOps/CI - CD

[NBP] CI / CD - Traefik

김한성 2020. 4. 14. 11:01
  • NBP VM 하나의 docker 기반 CI / CD 구성해보겠습니다. 아래 아키텍처를 보면 docker 기반 서비스 총 5개, java 기반 backend service 빌드 및 배포 기반 gitlab-runner, maven으로 구성해보겠습니다.

  • 각 서비스들의 간단한 설명 (추후에 관련 서비스 포스팅마다 자세한 설명 하겠습니다)

Gitlab: 형상관리, 이슈 트래커
OpenLDAP: 사용자와 그룹 권한관리, nexus gitlab 통합 계정 관리
Nexus3: 저장소
Gitlab-runner: CI / CD
Traefik: Edge Router(리버스 프록시), 자체 모니터링 Dashborad를 포함

 

  • 전체적인 아키텍처
  • Flow

  1. 개발자가 초기 push 진행

  2. Gitlab-runner maven 참조

  3. Gitlab CI/CD pipeline 통해 Nexus에 war 파일 upload

  4. Gitlab deploy project 실행시 WAS Server에 있는 Gitlab-runner가 실행되어 배포 (추후에 CI/CD VM 말고 WAS Server에도 Gitlab-runner를 구성하여 tag로 배포 예정)

 


□ Traefik

 

▶ docker를 위한 reverse proxy 클러스터 구성 Traefik은 docker server에 연결해서 컨테이너의 start, stop을 모니터링한다. 컨테이너를 실행할 때, Traefik이 식별 할 수 있는 몇가지 정보들을 label로 넘긴다. traefik은 서비스 레지스트리/오케스트레이터 API를 통해 즉시 마이크로 서비스가 외부 인터넷에 연결되도록 통로같은 역할

▶ docker 컨테이너가 시작 및 중지되면 자동으로 감지

▶ 웹 애플리케이션 즉, 컨테이너가 생성되면 자동으로 도메인을 만들고 내부 서비스로 연결

▶ 최신 HTTP 리버스 프록시 및 로드 밸런서로 마이크로 서비스를 쉽게 배포 할 수 있습니다.

▶ 그밖의 상세한 설명은 document 참조 https://docs.traefik.io/

Traefik


□ Run Traefik

 

  • docker로 실행할것이기 때문에 아래와 같은 명령어를 사용하고 network는 hskim-net으로 통일, label 부분이 중요한데요, 저는 각 서비스 마다 도메인을 붙일것이기 때문에 traefik.frontend.rule: Host가 traefik.com.kr일 경우 이 컨테이너로 proxy 하는것이라고 보면 됩니다. 예를 들어 도메인 호스팅 업체의 traefik.com.kr로 등록해놓았다면 frontend.rule을 traefikcom.kr로 등록하면 됩니다.

docker run \
  --detach \
  --name traefik \
  --restart=always \
  --network=hskim-net \
  --publish 80:80 \
  --publish 443:443 \
  --mount type=volume,src=traefik-conf,dst=/etc/traefik \
  --mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
  --label traefik.frontend.rule=Host:traefik.hskim.kr \
  --label traefik.port=8080 \
  traefik:v1.7.16

□ Config Traefik

 

  • traefik admin 계정 password를 생성하기 위해 htpassword를 설치하여 Hash를 얻을 수 있습니다.

  • hash는 보안상 임의로 제가 만들었습니다.

$ sudo yum install -y httpd-tools.x86_64
$ echo $(htpasswd -nb admin "qwer1234")
[cloud@cicd-test ~]$ echo $(htpasswd -nb admin "qwer1234")
admin:$123456

□ RUN Traefik

 

  • vi /data/volumes/traefik-conf/_data/data/volumes/traefik-conf/_data

  • 지금 볼륨을 /data로 잡아놨지만 volume 잡아놓은 곳의 해당 경로에 가서 traefik.toml (없으면 만들기)  

  • users에 admin계정 hash값을 입력하고, [docker]에 doamin부분에 도메인을 입력해줍니다 이제부터 traefik을 통해 서비스를 올릴때 gitlab.hskim.kr, nexus3.hskim.kr 처럼 label에 추가할 수 있습니다.

debug = true
logLevel = "ERROR"
defaultEntryPoints = ["http", "https"]
[web]
address = ":8080"
  [web.auth.basic]
#  users = ["admin:$$2y$$05$$wItwu3L4qpiHSFm.Z2gePeh8y5Npu2.LNoXiCO0CMF/rtIza/tWc2"]
  users = ["admin:$123456"]
[entryPoints]
  [entryPoints.http]
  address = ":80"
#    [entryPoints.http.redirect]
#      entryPoint = "https"
  [entryPoints.https]
  address = ":443"
    [entryPoints.https.tls]
      [[entryPoints.https.tls.certificates]]
      certFile = "/etc/traefik/fullchain.pem"
      keyFile = "/etc/traefik/privkey.pem"
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "hskim.kr"
watch = true
exposedbydefault = true

□ WEB Traefik

 

  • 위의 과정까지 잘 구성하였다면 이제 Traefik Dashboard를 확인할 수 있습니다.

  • NBP Cloud 환경위에서 진행했으므로 도메인을 아직 붙이지 않았다면 아래의 URL로 접속하여 확인할 수 있습니다.

  • 단, ACG 8080 Port open

http://공인아이피:8080 
  • 만약 도메인을 붙였다면 ACG에 80 Port open 후에 아래 URL로 접속하면 됩니다.

http://traefik.hskim.kr

traefik dashboard

 

 

 

 

 

댓글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31