Traefik开源的反向代理程序,支持Docker、HTTPS、Let's Encrypt(自动获取证书和更新)、动态更新、快速、配置简单。

使用Docker公布应用时一般是使用“Nginx + Consul-Template”、“Fabio + Consul”或者“Traefik”完成反向代理将多个不同域名和不同路径的应用公开到网上。

Traefik可以不依赖其它程序,使用比较简单,直接从Docker获取Container建立时的标签信息,根据标签建立后端应用的访问方式。

traefik-logic.png

用Traefik发布站点并添加HTTPS支持

一个简单的例子,在主机上有个需要HTTPS支持的站点,运行在Docker容器中,我们通过Traefik为这个站点绑定域名,并且自动添加HTTPS支持。

注意:需要可以同时通过HTTP和HTTPS访问。

配置前端Traefik

准备运行目录及相关文件

mkdir -p traefik/{letsencrypt,}
cd traefik
touch letsencrypt/acme.json

建立网络配置,虽然docker-compose可以自己默认建立网络配置,在这里我们先人工给他建立

docker network create webrouter

编辑docker-compose.yaml文件

version: '3.5'

services:
  webrouter:
    # The official v2.0 Traefik docker image
    image: traefik:v2.0
    # Enables the web UI and tells Traefik to listen to docker
    command: 
      #- "--log.level=DEBUG"
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.default.acme.httpchallenge=true"
      - "--certificatesresolvers.default.acme.httpchallenge.entrypoint=web"
      #- "--certificatesresolvers.default.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
      - "--certificatesresolvers.default.acme.email=jilili@aliyun.com"
      - "--certificatesresolvers.default.acme.storage=/letsencrypt/acme.json"
    labels:
      - "traefik.docker.network=webrouter"
    ports:
      # The HTTP port
      - "80:80"
      # The HTTPS port
      - "443:443"
      # The Web UI (enabled by --api.insecure=true)
      - "8080:8080"
    volumes:
      # So that Traefik can listen to the Docker events
      - /var/run/docker.sock:/var/run/docker.sock
      - "./letsencrypt:/letsencrypt"
      #- "/var/run/docker.sock:/var/run/docker.sock:ro"
    networks:
      - webrouter

networks:
  webrouter:
    external: true

至此traefik的配置工作已经准备好了,可以启动traefik容器了。

docker-compose up -d

建立后端应用

下来我们进行后端应用的建立,可以使用docker-compose或者docker run完成。

mkdir whoami && cd whoami
vi docker-compose.yaml

编辑文件内容

version: '3'

services:
  whoami:
    # A container that exposes an API to show its IP address
    image: containous/whoami
    labels:
      - traefik.enable=true
      - traefik.docker.network=webrouter
      - traefik.http.routers.whoami.rule=Host(`whoami.docker.localhost`)
      - traefik.http.routers.whoami.entrypoints=web
      - traefik.http.routers.whoami-https.rule=Host(`whoami.docker.localhost`)
      - traefik.http.routers.whoami-https.entrypoints=websecure
      - traefik.http.routers.whoami-https.tls.certresolver=default
    ports:
      # The HTTP port
      - "80:80"
    networks:
      - webrouter

networks:
  webrouter:
    external: true

启动后端应用

docker-compose up -d

大功告成进行结果测试

curl -H Host:whoami.docker.localhost http://127.0.0.1
curl -H Host:whoami.docker.localhost https://127.0.0.1

将HTTP转向HTTPS

在后端容器的标签中加入如下内容。

  -l "traefik.http.middlewares.$container.redirectscheme.scheme=https" \
  -l "traefik.http.routers.$container.middlewares=$container@docker" \

相关文章

· Traefik

· Traefik

[ 编辑 | 历史 ]
最近由“jilili”在“2019-12-15 09:36:49”修改