Traefik は、レイヤー 4 (TCP) とレイヤー 7 (HTTP) の負荷分散をサポートする最新のリバース プロキシおよび負荷分散サーバーです。その構成は、JSON、YML、または TOML 形式で定義できます。エントリ ポイント (フロントエンド)、サービス (バックエンド)、ルーター (ルール)、ミドルウェア (オプション機能) で構成されます。
この記事では、Traefik ロード バランサーをレイヤー 7 (HTTP) モードで使用する方法について説明します。
前提条件
<オール>構成
同じ Docker ネットワーク ゾーンで 2 つのバックエンド サーバー (nginx コンテナー) と 1 つの Traefik コンテナーを実行します。説明に traefik.yourdomain.com を使用しています。独自のドメインが必要です。
ホームの場所にディレクトリを作成することから始めましょう。
$ mkdir traefik && cd traefik
次のコマンドを使用して docker ネットワークを作成します。これは、その名前からコンテナーに到達するのに役立ちます。
$ docker network create web_zone
Traefik.yaml の構成
まず、traefik.yaml という名前のファイルを作成します。
$ vim traefik.yaml
次のコンテンツを貼り付けます。
# Static configuration
entryPoints:
unsecure:
address: :80
secure:
address: :443
certificatesResolvers:
myresolver:
acme:
email: [email protected]
storage: acme.json
httpChallenge:
entryPoint: unsecure
providers:
file:
filename: tls.yaml
watch: true 説明
- エントリ ポイントは、フロント エンド リスト サービスおよびポートのようなものです。
- certificatesResolvers は、オンデマンドのletsencrypt 証明書を使用します。
- プロバイダーは、ルーター/ミドルウェアおよびサービスを定義するファイルです
ファイル プロバイダーの構成
次に、同じディレクトリに、プロバイダー セクションで定義した別のファイルを作成します。
$ vim tls.yaml
次の yaml 構成を貼り付けます。
http:
routers:
http_router:
rule: "Host(`traefik.yourdomain.com`)"
service: allbackend
https_router:
rule: "Host(`traefik.yourdomain.com`)"
service: allbackend
tls:
certResolver: myresolver
options: tlsoptions
services:
allbackend:
loadBalancer:
servers:
- url: "http://myserver1/"
- url: "http://myserver2/"
tls:
options:
tlsoptions:
minVersion: VersionTLS12 説明
- ルーター セクションでは、ルートを定義します。 http と https の 2 つのルートがあります
- バックエンドはサービスで定義され、負荷分散アルゴリズムも指定できます。
- TLS の構成とオプションを定義するための tls。
ファイルで定義されているように、次のファイルを作成して、Let’s Encrypt 証明書を保存します。
$ touch acme.json
$ chmod 600 acme.json
traefik の Docker-compose
docker compose を使用してコンテナーを作成し、80、443 ポートをマップします。ドメイン名を定義します。ファイル docker-compse.yml を作成します:
$ vim docker-compose.yml
次の構成を貼り付けます:
version: '3'
services:
traefik:
image: traefik:latest
command: --docker --docker.domain=yourdomain.com
ports:
- 80:80
- 443:443
networks:
- web_zone
volumes:
- /run/docker.sock:/run/docker.sock
- ./traefik.yaml:/traefik.yaml
- ./tls.yaml:/tls.yaml
- ./acme.json:/acme.json
container_name: traefik
restart: always
networks:
web_zone:
external: true バックエンド サーバー
次に、nginx イメージを使用して 2 つのバックエンド サーバーを実行します。最初にディレクトリを作成してください
$ mkdir ~/traefik/backend && cd ~/traefik/backend/
以下のように 2 つのインデックス ファイルを作成します。
echo "<h1> Hello server 1</h1>" > index-server1.html
echo "<h1> Hello server 2</h1>" > index-server2.html
2 つの nginx バックエンド サーバーを実行するための Docker 構成ファイル
以下は、2 つの nginx コンテナーを作成する単純な構成ファイルです。 docker-compse.yml ファイルを作成します:
$ vim docker-compose.yml
次の構成を貼り付けます:
version: '3'
services:
myserver1:
image: nginx
container_name: nginx1
restart: always
volumes:
- ./index-server1.html:/usr/share/nginx/html/index.html
networks:
- web_zone
myserver2:
image: nginx
container_name: nginx2
restart: always
volumes:
- ./index-server2.html:/usr/share/nginx/html/index.html
networks:
- web_zone
networks:
web_zone:
external: true Docker コンテナーを開始する
コンテナを実行します。最初に、次のコマンドを使用して nginx バックエンド コンテナーを作成します。
$:~/traefik/backend$ docker compose up -d
2 つのコンテナーが実行されている必要があります。次のコマンドを実行して確認してください。
[email protected]:~/traefik/backend$ docker ps

次に、ディレクトリに戻り、次のコマンドを実行して traefik ロード バランサーを実行します。
$:~/traefik$ docker compose up -d
traefik コンテナーが稼働中であることを確認してください。
$:~/traefik$ docker ps

サイトを閲覧
ブラウザーを開き、ドメイン名 http://traefik.yourdomain.com を入力します。以下の応答が得られます。

また、ページを更新すると、2 番目のバックエンドにルーティングされます。これは、traefik のデフォルトのルーティング アルゴリズムです。

コンテナーが稼働している間に、letsencrypt によって証明書が発行されていることも確認できます。 https://traefik.yourdomain.com を参照してください

結論
docker コンテナーのロード バランサーとして traefik を使用する方法を学習します。公式サイト https://doc.traefik.io/traefik/ にアクセスして、さらに詳しく調べることができます。ありがとうございます。