inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

172만명의 커뮤니티!! 함께 토론해봐요.

Docker Swarm과 Traefik을 활용한 MSA 아키텍처 설계 방식

미해결

쿠버네티스 대신 도커 SWARM 사용 방법 핵심 강의

안녕하세요. 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 ” 방식을 쓸 때 주의해야 할 점이나, 더 권장되는 패턴이 있으면 알려주세요! 감사합니다.

  • docker
  • ubuntu
  • docker-swarm
  • orchestration
  • cloud-computing
김진태 댓글 1 좋아요 0 조회수 196

질문드립니다.

미해결

쿠버네티스 대신 도커 SWARM 사용 방법 핵심 강의

해당 부분 혹시 조인하여 확인하였습니다만 \_ svc_spring2.1 virnect0073/test-spring:test-9090 node2 Shutdown 이부분은 오류가 있는걸까요? traefik를 사용했어도 매니져노드에 docker container ls 라고 검색하면 결과값이 나오나요?

  • docker
  • ubuntu
  • docker-swarm
  • orchestration
  • cloud-computing
오개발 댓글 1 좋아요 0 조회수 121

도메인을 구매 안했다면

미해결

쿠버네티스 대신 도커 SWARM 사용 방법 핵심 강의

개인 로컬에 등록 하는 법도 있을까요? 서버 두대로

  • docker
  • ubuntu
  • docker-swarm
  • orchestration
  • cloud-computing
오개발 댓글 2 좋아요 0 조회수 160

404 에러

미해결

쿠버네티스 대신 도커 SWARM 사용 방법 핵심 강의

traefik.yaml services: traefik: image: traefik ports: - target: 80 published: 80 mode: host protocol: tcp - target: 443 published: 443 mode: host protocol: tcp - 9001:9001 volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - /var/log/traefik:/var/log/traefik - traefik-certificates:/certificates deploy: mode: global placement: constraints: - node.labels.traefik-public.traefik-certificates == true labels: - traefik.enable=true - traefik.docker.network=traefik-public - traefik.constraint-label=traefik-public - traefik.http.middlewares.https-redirect.redirectscheme.scheme=https - traefik.http.middlewares.https-redirect.redirectscheme.permanent=true - traefik.http.routers.traefik-public-http.rule=Host(`test.shop`) - traefik.http.routers.traefik-public-http.entrypoints=traefik-ui - traefik.http.routers.traefik-public-http.middlewares=https-redirect - traefik.http.routers.traefik-public-https.rule=Host(`test.shop`) - traefik.http.routers.traefik-public-https.entrypoints=traefik-ui - traefik.http.routers.traefik-public-https.tls=true - traefik.http.routers.traefik-public-https.service=api@internal - traefik.http.routers.traefik-public-https.tls.certresolver=le - traefik.http.routers.traefik-public-https.middlewares=admin-auth - traefik.http.services.traefik-public.loadbalancer.server.port=8080 - "traefik.http.middlewares.non-www-to-www.redirectregex.regex=^https?://(?:www\\.)?(.+)" - "traefik.http.middlewares.non-www-to-www.redirectregex.permanent=true" - "traefik.http.middlewares.non-www-to-www.redirectregex.replacement=https://www.$${1}" update_config: order: stop-first command: - --providers.swarm.network=traefik-public - --providers.swarm.constraints=Label(`traefik.constraint-label`, 'traefik-public') #v3 버전 전용 코드 - --providers.swarm.exposedbydefault=false - --providers.swarm.endpoint=unix:///var/run/docker.sock - --entrypoints.http.address=:80 - --entrypoints.https.address=:443 - --certificatesresolvers.le.acme.email=email - --certificatesresolvers.le.acme.storage=/certificates/acme.json - --certificatesresolvers.le.acme.tlschallenge=true - --accesslog.bufferingsize=100 - --accesslog.filepath=/var/log/traefik/traefik-access.log - --accesslog.fields.defaultmode=keep - --accesslog.fields.names.ClientUsername=drop - --accesslog.fields.headers.defaultmode=keep - --accesslog.fields.headers.names.User-Agent=keep - --accesslog.fields.headers.names.Authorization=drop - --accesslog.fields.headers.names.Content-Type=keep - --log - --api - --entrypoints.traefik-ui.address=:9001 networks: - "traefik-public" volumes: traefik-certificates: {} networks: traefik-public: name: traefik-public external: true app.yaml services: flask: image: 192.168.219.114:5000/fastapi-helloworld networks: - traefik-public deploy: labels: - "traefik.enable=true" - "traefik.http.routers.flask.rule=Host(`test.shop`)" - "traefik.http.routers.flask.entrypoints=http" - "traefik.http.routers.flask.middlewares=https-redirect" - "traefik.http.routers.flask-https.rule=Host(`test.shop`)" - "traefik.http.routers.flask-https.entrypoints=https" - "traefik.http.routers.flask-https.tls=true" - "traefik.http.routers.flask-https.tls.certresolver=le" - "traefik.docker.network=traefik-public" - "traefik.constraint-label=traefik-public" - "traefik.http.services.flask-https.loadbalancer.server.port=8080" networks: traefik-public: name: traefik-public external: true stack 배포하고 test.shop 접속 시 404 에러가 발생합니다. 현재 애플리케이션 컨테이너의 포트는 8080으로 설정되어있습니다. 원인이 뭘까요??

  • docker
  • ubuntu
  • docker-swarm
  • orchestration
  • cloud-computing
앙앙기모 댓글 1 좋아요 0 조회수 169

13:00

해결됨

쿠버네티스 대신 도커 SWARM 사용 방법 핵심 강의

13:00 에서 서비스의 연결 포트는 어떤 포트를 의미하는 건가요?

  • docker
  • ubuntu
  • docker-swarm
  • orchestration
  • cloud-computing
앙앙기모 댓글 2 좋아요 0 조회수 177

인기 태그

인프런 TOP Writers

주간 인기글