如何在 Ubuntu 20.04 中使用 Docker 设置 Traefik 负载均衡器
Traefik 是一个现代反向代理和负载平衡服务器,支持第 4 层 (TCP) 和第 7 层 (HTTP) 负载平衡。其配置可以以 JSON、YML 或 TOML 格式定义。它由入口点(前端)、服务(后端)、路由器(规则)、中间件(可选功能)组成。
本文将演示如何在第 7 层(HTTP)模式下使用 Traefik 负载均衡器。
先决条件
- 安装了 docker 和 docker-compose
- 用于下载 docker 镜像的互联网连接。
- DNS A 记录映射到您的域以获取 Let's Encrypt 证书(例如 traefik.yourdomain.com)
配置
我将在同一个 Docker 网络区域中运行两台后端服务器(nginx 容器)和一个 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
storage: acme.json
httpChallenge:
entryPoint: unsecure
providers:
file:
filename: tls.yaml
watch: true
解释
- 入口点就像前端列出服务和端口。
- certificatesResolvers 是使用按需的 LetsEncrypt 证书。
- Providers 是定义路由器/中间件和服务的文件
文件提供者配置
现在,在同一目录中创建我们在提供程序部分中定义的另一个文件:
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 两种路由
- 后端在服务中定义,您还可以指定负载平衡算法。
- 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 镜像运行两个后端服务器。先建立一个目录,
mkdir ~/traefik/backend && cd ~/traefik/backend/
创建两个索引文件,如下所示。
echo "<h1> Hello server 1</h1>" > index-server1.html
echo "<h1> Hello server 2</h1>" > index-server2.html
Docker compose 文件来运行两个 nginx 后端服务器
以下是创建两个 nginx 容器的简单 compose 文件。创建 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
必须运行两个容器。通过执行以下命令进行确认。
nimesh@LinuxWays:~/traefik/backend$ docker ps
现在,返回目录并运行以下命令来运行 traefik 负载均衡器。
$:~/traefik$ docker compose up -d
确保 traefik 容器已启动并正在运行。
$:~/traefik$ docker ps
浏览网站
打开浏览器并输入您的域名 http://traefik.yourdomain.com。您将得到下面的回复。
此外,如果刷新页面,您将被路由到第二个后端。这是 traefik 中默认的路由算法。
您还可以在容器启动时检查证书是否由 LetsEncrypt 颁发。只需浏览 https://traefik.yourdomain.com
结论
您将了解如何使用 traefik 作为 docker 容器的负载均衡器。您可以访问官方网站 https://doc.traefik.io/traefik/ 探索更多信息。谢谢。