免責事項: 私の Docker と Traefik に関する知識は乏しいです。Traefik のドキュメントに従おうと何度か試みましたが、たいていは混乱するばかりです。おそらく、最も単純なケース以上のものに取り組みたいからでしょうが、基本的なことがいくつか欠けていることも確かです。
現在の設定では、Traefik v2 が取得し、LE 証明書を作成し、http:80 から https:443 にリダイレクトして公開する Web ベース (ポート 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 に最も精通していますが、おそらく 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.http.services.<service_name>.loadbalancer.server.port
(このラベルの詳細については、ルーティングの専用セクションを参照してください)。
したがって、whoami が 8080 でリッスンしていて、正確に 1 つのポートを公開していない場合は、ラベルを指定する必要があります。
"traefik.http.services.whoami2.loadbalancer.server.port=8080"