traefik尝鲜

简介

之前都是用Nginx来做反代,最近发现了新的玩具traefik,来玩一下,看看对比NPM有什么优劣。

安装

这里就用Docker来安装

version: '3'

services:
  reverse-proxy:
    # The official v2 Traefik docker image
    image: traefik:v2.9
    # Enables the web UI and tells Traefik to listen to docker
    command: --api.insecure=true --providers.docker
    ports:
      # The HTTP port
      - "85:80"
      # The Web UI (enabled by --api.insecure=true)
      - "8085:8080"
    volumes:
      # So that Traefik can listen to the Docker events
      - /var/run/docker.sock:/var/run/docker.sock

然后docker compose up -d,起容器
UFW开对应的端口就OK了。

webUI

trae-UI
自带UI,还是很方便的

配置

Traefik 提供了多种配置方式,可以直接在容器的label中添加,也可以使用传统的配置文件的形式,更是提供了一大堆称为Providers的插件来做到动态更改配置。
比如:

labels:
  - "traefik.enable=true"
  - "traefik.http.routers.unityacc.rule=Host(`acc.home.kuanmi.top`)"
  - "traefik.http.routers.unityacc.entrypoints=web"

如果要在配置文件中调用docker的服务,要使用@符号,如:

http:
  routers:
    testRouters:
      rule: "Host(`test.home.kuanmi.top`)"
      service: whoami-traefik@docker

https

证书方面也提供了Let’s Encrypt来自动生成和更新,由于这里无法访问80和443端口,就使用DNS的方式来自动生成。

certificatesResolvers:
  myresolver:
    acme:
      email: ma_zhengke@outlook.com
      storage: /etc/traefik/acme.json
      dnsChallenge:
        provider: alidns
        delayBeforeCheck: 0
http:
  routers:
    testRouters:
      rule: "Host(`test.home.kuanmi.top`)"
      service: whoami-traefik@docker
      tls:
        certresolver: myresolver

如果是要通配符的话:

http:
  routers:
    unityacc:
      rule: "Host(`unity.home.kuanmi.top`)"
      entryPoints:
        - "web-secure"
      service: unityAcc-unityacc@docker
      tls:
        certresolver: myresolver
        domains:
          - main: "home.kuanmi.top"
            sans:
              - "*.home.kuanmi.top"

总结

和Nginx对比的话,但就我能使用到的功能,二者相差不大,更多的功能还没有体验到,不敢妄下结论说二者的优劣。
唯一觉得有意思的一点是Traefik可以接入docker,使用label做到服务的发现(虽然还是要配置),方便不少。
但用NPM,同时给各个容器配置别名,其实也大差不差。
再加上一些nginx常用的便捷的如return 444等还不知道该怎么在Traefik中实现,目前还是沿用Nginx的配置不要变动了。


traefik尝鲜
https://www.kuanmi.top/2023/01/27/traefik/
作者
KuanMi
发布于
2023年1月28日
许可协议