작성
·
51
·
수정됨
0
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으로 설정되어있습니다.
원인이 뭘까요??
답변 1
0
services:
traefik:
...
command:
....
# - --providers.swarm.constraints=Label(`traefik.constraint-label`, 'traefik-public')
위 코드 주석하니 정상적으로 접속 됩니다 (+ SSL 인증까지 완료) 이유가 뭐였을까요?