면책 조항: 내 Docker 및 Traefik 지식이 약합니다. 저는 Traefik 문서를 따라 여러 번 시도해 보았지만 일반적으로 혼란스럽습니다. 아마도 가장 단순한 사례보다 더 많은 것을 다루고 싶지만 몇 가지 기본 사항이 누락되었다고 확신하기 때문일 것입니다.
현재 설정에서는 Traefik v2가 선택하고 LE 인증서를 생성하고 http:80에서 https:443으로 리디렉션하고 노출하는 웹 기반(포트 80) Docker 서비스를 생성할 수 있습니다. 다음은 docker-compose.yml
Traefik에 대한 것이고 작동하는 샘플 서비스에 대한 것입니다.
그러나 내 웹 기반 서비스가 실제로 80이 아닌 다른 포트에서 실행되기를 원한다고 가정해 보겠습니다. 예를 들어, 나는 다음을 실행하고 싶습니다.통계, 포트 8080에서 실행됩니다. 현재 가지고 있는 SSL 설정에서 진입점을 노출할 수 있도록 연결하는 것이 가능합니까?http://statping.MYTLDTraefik을 사용하여 다음을 수행합니다. 1. 다음으로 리디렉션https://statping.MYTLD, 2. 인증서를 획득하고 3. 내 통계 Docker 컨테이너를 노출하시겠습니까? 기본 서비스가 포트 80에서 실행되지 않는 경우에도 Traefik이 Acme http 챌린지를 처리할 수 있습니까? 내 작업 샘플은 컨테이너 수준을 넘어서는 포트를 노출하지도 않기 때문에 그럴 수 있다고 생각합니다.
참고: 저는 Docker Compose에 가장 익숙하지만 아마도 통계와 같은 서비스의 경우 포트 8080 대신 포트 80에서 실행되도록 유도할 수 있도록 자체 DOCKERFILE을 작성하는 방법을 알아내야 합니까?
통찰력을 가져 주셔서 감사합니다!
Traefik docker-compose.yml
:
version: "3.3"
networks:
traefik:
external: true
services:
traefik:
image: "traefik:v2.3"
container_name: "traefik"
command:
#- "--log.level=DEBUG"
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--entrypoints.web.http.redirections.entryPoint.to=websecure"
- "--entrypoints.web.http.redirections.entryPoint.scheme=https"
- "--entrypoints.web.http.redirections.entrypoint.permanent=true"
- "--certificatesresolvers.myresolver.acme.httpchallenge=true"
- "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"
# FOR TESTING.
#- "--certificatesresolvers.myresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
- "--certificatesresolvers.myresolver.acme.email=craig@wereallconnected.ca"
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
ports:
- "80:80"
- "443:443"
- "8080:8080"
volumes:
- "./letsencrypt:/letsencrypt"
- "/var/run/docker.sock:/var/run/docker.sock:ro"
샘플 서비스 docker-compose.yml
:
version: "3.3"
networks:
traefik:
external: true
services:
whoami2:
image: "traefik/whoami"
container_name: "simple-service2"
labels:
- "traefik.enable=true"
- "traefik.http.routers.whoami2.rule=Host(`whoami2.MYTLD`)"
- "traefik.http.routers.whoami2.entrypoints=websecure"
- "traefik.http.routers.whoami2.tls.certresolver=myresolver"
networks:
- traefik
restart: unless-stopped
답변1
로부터트래픽 문서:
컨테이너가 여러 포트를 노출하거나 어떤 포트도 노출하지 않는 경우 레이블을 사용하여 Traefik이 통신에 사용해야 하는 포트를 수동으로 지정해야 합니다
traefik.http.services.<service_name>.loadbalancer.server.port
(라우팅의 전용 섹션에서 이 레이블에 대한 자세한 내용을 읽어보세요).
따라서 whoami가 8080을 수신하고 정확히 하나의 포트를 노출하지 않은 경우 레이블을 지정해야 합니다.
"traefik.http.services.whoami2.loadbalancer.server.port=8080"