티스토리 뷰
-
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
-
개발자가 초기 push 진행
-
Gitlab-runner maven 참조
-
Gitlab CI/CD pipeline 통해 Nexus에 war 파일 upload
-
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/
□ 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
'DevOps > CI - CD' 카테고리의 다른 글
[NBP] CI / CD - Gitlab runner를 활용한 WAR 배포 (8) | 2020.08.08 |
---|---|
[NBP] CI / CD - Nexus3 및 LDAP 연동 (0) | 2020.06.22 |
[NBP] CI / CD - LDAP Install 및 LDAP & Gitlab 연동 (0) | 2020.06.22 |
[NBP] CI / CD - Gitlab (0) | 2020.06.16 |