묻고 답해요
152만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
순위 정보를
불러오고 있어요
-
미해결쿠버네티스 대신 도커 SWARM 사용 방법 핵심 강의
Docker Swarm과 Traefik을 활용한 MSA 아키텍처 설계 방식
안녕하세요.Docker Swarm 기반 마이크로서비스 아키텍처(MSA)를 구성 중입니다. 처음에는 Traefik을 이용해 모든 내부 마이크로서비스를 거치도록 (즉, serviceA가 serviceB를 호출할 때도 Traefik을 통해서만 통신) 운영하려고 했습니다. 그런데 그렇게 할 경우 아래와 같은 문제가 예상됩니다:성능/오버헤드모든 내부 트래픽이 Traefik을 중간에 두고 오가므로, 네트워크 홉이 추가됩니다.Keep-Alive 연결이 많아지고, Traefik이 병목이 될 가능성이 있음.복잡한 설정내부 수많은 서비스가 각각 Traefik의 라우터/서비스 규칙을 가져야 하므로 라벨 설정이 매우 복잡해질 수 있음.Path/Host 기반 라우팅 규칙도 내부 API 전부에 대해 관리해야 하므로 관리 부담 증가.인증/인가가 불필요한 내부 통신외부 노출이 전혀 필요 없는 내부 서비스 등까지도 Traefik을 거치는 것은 과도할 수 있음. 이러한 이유로, Traefik이 모든 트래픽을 일괄 처리하는 대신, 내부 통신은 Docker Swarm 로드밸런싱으로 처리하고, 외부 트래픽(HTTPS/도메인/인증서)은 Traefik에 맡기는 구조로 변경하려고 합니다. 구체적으로는,Docker Swarmservice 간에는 “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 ” 방식을 쓸 때 주의해야 할 점이나, 더 권장되는 패턴이 있으면 알려주세요!감사합니다.
-
미해결쿠버네티스 대신 도커 SWARM 사용 방법 핵심 강의
질문드립니다.
해당 부분 혹시 조인하여 확인하였습니다만\_ svc_spring2.1 virnect0073/test-spring:test-9090 node2 Shutdown이부분은 오류가 있는걸까요? traefik를 사용했어도 매니져노드에 docker container ls 라고 검색하면 결과값이 나오나요?
-
미해결쿠버네티스 대신 도커 SWARM 사용 방법 핵심 강의
도메인을 구매 안했다면
개인 로컬에 등록 하는 법도 있을까요? 서버 두대로
-
미해결쿠버네티스 대신 도커 SWARM 사용 방법 핵심 강의
404 에러
traefik.yamlservices: 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.yamlservices: 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으로 설정되어있습니다.원인이 뭘까요??
-
해결됨쿠버네티스 대신 도커 SWARM 사용 방법 핵심 강의
13:00
13:00 에서 서비스의 연결 포트는 어떤 포트를 의미하는 건가요?
주간 인기글
순위 정보를
불러오고 있어요