Traefikは、マイクロサービス用の最新のHTTPリバースプロキシおよびロードバランサーです。 Traefikを使用すると、すべてのマイクロサービスのデプロイが簡単になり、Docker、Swarm Mode、Kubernetes、Amazon ECS、Rancher、Etcd、Consulなどの既存のインフラストラクチャコンポーネントと統合されます。
Traefikは、すべてのマイクロサービスアプリケーションのルーターとして機能し、すべてのクライアント要求を正しいマイクロサービスの宛先にルーティングします。
このチュートリアルでは、Ubuntu 18.04 LTS(Bionic Beaver)にTraefikモダンリバースプロキシをDockerコンテナとしてインストールして構成する方法を段階的に説明します。
- Ubuntu 18.04
- root権限
何をしますか?
- Ubuntu18.04にDockerをインストールする
- DockerComposeをインストールする
- カスタムDockerネットワークを作成する
- Traefikのインストールと構成
- テスト
このガイドでは、公式のDockerリポジトリからインストールできる最新のDockerバージョンを使用します。
以下のコマンドを使用して、Dockerキーとリポジトリを追加します。
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
'add-apt-repository'コマンドは、すべてのリポジトリを自動的に更新します。
次に、最新のdocker-ceをインストールします。
sudo apt install docker-ce
インストールが完了したら、Dockerサービスを開始し、システムの起動時に毎回起動できるようにします。
systemctl start docker
systemctl enable docker
dockercommunity-editionがUbuntu18.04システムにインストールされています。インストールされているdockerのバージョンを確認してください。
docker version
追加:root以外のユーザーに対してDockerを実行する
Dockerコンテナーは、root以外のユーザーで実行できます。ユーザーをDockerグループに追加するだけです。
'mohammad'ユーザーを追加します。
useradd -m -s /bin/bash mohammad
次に、「mohammad」ユーザーをdockerグループに追加してから、dockerサービスを再起動します。
usermod -a -G docker mohammad
systemctl restart docker
dockerhello-worldを実行してテストします。
docker run -it hello-world
結果は次のとおりです。
Docker-Composeは、マルチコンテナーDockerアプリケーションを定義および管理するためのコマンドラインツールです。
Docker ComposeはPythonスクリプトであり、pythonpipコマンドまたはUbuntuリポジトリのaptコマンドを使用して簡単にインストールできます。 composeを使用すると、1つのコマンドで複数のDockerコンテナを実行できます。
以下のaptコマンドを使用して、リポジトリからdockercomposeをインストールします。
sudo apt install docker-compose
インストールが完了したら、dockercomposeバージョンを確認します。
docker-compose version
dockercompose1.17がUbuntu18.04にインストールされました。
このチュートリアルでは、traefikコンテナがdockerカスタムネットワークで実行されます。そのため、サーバー上に新しいDockerカスタムネットワークを作成する必要があります。
システムで利用可能なDockerネットワークを確認してください。
docker network ls
次に、traefikコンテナ用に「proxy」という名前の新しいカスタムネットワークを作成します。
docker network create proxy
そして、ネットワークコンテナ名のランダムな文字列を取得します。利用可能なネットワークをもう一度確認してください。
docker network ls
結果を以下に示します。
traefikの「proxy」という名前のカスタムDockerネットワークが作成されました。
このステップでは、HTTPS Letsencryptを有効にして(ドメイン名'traefik.hakase-labs.ioを使用して)traefikコンテナーを作成し、traefikでHTTPをHTTPSに自動的にリダイレクトします。
Traefikプレインストール
すべてのtraefik構成を作成する前に、暗号化されたhtpasswdパスワードを生成し、新しいtraefikディレクトリを作成するために「apache2-utils」をインストールする必要があります。
以下のaptコマンドを使用して「apache2-utils」をインストールします。
sudo apt install apache2-utils -y
次に、以下のhtpasswdコマンドを実行して、traefikダッシュボード認証用の新しいパスワードを生成します。
htpasswd -nb mohammad password
結果をメモに残します。
mohammad:$apr1$hEgpZUN2$OYG3KwpzI3T1FqIg9LIbi.
次に、「mohammad」ユーザーにログインします。
su - mohammad
すべてのtraefik構成に対して「traefik」という名前の新しいディレクトリを作成します。
mkdir -p traefik/
cd traefik/
Traefik構成を作成
「traefik」ディレクトリに移動し、vimエディタを使用して新しい構成ファイル「traefik.toml」を作成します。
cd traefik/
vim traefik.toml
以下の設定を貼り付けてください。
#Traefik Global Configuration debug = false checkNewVersion = true logLevel = "ERROR" #Define the EntryPoint for HTTP and HTTPS defaultEntryPoints = ["https","http"] #Enable Traefik Dashboard on port 8080 #with basic authentication method #mohammad and password [web] address = ":8080" [web.auth.basic] users = ["mohammad:$apr1$hEgpZUN2$OYG3KwpzI3T1FqIg9LIbi."] #Define the HTTP port 80 and #HTTPS port 443 EntryPoint #Enable automatically redirect HTTP to HTTPS [entryPoints] [entryPoints.http] address = ":80" [entryPoints.http.redirect] entryPoint = "https" [entryPoints.https] address = ":443" [entryPoints.https.tls] #Enable retry sending a request if the network error [retry] #Define Docker Backend Configuration [docker] endpoint = "unix:///var/run/docker.sock" domain = "traefik.hakase-labs.io" watch = true exposedbydefault = false #Letsencrypt Registration #Define the Letsencrypt ACME HTTP challenge [acme] email = "[email protected]" storage = "acme.json" entryPoint = "https" OnHostRule = true [acme.httpChallenge] entryPoint = "http"
保存して終了します。
注:
構成に関するすべての情報は、コメントセクション'#...にあります。 '。
TraefikDocker作成スクリプトを作成する
次に、docker-composeymlスクリプトを作成します。
vim docker-compose.yml
以下の設定を貼り付けてください。
version: '3' services: traefik: image: traefik:latest command: --docker --docker.domain=hakase-labs.io ports: - 80:80 - 443:443 networks: - proxy volumes: - /var/run/docker.sock:/var/run/docker.sock - ./traefik.toml:/traefik.toml - ./acme.json:/acme.json labels: - "traefik.frontend.rule=Host:traefik.hakase-labs.io" - "traefik.port=8080" container_name: traefik restart: always networks: proxy: external: true
保存して終了します。
注:
- 「traefik:latest」Dockerイメージに基づいて「traefik」という名前の新しいコンテナを作成しています。
- 「traefik」コンテナは「proxy」という名前のカスタムDockerネットワークで実行され、外部ポートHTTP80およびHTTPS443を公開します。
- コンテナは、dockersockファイルを含むtraefik構成'traefik.toml'および'acme.json'をマウントします。
- traefik、フロントエンドドメイン名、traefikポートのラベル設定。
LetsencryptACME構成
'traefik.toml'のacme構成は、SSLletsencryptを自動的に生成するために使用されます。また、ストレージファイル「acme.json」に必要です。
新しいJSONファイル「acme.json」を作成し、権限を「600」に変更します。
touch acme.json
chmod 600 acme.json
SSLletsencrypt情報に関するすべてのログがファイルに保存されます。
Traefikコンテナを構築する
これで、上記の構成ファイルを使用して独自のtraefikコンテナを構築する準備が整いました。
cd traefik/
ls -lah
すべての構成'traefik.toml'、'docker-compose.yml'、および'acme.json'ファイル。
以下のdockercomposeコマンドを使用してコンテナをビルドします。
docker-compose up -d
完了したら、実行中のコンテナを確認します。
docker-compose ps
そして、Traefikコンテナを起動して実行し、外部ポートHTTPとHTTPSを公開します。
Webブラウザーを開き、アドレスバーにtraefikドメイン名を入力します。私のは:
http://traefik.hakase-labs.io/
HTTPS接続にリダイレクトされ、ユーザー名とパスワードの認証を求められます。
ユーザー「mohammad」でログインし、パスワードは「password」です。
そして、以下のようにTraefikダッシュボードが表示されます。
TraefikHealthステータスページ。
Traefikの最新のHTTPリバースプロキシは、Ubuntu18.04にDockerコンテナとしてインストールされています。