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/ にアクセスして、さらに詳しく調べることができます。ありがとうございます。