GNU/Linux >> Linux の 問題 >  >> Linux

Ubuntu 20.04 で Docker を使用して Traefik ロード バランサーをセットアップする方法

Traefik は、レイヤー 4 (TCP) とレイヤー 7 (HTTP) の負荷分散をサポートする最新のリバース プロキシおよび負荷分散サーバーです。その構成は、JSON、YML、または TOML 形式で定義できます。エントリ ポイント (フロントエンド)、サービス (バックエンド)、ルーター (ルール)、ミドルウェア (オプション機能) で構成されます。

この記事では、Traefik ロード バランサーをレイヤー 7 (HTTP) モードで使用する方法について説明します。

前提条件

<オール>
  • docker と docker-compose をインストール
  • Docker イメージをダウンロードするためのインターネット接続
  • Let’s Encrypt 証明書を取得するためのドメインへの DNS A レコード マップ (例:traefik.yourdomain.com)
  • 構成

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


    Linux
    1. Ubuntu20.04でVSFTPDを使用してFTPサーバーをセットアップする方法

    2. UbuntuにDockerでWordPressをインストールする方法

    3. Ubuntu 18.04にDockerをインストールする方法は?

    1. Ubuntu18.04でVSFTPDを使用してFTPサーバーをセットアップする方法

    2. Ubuntu20.04でプライベートDockerレジストリを設定する方法

    3. UbuntuでDockerを使用してONLYOFFICE8.9.0をインストールする方法

    1. Ubuntu18.04LTSでプライベートDockerレジストリを設定する方法

    2. Ubuntu20.04LTSにDockerを使用してGitLabをインストールする方法

    3. Ubuntu15.04でJAVA8を使用してGlassFish4.1をセットアップする方法