Traefik SSL для сервиса, работающего на нестандартном порту

Traefik SSL для сервиса, работающего на нестандартном порту

Отказ от ответственности: мои знания Docker и Traefik слабы. Я несколько раз пытался следовать документации Traefik, но обычно я просто путаюсь, возможно, потому, что я хочу разобраться с чем-то большим, чем самые простые случаи, но также я уверен, что мне не хватает некоторых основ.

В моей текущей настройке я могу создать веб-сервис Docker (порт 80), который Traefik v2 подхватывает, создает сертификат LE, перенаправляет с http:80 на https:443 и выставляет. Ниже приведен мой docker-compose.ymlдля Traefik, а также один для примера сервиса, который работает.

Однако предположим, что моя веб-служба действительно хочет работать на порту, отличном от 80. Например, я хочу запуститьstatping, который работает на порту 8080. Возможно ли, учитывая текущую настройку SSL, подключить его так, чтобы я мог открыть точку входаhttp://statping.MYTLDи положитесь на Traefik, чтобы: 1. перенаправить наhttps://statping.MYTLD, 2. получить сертификат и 3. раскрыть мой statping Docker-контейнер? Может ли Traefik справиться с вызовом Acme http, даже если базовая служба не работает на порту 80? Я полагаю, что может, поскольку мой рабочий образец даже не раскрывает порт за пределами уровня контейнера.

Примечание: я хорошо знаком с Docker Compose, но, возможно, для такой службы, как statping, мне нужно придумать, как написать свой собственный DOCKERFILE, чтобы я мог заставить его работать на порту 80 вместо порта 8080?

Спасибо за любую информацию!

Трафик 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"

Связанный контент