Traefik目前是一个在国外特别流行的HTTP反向代理和负载均衡器,可以看项目页面star高达27.3k:
https://github.com/containous/traefik
Traefik是Go开发的,有二进制文件可以直接用,但大多数情况下都是配合docker或者k8s使用。目前有两个主版本一个是最新的2.0,还有一个是1.7。这里我选择使用1.7,因为2.0版本的配置要比1.7复杂不少。
这篇文章主要介绍一下Traefik的反向代理,例如现在我们有这样一个需求:
在同一台服务器上,用docker部署wordpress/nextcloud等等其他很多web应用,这时候如何快速给这些容器绑定域名并配置SSL呢?Traefik的作用就体现出来了。
更详细的看看官方的这张示意图:
废话不多说,先安装docker:
apt -y update apt -y install curl curl -sSL https://get.docker.com/ | sh systemctl start docker systemctl enable docker
安装docker-compose:
curl -L https://github.com/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose
安装apache2-utils用于生成.htpasswd文件:
apt -y install apache2-utils
现在创建一个目录:
mkdir -p /opt/traefik
创建acme.json用于保存自动生成的ssl证书:
touch /opt/traefik/acme.json && chmod 600 /opt/traefik/acme.json
创建一个docker-compose.yml:
cd /opt/traefik nano docker-compose.yml
在这个docker-compose内我们只运行traefik,下面是我的一个配置示例:
version: '3.5' services: reverse-proxy: container_name: traefik image: traefik:v1.7 command: --api --docker ports: - "80:80" - "443:443" networks: - traefik volumes: - /var/run/docker.sock:/var/run/docker.sock - /opt/traefik/traefik.toml:/traefik.toml - /opt/traefik/acme.json:/acme.json - /opt/traefik/.htpasswd:/.htpasswd labels: - "traefik.port=8080" - "traefik.frontend.rule=Host:traefik.233.fi" - "traefik.frontend.auth.basic.usersFile=/.htpasswd" networks: traefik: name: imlala
注意版本选择使用3.5或者以上,自3.5起可以在docker-compose内指定network的name。
如你所看到的,在这个docker-compose内我们创建了一个名为imlala的网络,同时让traefik使用这个网络,并且后续所有需要用到traefik的容器都使用这个网络。
labels下面配置了一个traefik的webui,如果不需要可以删除这些配置以及对应的卷。
接着生成.htpasswd文件(不需要webui可以省略这步):
htpasswd -c $(pwd)/.htpasswd imlala
现在创建traefik.toml配置文件:
nano traefik.toml
写入如下配置:
defaultEntryPoints = ["https","http"] [entryPoints] [entryPoints.http] address = ":80" [entryPoints.http.redirect] entryPoint = "https" [entryPoints.https] address = ":443" [entryPoints.https.tls] [acme] email = "[email protected]" storage = "acme.json" entryPoint = "https" onHostRule = true [acme.httpChallenge] entryPoint = "http"
在这个配置内,我们会将80端口的流量全部重定向到443端口,同时使用acme自动为域名申请ssl证书。你只需要将[email protected]修改为你自己的邮箱即可。
现在up起来即可:
docker-compose up -d
接下来我使用2个whoami容器演示traefik是如何工作的。
mkdir -p /opt/whoami mkdir -p /opt/whoami2
在whoami目录内创建docker-compose.yml,写入如下配置:
version: '3.5' services: whoami: image: containous/whoami labels: - "traefik.frontend.rule=Host:whoami.233.fi" networks: default: external: name: imlala
在whoami2目录内创建docker-compose.yml,写入如下配置:
version: '3.5' services: whoami: image: containous/whoami labels: - "traefik.frontend.rule=Host:whoami2.233.fi" networks: default: external: name: imlala
可以看到只是简单的使用labels给不同的容器指定了不同的host,然后将这些容器的网络都加入到之前创建的imlala内即可。
将这两个容器up起来:
docker-compose up -d
访问这两个域名你可以看到每个域名都自动生成了SSL证书,并且对应指向了不同的容器:
以及:
在webui上可以看到前后端对应的关系:
健康状态:
LALA
我什么都不卖了,告辞!
最新评论
5211314
能不能教我 一点不会