미해결
쿠버네티스 대신 도커 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
김진태
2025-02-17T09:59:13.105Z
댓글 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
오개발
2025-01-20T06:52:36.234Z
댓글 1
좋아요 0
조회수 121
미해결
쿠버네티스 대신 도커 SWARM 사용 방법 핵심 강의
개인 로컬에 등록 하는 법도 있을까요? 서버 두대로
docker ubuntu docker-swarm orchestration cloud-computing
오개발
2025-01-17T07:21:02.728Z
댓글 2
좋아요 0
조회수 160
미해결
쿠버네티스 대신 도커 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
앙앙기모
2024-12-06T11:41:42.446Z
댓글 1
좋아요 0
조회수 169
해결됨
쿠버네티스 대신 도커 SWARM 사용 방법 핵심 강의
13:00 에서 서비스의 연결 포트는 어떤 포트를 의미하는 건가요?
docker ubuntu docker-swarm orchestration cloud-computing
앙앙기모
2024-12-06T11:18:40.804Z
댓글 2
좋아요 0
조회수 177