Docker Swarm과 Traefik을 활용한 MSA 아키텍처 설계 방식
199
작성한 질문수 2
안녕하세요.
Docker Swarm 기반 마이크로서비스 아키텍처(MSA)를 구성 중입니다. 처음에는 Traefik을 이용해 모든 내부 마이크로서비스를 거치도록 (즉, serviceA가 serviceB를 호출할 때도 Traefik을 통해서만 통신) 운영하려고 했습니다. 그런데 그렇게 할 경우 아래와 같은 문제가 예상됩니다:
성능/오버헤드
모든 내부 트래픽이 Traefik을 중간에 두고 오가므로, 네트워크 홉이 추가됩니다.
Keep-Alive 연결이 많아지고, Traefik이 병목이 될 가능성이 있음.
복잡한 설정
내부 수많은 서비스가 각각 Traefik의 라우터/서비스 규칙을 가져야 하므로 라벨 설정이 매우 복잡해질 수 있음.
Path/Host 기반 라우팅 규칙도 내부 API 전부에 대해 관리해야 하므로 관리 부담 증가.
인증/인가가 불필요한 내부 통신
외부 노출이 전혀 필요 없는 내부 서비스 등까지도 Traefik을 거치는 것은 과도할 수 있음.
이러한 이유로, Traefik이 모든 트래픽을 일괄 처리하는 대신, 내부 통신은 Docker Swarm 로드밸런싱으로 처리하고, 외부 트래픽(HTTPS/도메인/인증서)은 Traefik에 맡기는 구조로 변경하려고 합니다. 구체적으로는,
Docker Swarm
service 간에는 “user-service:8001” 식으로 연결 → Swarm 라운드 로빈
Keep-Alive나 오토스케일 시 컨테이너가 늘어나면 Swarm이 자동 분산
Traefik
오직 외부 접근이 필요한 Gateway나 public API에 대해서만 라벨(traefik.enable=true) 적용
HTTPS 인증서, Path/Host 라우팅, 미들웨어(인증/인가, IP 제한)를 외부 경계에서만 적용
내부적으로는 Swarm에 맡기고, Traefik은 외부→Gateway(혹은 외부→공개 서비스)만 처리
네트워크 분리
“public-net”: Traefik, Gateway 등 외부 노출이 필요한 서비스
“backend-net”: user-service 등 내부용 서비스만 존재, 외부와 직접 연결되지 않음
궁금한 점
위와 같은 구조(외부는 Traefik, 내부는 Swarm + 네트워크 분리)가 흔히 권장되는 방식인가요?
내부 서비스까지 Traefik을 거치는 구조가 과연 득보다 실이 많을지, 실제 운영 사례가 궁금합니다.
보안 측면에서 “Traefik + Swarm ” 방식을 쓸 때 주의해야 할 점이나, 더 권장되는 패턴이 있으면 알려주세요!
감사합니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
김진태님, Docker Swarm과 Traefik을 활용한 MSA 아키텍처 설계와 관련하여 질문 주셔서 감사합니다.
외부는 Traefik, 내부는 Swarm + 네트워크 분리 방식의 권장 여부
- 내부적으로 서비스 간 통신에 Swarm의 로드밸런싱을 이용하고, 외부 트래픽에 대해서만 Traefik을 사용하는 방식은 성능 최적화와 복잡도 감소 측면에서 좋은 선택입니다.
- 네트워크를 분리함으로써 보안 측면에서도 이점을 얻을 수 있으며, 이러한 방식은 상당히 일반적인 패턴으로 다양한 조직에서 채택하고 있습니다.
- 내부적으로 서비스 간 통신에 Swarm의 로드밸런싱을 이용하고, 외부 트래픽에 대해서만 Traefik을 사용하는 방식은 성능 최적화와 복잡도 감소 측면에서 좋은 선택입니다.
내부 서비스까지 Traefik을 거치는 구조의 득과 실
- 모든 내부 트래픽이 Traefik을 통하게 할 경우, 관리 부담과 복잡한 설정이 필요하며, 성능 저하의 원인이 될 수 있다는 점에서 신중한 검토가 필수적입니다.
- 실제 운영 사례에서는, 내부 트래픽까지 프록시하는 데 따른 오버헤드를 감당할 수 없는 경우가 많아, 외부와의 인터페이스에만 Traefik을 적용하는 경우가 일반적입니다.
- 모든 내부 트래픽이 Traefik을 통하게 할 경우, 관리 부담과 복잡한 설정이 필요하며, 성능 저하의 원인이 될 수 있다는 점에서 신중한 검토가 필수적입니다.
보안 측면에서의 주의 사항
- ‘Traefik + Swarm’ 방식을 사용할 때는 각 네트워크 간의 세분화와 방화벽 설정이 중요합니다.
- Traefik이 외부로부터 들어오는 요청을 처리하는 역할을 하므로 HTTPS 설정과 인증서 관리가 필수적입니다.
- 또한, Swarm의 기본 제공 암호화와 네트워크 격리를 적극 활용하시기를 권장합니다.
- ‘Traefik + Swarm’ 방식을 사용할 때는 각 네트워크 간의 세분화와 방화벽 설정이 중요합니다.
추가로, ‘Spring Boot’를 활용한 Docker Compose 환경에서의 서비스 간 공유 및 관리 관련 정보가 필요하다면, 아래 출처를 확인해볼 수 있습니다.
이 정보가 도움이 되셨기를 바랍니다. 더 궁금한 사항이 있으시면 언제든지 질문해주세요. 감사합니다.
Kaggle 노트북(predict.ipynb) 관련
0
9
0
git bash .env
1
13
1
kafka 이벤트 발행 실패 시 at-least-once를 보장하는 방법이 궁금합니다.
1
46
1
domain에 @Entity 와 Repository를 함께 둔 이유가 궁금합니다
1
32
1
혹시 강의 내용하면서 실습했던 것을 개인 깃에다 올려도 될까요?
0
19
1
알파벤티지 sleep(5) 관련 문의
1
40
2
Jib 이미지 빌드에서 docker credential 관련으로 이슈가 있다면
1
60
1
스크립트에 대해 질문 있습니다.
1
54
1
같은 사용자가 연속된 중복 호출할 경우 어떻게 되는지 궁금합니다!
2
62
1
실전 계좌에서 운영하고 계신 분 계신가요?
1
42
2
키페어 설정
0
37
2
클로드
1
49
2
이거 지금 부터 들어도 괜찮을까요 ?? 시간이 꽤지난거같은데 .. 뭐 최신하고 아에 안맞을까요 .
0
36
1
pip install -r requirements.txt
0
55
2
자료를 다운로드후 압축을 풀때 오류납니다.
0
47
2
명령 프롬프트
0
44
2
pod kubetm/app 에서 image를 갑자기 못가져 오는거 같습니다.
1
42
2
이지지 생성 노드를 커스텀 햇는데 워드프레스에 이미지 업로드가 안됨
0
31
2
3. Node Schedule 중 pod-5가 마스터 노드에 배치됩니다.
1
51
2
volume hostpath의 강의에 관해 질문이 있습니다.
1
40
2
질문드립니다.
0
121
1
도메인을 구매 안했다면
0
161
2
404 에러
0
169
1
13:00
0
178
2





