非標準ポートで実行されるサービス用のTraefik SSL

非標準ポートで実行されるサービス用のTraefik SSL

免責事項: 私の Docker と Traefik に関する知識は乏しいです。Traefik のドキュメントに従おうと何度か試みましたが、たいていは混乱するばかりです。おそらく、最も単純なケース以上のものに取り組みたいからでしょうが、基本的なことがいくつか欠けていることも確かです。

現在の設定では、Traefik v2 が取得し、LE 証明書を作成し、http:80 から https:443 にリダイレクトして公開する Web ベース (ポート 80) の Docker サービスを作成できます。以下は、docker-compose.ymlTraefik 用と、実際に動作するサンプル サービス用のものです。

しかし、私のウェブベースのサービスが80番以外のポートで動作したいとします。例えば、スタッティングはポート8080で動作します。現在のSSL設定では、エントリポイントを公開できるように配線することは可能ですか?http://statping.MYTLDTraefikを利用して、次の操作を行います。1. リダイレクトhttps://statping.MYTLD、2. 証明書を取得し、3. ステータス Docker コンテナーを公開しますか? 基盤となるサービスがポート 80 で実行されていない場合でも、Traefik は Acme http チャレンジを処理できますか? 私の作業サンプルではコンテナー レベルを超えてポートを公開していないので、処理できると思います。

注: 私は Docker Compose に最も精通していますが、おそらく statping のようなサービスの場合、ポート 8080 ではなくポート 80 で実行するように説得できるように、独自の DOCKERFILE を記述する方法を理解する必要がありますか?

ご意見をいただければ幸いです。

トラエフィック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 が通信に使用するポートを手動で指定する必要があります traefik.http.services.<service_name>.loadbalancer.server.port(このラベルの詳細については、ルーティングの専用セクションを参照してください)。

したがって、whoami が 8080 でリッスンしていて、正確に 1 つのポートを公開していない場合は、ラベルを指定する必要があります。

"traefik.http.services.whoami2.loadbalancer.server.port=8080"

関連情報