一、简介
Traefik 是一个优秀的开源边缘路由器,也就是反向代理工具。
相比于Nginx,它具有如下优点:
-
自动服务发现:传统的边缘路由器(或反向代理)需要一个配置文件,其中包含到您的服务的所有可能的路由,而 Traefik 从服务本身获取它们。
-
原生兼容所有主要集群技术,例如 Kubernetes、Docker、Docker Swarm、AWS、Mesos、Marathon,并且可以同时处理多个。
-
无需维护和同步单独的配置文件,自动实时更新,无需重新启动,不会中断连接
-
集成了漂亮的
dashboard界面
二、使用 Docker 的简单用例
新建docker-compose.yml文件,创建了一个reverse-proxy服务,使用官方 Traefik 镜像:
version: '3'
services:
reverse-proxy:
# The official v2 Traefik docker image
image: traefik:v2.4
# 启用dashboard并使用docker作为provider
command: --api.insecure=true --providers.docker
ports:
# The HTTP port
- "80:80"
# 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
启动:
docker-compose up -d reverse-proxy
打开浏览器并转到 localhost:8080/api/rawdata 以查看 Traefik 的 API 原始数据。
创建一个新服务,编辑您的docker-compose.yml文件并在文件末尾添加以下内容
# ...
whoami:
# 展示ip地址的容器
image: traefik/whoami
labels:
- "traefik.http.routers.whoami.rule=Host(`whoami.docker.localhost`)"
启动服务:
docker-compose up -d whoami
返回您的浏览器(localhost:8080/api/rawdata ),可以看到 Traefik 已自动检测到新容器并更新了自己的配置。
当 Traefik 检测到新服务时,它会创建相应的路由,以便您可以调用它们:
curl -H Host:whoami.docker.localhost http://127.0.0.1
显示以下输出:
Hostname: a656c8ddca6c
IP: 172.27.0.3
#...
扩容测试负载均衡:
docker-compose up -d --scale whoami=2
运行以下命令,查看 Traefik 在服务的两个实例之间进行负载平衡:
curl -H Host:whoami.docker.localhost http://127.0.0.1
输出将显示以下选项之一:
Hostname: a656c8ddca6c
IP: 172.27.0.3
#...
# 或者
Hostname: s458f154e1f1
IP: 172.27.0.4
# ...
三、配置
Traefik 中的配置分为2部分:
- 全动态路由配置(动态配置),从Provider获取_,_定义如何由系统来处理请求。此配置可以更改并无缝热重载,不会出现任何请求中断或连接丢失。
- 启动配置(静态配置),设置与Provider连接并定义Traefik 将侦听的入口点。
在 Traefik 中定义静态配置选项有三种不同的、互斥的(即您只能同时使用一种)的方法:
-
在配置文件中
-
在命令行参数中
-
作为环境变量
配置文件
启动时,Traefik 在以下位置搜索名为traefik.yml(或traefik.yaml或traefik.toml)的文件:
/etc/traefik/$XDG_CONFIG_HOME/$HOME/.config/.(工作目录)。
您可以使用configFile参数覆盖它。
traefik --configFile=foo/bar/myconfigfile.yml
参数
可以使用以下命令,获取所有可用参数的列表:
traefik --help
# or
docker run traefik[:version] --help
# ex: docker run traefik:2.1 --help
一些常见的参数有:
--accesslog:
访问日志设置。(默认值:false)
--api:
启用 api/仪表板。(默认值:false)
--certificatesresolvers.<name>:
证书解析器配置。(默认值:false)
--entrypoints.<name>:
入口点定义。(默认值:false)
--log:
Traefik 日志设置。(默认值:false)
--pilot.dashboard:
在仪表板中启用 Traefik Pilot。(默认值:true)
--ping:
启用ping。(默认值:false)
--providers.docker:
使用默认设置启用 Docker 后端。(默认值:false)
环境变量
常见的环境变量有(和参数一样,只不过换成大写形式,加上TRAEFIK_前缀):
TRAEFIK_ACCESSLOG:
访问日志设置。(默认值:false)
TRAEFIK_API:
启用 api/仪表板。(默认值:false)
TRAEFIK_CERTIFICATESRESOLVERS_<NAME>:
证书解析器配置。(默认值:false)
TRAEFIK_ENTRYPOINTS_<NAME>:
入口点定义。(默认值:false)
TRAEFIK_LOG:
Traefik 日志设置。(默认值:false)
TRAEFIK_PILOT_DASHBOARD:
在仪表板中启用 Traefik Pilot。(默认值:true)
TRAEFIK_PING:
启用ping。(默认值:false)
TRAEFIK_PROVIDERS_DOCKER:
使用默认设置启用 Docker 后端。(默认值:false)
四、Traefik 和 Docker
路由配置
当使用 Docker 作为provider 时,Traefik 使用容器标签来检索其路由配置。
如果容器expose了单个端口,则 Traefik 使用此端口进行私有通信,如果一个容器 expose了多个端口,或者没有暴露任何端口,那么你必须使用标签手动指定 Traefik 应该使用哪个端口进行通信traefik.http.services.<service_name>.loadbalancer.server.port。
当容器配置了主机网络时,主机的IP地址解析如下:
- 尝试查找
host.docker.internal - 如果查找不成功,则回退到
127.0.0.1
Traefik 需要访问 docker 套接字来获取API 访问权限,可以通过 endpoint 设置:
providers:
docker:
endpoint: "unix:///var/run/docker.sock"
Docker Swarm 模式
要启用 Docker Swarm(而不是独立 Docker)作为配置提供程序,请将swarmMode指令设置为true。
在 Swarm 模式下,Traefik 使用服务上的标签,而不是单个容器上的标签。
因此,如果您在 Swarm 模式下使用撰写文件,则应在deploy服务的部分中定义标签 。
Docker Swarm 不向 Traefik提供任何端口检测信息。
因此,您必须使用标签指定要用于通信的端口traefik.http.services.<service_name>.loadbalancer.server.port
由于 Swarm API 仅在管理器节点上公开,因此应通过在节点“角色”上约束部署 Traefik 来安排 Traefik 的这些节点:
version: '3'
services:
traefik:
# ...
deploy:
placement:
constraints:
- node.role == manager
Provider配置
endpoint必需_,_默认=“unix:///var/run/docker.sock”useBindPortIP可选,默认=false,Traefik 将请求路由匹配到容器的 IP/端口。设置useBindPortIP=true,Traefik 使用附加到容器绑定的 IP/端口,而不是其内部网络 IP/端口。当与traefik.http.services.<name>.loadbalancer.server.port标签结合使用时(告诉 Traefik 将请求路由匹配到特定端口),Traefik 会尝试在 port 上找到绑定traefik.http.services.<name>.loadbalancer.server.port。如果找不到这样的绑定,Traefik 会回退到容器的内部网络 IP,但仍然使用traefik.http.services.<name>.loadbalancer.server.port标签中设置的IP/端口 。exposedByDefault可选_,默认=true。_默认情况下Traefik 公开容器。如果设置为false,traefik.enable=true则从生成的路由配置中忽略没有标签的容器。network可选,默认=“”定义用于连接到所有容器的默认 docker 网络。可以使用traefik.docker.network标签在每个容器的基础上覆盖此选项。defaultRule_可选,默认=Host(`{{ normalize .Name }}`)。_如果标签未定义任何规则,则该选项定义要应用于容器的路由规则。swarmMode_可选,默认=false。_启用 Swarm 模式(而不是独立的 Docker)。swarmModeRefreshSeconds_可选,默认值=15。_定义群模式的轮询间隔(以秒为单位)。httpClientTimeout_可选,默认=0。_定义 HTTP 连接的客户端超时(以秒为单位)。如果它的值为0,则不设置超时。watch_可选,默认=true。_监听 Docker Swarm 事件。constraints_可选,默认=“”。_该constraints选项可以设置为 Traefik 与容器标签匹配的表达式,以确定是否为该容器创建任何路由。如果没有容器标签与表达式匹配,则不会为该容器创建路由。如果表达式为空,则包括所有检测到的容器。 表达式语法基于Tag(`tag`), 和TagRegex(`tag`)函数以及通常的布尔逻辑,如下所示。
# key为 `a.label.name` 值为 `foo`的容器
constraints = "Label(`a.label.name`, `foo`)"
# 排除key为 `a.label.name` 值为 `foo`的容器
constraints = "!Label(`a.label.name`, `value`)"
# 与
constraints = "Label(`a.label.name`, `valueA`) && Label(`another.label.name`, `valueB`)"
# 或
constraints = "Label(`a.label.name`, `valueA`) || Label(`another.label.name`, `valueB`)"
tls
-
tls.ca用于安全连接到 Docker 的证书颁发机构。 -
tls.caOptional定义应使用哪个策略与 TLS 客户端身份验证到 Docker 的安全连接。 -
tls.cert用于安全连接到 Docker 的公共证书 -
tls.key用于安全连接到 Docker 的私有证书 -
tls.insecureSkipVerify如果insecureSkipVerify是true,则与 Docker 的 TLS 连接接受服务器提供的任何证书,而不管它涵盖的主机名
五、路由和负载平衡
完整的Traefik 的架构分为这几部分:
- entryPoints 侦听传入流量(端口,...)EntryPoints 是 Traefik 的网络入口点。它们定义了将接收数据包的端口,以及是侦听 TCP 还是 UDP。
- routers 分析请求(主机、路径、标头、SSL 等),路由器负责将传入请求连接到可以处理它们的服务
- services 将请求转发给您的服务(负载平衡,...)
- middlewares 可能会更新请求或根据请求做出决定(身份验证、速率限制、标头等)
- providers 发现存在于您的基础架构上的服务(他们的 IP、健康状况……)
EntryPoints配置实例:
## 静态配置
entryPoints:
name:
address: ":8888" # same as ":8888/tcp"
transport:
lifeCycle:
requestAcceptGraceTimeout: 42
graceTimeOut: 42
respondingTimeouts:
readTimeout: 42
writeTimeout: 42
idleTimeout: 42
proxyProtocol:
insecure: true
trustedIPs:
- "127.0.0.1"
- "192.168.0.1"
forwardedHeaders:
insecure: true
trustedIPs:
- "127.0.0.1"
- "192.168.0.1"
- address定义了端口和主机名(可选),用于侦听传入的连接和数据包。它还定义了要使用的协议(TCP 或 UDP)。如果未指定协议,则默认为 TCP。格式为:
[host]:port[/tcp|/udp]
- forwardedHeaders您可以将 Traefik 配置为信任转发的标头信息 (
X-Forwarded-*)。 - transport
respondingTimeouts对 Traefik 实例的传入请求的超时。设置它们对 UDP 入口点没有影响。lifeCycle控制 Traefik 在关闭阶段的行为
-
proxyProtocol如果为入口点启用了代理协议标头解析,则此入口点可以接受带有或不带有代理协议标头的连接。
-
HTTP 配置HTTP 路由
routers配置实例:
routers可以配置 HTTP 路由器、TCP 路由器、UDP 路由器,本文只介绍Http
## 配置Http路由
http:
routers:
Router-1:
# By default, routers listen to every entry points
rule: "Host(`example.com`)"
service: "service-1"
- rule规则是一组配置有值的匹配器,用于确定特定请求是否与特定标准匹配。如果规则得到验证,路由器将变为活动状态,调用中间件,然后将请求转发给服务。下表列出了所有可用的匹配器:
| 描述 | |
|---|---|
| Headers(`key`, `value`) | 检查key标题中是否定义了一个键,其值value |
| HeadersRegexp(`key`, `regexp`) | 检查key标题中是否定义了一个键,其值与正则表达式匹配regexp |
| Host(`example.com\`, ...) | 检查请求域(主机标头值)是否针对给定的domains. |
| HostHeader(`example.com\`, ...) | 检查请求域(主机标头值)是否针对给定的domains. |
| HostRegexp(`example.com\`, `{subdomain:[a-z]+}.example.com\`, ...) | 检查请求域是否与给定的regexp. |
| Method(`GET`, ...) | 检查请求方法是否是给定的methods( GET, POST, PUT, DELETE, PATCH, HEAD) 之一 |
| Path(`/path`, `/articles/{cat:[a-z]+}/{id:[0-9]+}`, ...) | 匹配准确的请求路径。它接受一系列文字和正则表达式路径。 |
| PathPrefix(`/products/`, `/articles/{cat:[a-z]+}/{id:[0-9]+}`) | 匹配请求前缀路径。它接受一系列文字和正则表达式前缀路径。 |
| Query(`foo=bar`, `bar=baz`) | 匹配查询字符串参数。它接受一系列键=值对。 |
- priority,为避免路径重叠,默认情况下,使用规则长度按降序对路由进行排序。优先级直接等于规则的长度,因此最长的长度具有最高的优先级。
0忽略优先级的值:priority = 0表示使用默认规则长度排序。 - middlewares,您可以将中间件附加到每个 HTTP 路由器。只有在规则匹配且在将请求转发到服务之前,中间件才会生效。
# 动态配置
http:
routers:
my-router:
rule: "Path(`/foo`)"
# declared elsewhere
middlewares:
- authentication
service: service-foo
- service每个请求最终都必须由一个服务处理,这就是为什么每个路由器定义都应该包含一个服务目标
- tls当指定了 TLS 部分时,它会指示 Traefik 当前路由器仅专用于 HTTPS 请求(并且路由器应忽略 HTTP(非 TLS)请求)。Traefik 将终止 SSL 连接(这意味着它将向服务发送解密数据)。
services配置实例:
services可以配置 HTTP 服务、TCP 服务、UDP 服务,本文只介绍Http
# 动态配置
http:
services:
my-service:
loadBalancer:
servers:
- url: "http://<private-ip-server-1>:<private-port-server-1>/"
- url: "http://<private-ip-server-2>:<private-port-server-2>/"
- loadBalancer 负载平衡器能够在您的程序的多个实例之间对请求进行负载平衡
- servers 声明程序的单个实例。该
url选项指向特定实例 - sticky 启用粘性会话后,会在初始请求和响应上设置 cookie,以让客户端知道哪个服务器处理第一个响应。在后续请求中,为了保持会话与同一服务器的活动,客户端应重新发送相同的 cookie。
# 动态配置
http:
services:
my-service:
loadBalancer:
sticky:
cookie: {}
-
healthCheck 配置健康检查以从负载平衡轮换中删除不健康的服务器。Traefik 会认为您的服务器健康,只要它们在健康检查请求在
2XX和3XX之间。以下是健康检查机制的可用选项:path附加到服务器 URL 以设置运行状况检查端点。scheme,如果已定义,将替换scheme运行状况检查端点的服务器 URLhostname,如果已定义,则将Host标头hostname应用于健康检查请求。port,如果已定义,将替换port运行状况检查端点的服务器 URL 。interval定义运行状况检查调用的频率。timeout定义 Traefik 在考虑服务器失败(不健康)之前等待健康检查请求的最长时间。headers定义要发送到健康检查端点的自定义标头。followRedirects定义在运行状况检查调用期间是否应遵循重定向(默认值:true)。
-
passHostHeader 允许客户端主机头转发到服务器
-
serversTransport 配置 Traefik 和您的服务器之间的传输
ServerName用于 SNI 的服务器名称Certificates被设置为 mTLS 的客户端证书的证书列表insecureSkipVerify禁用 SSL 证书验证rootCAs使用自签名 TLS 证书时将设置为根证书颁发机构的证书列表(作为文件路径或数据字节)。maxIdleConnsPerHost如果非零,则maxIdleConnsPerHost控制最大空闲(保持活动)连接以保持每个主机。forwardingTimeouts将请求转发到后端服务器时相关的一些超时
-
weighted,WRR 能够基于权重对多个服务之间的请求进行负载平衡。此策略仅适用于services之间的负载平衡,而不适用于服务器之间的负载平衡
## 动态配置
http:
services:
app:
weighted:
services:
- name: appv1
weight: 3
- name: appv2
weight: 1
appv1:
loadBalancer:
servers:
- url: "http://private-ip-server-1/"
appv2:
loadBalancer:
servers:
- url: "http://private-ip-server-2/"
- mirroring 镜像能够将发送到服务的请求镜像到其他服务。请注意,默认情况下,整个请求在被镜像时都缓存在内存中。
## 动态配置
http:
services:
mirrored-api:
mirroring:
service: appv1
# maxBodySize is the maximum size allowed for the body of the request.
# If the body is larger, the request is not mirrored.
# Default value is -1, which means unlimited size.
maxBodySize: 1024
mirrors:
- name: appv2
percent: 10
appv1:
loadBalancer:
servers:
- url: "http://private-ip-server-1/"
appv2:
loadBalancer:
servers:
- url: "http://private-ip-server-2/"
docker配置实例:
转发http://example.com的请求到http://<private IP of container>:12345:
version: "3"
services:
my-container:
# ...
labels:
- traefik.http.routers.my-container.rule=Host(`example.com`)
# Tell Traefik to use the port 12345 to connect to `my-container`
- traefik.http.services.my-service.loadbalancer.server.port=12345
转发http://example-a.com 到 http://<private IP of container>:8000,http://example-b.com转发至http://<private IP of container>:9000:
version: "3"
services:
my-container:
# ...
labels:
- traefik.http.routers.www-router.rule=Host(`example-a.com`)
- traefik.http.routers.www-router.service=www-service
- traefik.http.services.www-service.loadbalancer.server.port=8000
- traefik.http.routers.admin-router.rule=Host(`example-b.com`)
- traefik.http.routers.admin-router.service=admin-service
- traefik.http.services.admin-service.loadbalancer.server.port=9000
- traefik.http.services.<name-of-your-choice>配置服务
- traefik.http.middlewares.<name-of-your-choice>配置中间件
traefik.enable您可以通过设置traefik.enable为 true 或 false来告诉 Traefik 考虑(或不考虑)容器。此选项会覆盖 的值exposedByDefault。traefik.docker.network覆盖用于连接到容器的默认 docker 网络。如果一个容器链接到多个网络,请确保设置正确的网络名称(您可以使用docker inspect <container_id>进行检查),否则它将随机选择一个(取决于 docker 返回它们的方式)。traefik.docker.lbswarm启用 Swarm 的内置负载均衡器(仅在 Swarm 模式下相关)。如果启用此选项,Traefik 将使用 docker swarm 提供的虚拟 IP 而不是容器 IP。这意味着 Traefik 不会执行任何类型的负载平衡,并将此任务委托给 swarm。
六、中间件
附加到路由器的中间件是一种在请求发送到您的services 之前(或在服务的响应发送到客户端之前)调整请求的方法。
可用中间件列表:
- AddPrefix 添加前缀
# Prefixing with /foo
labels:
- "traefik.http.middlewares.add-foo.addprefix.prefix=/foo"
- BasicAuth 添加基本身份验证
# Declaring the user list
#
# Note: when used in docker-compose.yml all dollar signs in the hash need to be doubled for escaping.
# To create user:password pair, it's possible to use this command:
# echo $(htpasswd -nB user) | sed -e s/\\$/\\$\\$/g
#
# Also note that dollar signs should NOT be doubled when they not evaluated (e.g. Ansible docker_container module).
labels:
- "traefik.http.middlewares.test-auth.basicauth.users=test:$$apr1$$H6uskkkW$$IgXLP6ewTrSuBkTrqE8wj/,test2:$$apr1$$d9hr9HBB$$4HxwgUir3HP4EsggP/QNo0"
- Buffering 限制了可以转发到服务的请求的大小。通过缓冲,Traefik 将整个请求读入内存(可能将大请求缓冲到磁盘中),并拒绝超过指定大小限制的请求。这可以帮助服务避免大量数据(
multipart/form-data例如),并且可以最大限度地减少向服务发送数据所花费的时间。
# Sets the maximum request body to 2MB
labels:
- "traefik.http.middlewares.limit.buffering.maxRequestBodyBytes=2000000"
- Chain 中间件使您能够定义其他中间件的可重用组合。它使重用相同的组更容易。下面是含有链的一个例子
WhiteList,BasicAuth和RedirectScheme。
labels:
- "traefik.http.routers.router1.service=service1"
- "traefik.http.routers.router1.middlewares=secured"
- "traefik.http.routers.router1.rule=Host(`mydomain`)"
- "traefik.http.middlewares.secured.chain.middlewares=https-only,known-ips,auth-users"
- "traefik.http.middlewares.auth-users.basicauth.users=test:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/"
- "traefik.http.middlewares.https-only.redirectscheme.scheme=https"
- "traefik.http.middlewares.known-ips.ipwhitelist.sourceRange=192.168.1.7,127.0.0.1/32"
- "traefik.http.services.service1.loadbalancer.server.port=80"
- CircuitBreaker 断路器保护您的系统免于将请求堆叠到不健康的服务,从而导致级联故障。
# Latency Check
labels:
- "traefik.http.middlewares.latency-check.circuitbreaker.expression=LatencyAtQuantileMS(50.0) > 100"
-
Compress 中间件使用 gzip 压缩
-
ContentType指定是否让
Content-Type标头(如果后端尚未定义)自动设置为从响应内容派生的值。 -
DigestAuth 中间件将您的服务的访问权限限制为已知用户
-
ErrorPage 中间件根据 HTTP 状态代码的配置范围返回一个自定义页面来代替默认页面。
-
ForwardAuth 中间件将身份验证委托给外部服务。如果服务以 2XX 代码应答,则授予访问权限,并执行原始请求。否则,返回来自认证服务器的响应。
-
Headers 中间件管理请求和响应的标头。
-
IPWhitelist 根据客户端 IP 接受/拒绝请求。
-
inflightreq 限制同时进行中的请求数
-
PassTLSClientCert 将通过的客户端 TLS 证书中的选定数据添加到标头中。
-
RateLimit控制进入服务的请求数
-
RedirectRegex 使用正则表达式匹配和替换来重定向请求。
-
RedirectScheme 将请求从一个方案/端口重定向到另一个。
-
replacepath替换请求 URL 的路径。
-
ReplaceRegex 使用正则表达式匹配和替换来替换 URL 的路径。
-
retry 如果后端服务器没有回复,重试中间件向后端服务器重新发出给定次数的请求。服务器一响应,中间件就会停止重试,无论响应状态如何。Retry 中间件有一个可选配置来启用指数退避。
-
stripprefix 在转发请求之前从路径中删除前缀
-
stripprefixregex 在转发请求之前从路径中删除前缀(使用正则表达式)
七、Dashboard
仪表板可以可视化地展示traefik的所有服务运行情况。
有两种方法可以配置和访问仪表板:
1、安全模式
首先在静态配置上使用以下选项启用仪表板:
api:
dashboard: true
然后在 Traefik 本身上定义路由配置,api@internal在动态配置中将路由器连接到服务,以允许定义通 身份验证(basicAuth、digestAuth、 forwardAuth)或白名单等中间件实现的一项或多项安全功能。
labels:
- "traefik.http.routers.api.service=api@internal"
然后设置规则:
labels:
- "traefik.http.routers.api.rule=Host(`traefik.example.com`)"
此时可以通过 traefik.example.com/dashboard/ 来访问dashboard
2、不安全模式
不推荐使用此模式,因为它不允许使用安全功能。
api:
dashboard: true
insecure: true
您现在可以通过8080以下 URL访问Traefik 实例端口上的仪表板:(http://<Traefik IP>:8080/dashboard/尾斜杠是必需的)。
八、日志
默认情况下,日志以文本格式写入标准输出。
filePath您可以使用filePath选项配置文件路径
# 日志写入文件
log:
filePath: "/path/to/traefik.log"
format默认情况下,日志使用文本格式 (common),但您也可以使用json格式写入
# 已json形式写入文件
log:
filePath: "/path/to/log-file.log"
format: json
level默认情况下,level设置为ERROR。替代日志记录级别为DEBUG,PANIC,FATAL,ERROR,WARN,和INFO。
log:
level: DEBUG
九、https配置
您可以将 Traefik 配置ACME 程序(如 Let's Encrypt)来自动生成证书。
Traefik 要求您在静态配置定义“证书解析器”,它们负责从 ACME 服务器检索证书。从路由器的动态配置检索域名需要的证书。
首先配置traefik的配置文件:
entryPoints:
web:
address: ":80"
websecure:
address: ":443"
certificatesResolvers:
myresolver:
acme:
email: your-email@example.com
storage: acme.json
httpChallenge:
# used during the challenge
entryPoint: web
它有如下配置选项:
-
tlsChallengeTLS-ALPN-01通过提供 TLS 证书,生成和更新 ACME 证书。 -
httpChallenge通过在HTTP-01众所周知的 URI 下供应 HTTP 资源,生成和更新 ACME 证书。 -
dnsChallengeDNS-01通过提供 DNS 记录,生成和更新 ACME 证书。 -
resolvers使用自定义 DNS 服务器来解析 FQDN 权限 -
caServer要使用的 CA 服务器。_必需,默认=acme-v02.api.letsencrypt.org/directory -
storage设置您的 ACME 证书的保存位置,必需,默认=“acme.json” -
preferredChain要使用的首选链,_可选,默认=“”。_如果 CA 提供多个证书链,则首选具有与此主题通用名称匹配的颁发者的链。如果不匹配,将使用默认提供的链。 -
keyType用于生成证书私钥。允许值“EC256”、“EC384”、“RSA2048”、“RSA4096”、“RSA8192”。可选,默认=“RSA4096”
然后在docker中设置:
## 动态配置
labels:
- traefik.http.routers.blog.rule=Host(`example.com`) && Path(`/blog`)
- traefik.http.routers.blog.tls=true
- traefik.http.routers.blog.tls.certresolver=myresolver
Traefik 会自动跟踪它生成的 ACME 证书的到期日期。如果距离证书到期的时间不足 30 天,Traefik 将尝试自动续订。