Docker指南:安装Traefik - 一种用于微服务的现代反向代理

Traefik是一种用于微服务的现代HTTP反向代理和负载均衡器。在本教程中,我将逐步向您展示如何安装和配置...

Docker指南:安装Traefik - 一种用于微服务的现代反向代理

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权限

我们将要做什么?

  1. 在Ubuntu 18.04上安装Docker
  2. 安装Docker Compose
  3. 创建自定义Docker网络
  4. 安装和配置Traefik
  5. 测试

第1步 - 在Ubuntu 18.04上安装Docker

对于本指南,我们将使用可从官方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'命令将自动更新所有存储库。

在Ubuntu上安装Docker

现在安装最新的docker-ce。

sudo apt install docker-ce

安装完成后,启动docker服务并使其在系统引导时每次启动。

systemctl start docker
systemctl enable docker

docker社区版已安装在Ubuntu 18.04系统上,检查已安装的docker版本。

docker version

检查docker版本

附加:为非root用户运行Docker

Docker容器可以在非root用户下运行。 我们只需要将用户添加到docker组。

添加'mohammad'用户。

useradd -m -s /bin/bash mohammad

现在将'mohammad'用户添加到docker组,然后重新启动docker服务。

usermod -a -G docker mohammad
systemctl restart docker

通过运行docker hello-world进行测试。

docker run -it hello-world

以下是结果。

为非root用户运行Docker

第2步 - 安装Docker Compose

Docker-Compose是一个命令行工具,用于定义和管理多容器Docker窗应用程序。

Docker Compose是一个python脚本,可以使用python pip命令安装,也可以使用ubuntu存储库中的apt命令轻松安装。 使用compose,我们可以使用单个命令运行多个Docker容器。

使用下面的apt命令从存储库安装docker compose。

sudo apt install docker-compose

安装完成后,请检查docker compose版本。

docker-compose version

在Ubuntu 18.04上安装了docker compose 1.17。

安装Docker Compose

第3步 - 创建自定义Docker网络

在本教程中,traefik容器将在docker自定义网络上运行。 所以我们需要在服务器上创建一个新的docker自定义网络。

检查系统上可用的docker网络。

docker network ls

现在为traefik容器创建一个名为“proxy”的新自定义网络。

docker network create proxy

并且您将获得网络容器名称的随机字符串。 再次检查可用的网络。

docker network ls

结果如下所示。

创建自定义Docker网络

已创建名为“proxy”for traefik的自定义Docker窗网络。

第4步 - 安装和配置Traefik反向代理

在此步骤中,我们将创建启用HTTPS letsencrypt的traefik容器(使用域名'traefik.hakase-labs.io),并在traefik上自动将HTTP重定向到HTTPS。

Traefik预安装

在创建所有traefik配置之前,我们需要安装'apache2-utils'来生成加密的htpasswd密码并创建新的traefik目录。

使用下面的apt命令安装'apache2-utils'。

sudo apt install apache2-utils -y

现在运行下面的htpasswd命令为traefik仪表板身份验证生成新密码。

htpasswd -nb mohammad password

将结果保存在您的笔记中。

mohammad:$apr1$hEgpZUN2$OYG3KwpzI3T1FqIg9LIbi.

安装和配置Traefik反向代理

接下来,登录'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 = "hakaselabs@gmail.com"
storage = "acme.json"
entryPoint = "https"
OnHostRule = true
  [acme.httpChallenge]
  entryPoint = "http"

保存并退出。

注意:

有关配置的所有信息都在评论部分' #... '中。

创建Traefik Docker Compose脚本

现在创建docker-compose yml脚本。

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

保存并退出。

注意:

  1. 我们正在基于'traefik:latest'Docker窗图像创建一个名为'traefik'的新容器。
  2. 'traefik'容器将在名为'proxy'的自定义docker网络上运行,并公开外部端口HTTP 80和HTTPS 443。
  3. 容器将安装traefik配置'traefik.toml'和'acme.json',包括docker sock文件。
  4. traefik,前端域名和traefik端口的标签配置。

Letsencrypt ACME配置

'traefik.toml'上的acme配置用于自动生成SSL letsencrypt。 并且它是存储文件'acme.json'所必需的。

创建一个新的JSON文件'acme.json'并将权限更改为'600'。

touch acme.json
chmod 600 acme.json

有关SSL letsencrypt信息的所有日志都将保存在文件中。

建立Traefik容器

现在我们准备使用上面的配置文件构建我们自己的traefik容器了。

cd traefik/
ls -lah

所有配置'traefik.toml','docker-compose.yml'和'acme.json'文件。

建立Traefik容器

使用下面的docker compose命令构建容器。

docker-compose up -d

使用docker compose构建容器

完成后,检查正在运行的容器。

docker-compose ps

您将启动并运行Traefik容器,公开外部端口HTTP和HTTPS。

Traefik容器启动并运行

第5步 - 测试

打开Web浏览器,在地址栏中键入traefik域名。 我的是:

http://traefik.hakase-labs.io/

您将被重定向到HTTPS连接,并将被要求输入用户名和密码。

密码验证

使用用户'mohammad'登录,密码为'password'。

您将获得如下Traefik仪表板。

Traefik仪表板

Traefik健康状况页面。

Traefik健康状况页面

Traefik现代HTTP反向代理已作为Docker容器安装在Ubuntu 18.04上。

参考