비표준 포트에서 실행되는 서비스를 위한 Traefik SSL

비표준 포트에서 실행되는 서비스를 위한 Traefik SSL

면책 조항: 내 Docker 및 Traefik 지식이 약합니다. 저는 Traefik 문서를 따라 여러 번 시도해 보았지만 일반적으로 혼란스럽습니다. 아마도 가장 단순한 사례보다 더 많은 것을 다루고 싶지만 몇 가지 기본 사항이 누락되었다고 확신하기 때문일 것입니다.

현재 설정에서는 Traefik v2가 선택하고 LE 인증서를 생성하고 http:80에서 https:443으로 리디렉션하고 노출하는 웹 기반(포트 80) Docker 서비스를 생성할 수 있습니다. 다음은 docker-compose.ymlTraefik에 대한 것이고 작동하는 샘플 서비스에 대한 것입니다.

그러나 내 웹 기반 서비스가 실제로 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"

관련 정보