跳到正文
Træfɪk

Traefik 与 Consul Catalog

配置示例

可以按照下面的方式启用 Consul Catalog 提供者:

providers:
  consulCatalog: {}
[providers.consulCatalog]
--providers.consulcatalog=true

为服务附加标签:

- traefik.http.routers.my-router.rule=Host(`example.com`)

配置选项

字段 说明 默认值 必填
providers.providersThrottleDuration 配置重新加载后,在处理新的配置刷新事件之前至少等待的时间。
如果这段时间内发生多个事件,只处理最近的一个,其他事件全部丢弃。
此选项不能按提供者分别设置,但节流算法会独立应用于每个提供者。
2s 否
providers.consulCatalog.refreshInterval 定义轮询间隔。 15s 否
providers.consulCatalog.prefix 定义用于声明 Traefik 标签的 Consul Catalog 标签前缀。 traefik 否
providers.consulCatalog.requireConsistent 强制读取保持完全一致。更多信息请参阅此处。 false 否
providers.consulCatalog.exposedByDefault 默认通过 Traefik 暴露 Consul Catalog 服务。如果设置为 false,最终路由配置会忽略没有 traefik.enable=true 标签的服务。
更多信息请参阅此处。
true 否
providers.consulCatalog.defaultRule 所有服务的默认 Host 规则。更多信息请参阅此处。 "Host(`{{ normalize .Name }}`)" 否
providers.consulCatalog.connectAware 启用 Consul Connect 支持。如果设置为 true,Traefik 将能够与 Connect 服务通信。 false 否
providers.consulCatalog.connectByDefault 默认认为每个服务都支持 Connect。如果设置为 true,Traefik 默认会将每个 Consul Catalog 服务视为支持 Connect 的服务。可以通过 traefik.consulcatalog.connect 标签为单个实例覆盖此选项。 false 否
providers.consulCatalog.serviceName 定义 Traefik 服务在 Consul Catalog 中的名称。 "traefik" 否
providers.consulCatalog.constraints 定义一个表达式,Traefik 将用它匹配容器标签,以确定是否为该容器创建路由。更多信息请参阅此处。 "" 否
providers.consulCatalog.namespaces 定义要查询的命名空间。更多信息请参阅此处。 "" 否
providers.consulCatalog.stale 指示 Traefik 对目录的读取使用弱一致性。 false 否
providers.consulCatalog.cache 指示 Traefik 对目录的读取使用本地代理缓存。 false 否
providers.consulCatalog.endpoint 定义 Consul 服务器端点。 - 否
providers.consulCatalog.endpoint.address 定义 Consul 服务器的地址。 127.0.0.1:8500 否
providers.consulCatalog.endpoint.scheme 定义 Consul 服务器的 URI 协议方案。 "" 否
providers.consulCatalog.endpoint.datacenter 定义要使用的数据中心。如果未在 Traefik 中提供,Consul 将使用代理的默认数据中心。 "" 否
providers.consulCatalog.endpoint.token 定义每个请求使用的 ACL 令牌,它会覆盖代理的默认令牌。 "" 否
providers.consulCatalog.endpoint.endpointWaitTime 定义 watch 可以阻塞的持续时间。如果未提供,将使用代理的默认值。 "" 否
providers.consulCatalog.endpoint.httpAuth 定义 HTTP 客户端使用 HTTP 基本认证时的认证设置。 N/A 否
providers.consulCatalog.endpoint.httpAuth.username 定义 HTTP 基本认证使用的用户名。 "" 否
providers.consulCatalog.endpoint.httpAuth.password 定义 HTTP 基本认证使用的密码。 "" 否
providers.consulCatalog.strictChecks 定义允许接收流量的 Consul 服务健康检查状态。 ["passing", "warning"] 否
providers.consulCatalog.endpoint.tls.ca 定义与 Consul Catalog 安全连接时使用的证书颁发机构证书路径,默认使用系统证书包。 "" 否
providers.consulCatalog.endpoint.tls.cert 定义与 Consul Catalog 安全连接时使用的公钥证书路径。使用此选项时,必须设置 key 选项。 "" 是
providers.consulCatalog.endpoint.tls.key 定义与 Consul Catalog 安全连接时使用的私钥路径。使用此选项时,必须设置 cert 选项。 "" 是
providers.consulCatalog.endpoint.tls.insecureSkipVerify 指示提供者在建立 TLS 连接时接受 Consul Catalog 提供的任何证书,而不考虑证书所涵盖的主机名。 false 否
providers.consulCatalog.watch 设置为 true 时,监视 Consul 的变化(Consul 监视检查)。 false 否

requireConsistent

强制读取保持完全一致。设置此选项需要额外的往返通信,开销可能较高,但可以确保不会读取过期数据。

更多信息请参阅 Consul 的一致性文档。

defaultRule

所有服务的默认主机规则。

对于某个服务,如果没有通过标签定义路由规则,就使用此 defaultRule 定义规则。 defaultRule 必须设置为有效的 Go 模板, 并且可以包含 sprig 模板函数。 可以通过 Name 标识符访问服务名称, 模板还可以访问此服务上定义的所有标签(即以 prefix 开头的标签)。

可以使用 traefik.http.routers.{name-of-your-choice}.rule 标签为单个实例覆盖此选项。

providers:
  consulCatalog:
    defaultRule: "Host(`{{ .Name }}.{{ index .Labels \"customLabel\"}}`)"
    # ...
[providers.consulCatalog]
  defaultRule = "Host(`{{ .Name }}.{{ index .Labels \"customLabel\"}}`)"
  # ...
--providers.consulcatalog.defaultRule="Host(`{{ .Name }}.{{ index .Labels \"customLabel\"}}`)"
默认规则与 Traefik 服务

暴露 Traefik 容器时,如果同时使用默认规则机制, 可能会创建一个指向自身的路由器,形成循环。 在这种情况下,为防止无限循环, Traefik 会添加一个内部中间件,拒绝来自同一路由器的请求。

constraints

constraints 选项可以设置为一个表达式,Traefik 将用它匹配服务标签, 以确定是否为该服务创建路由。如果没有任何服务标签匹配该表达式, 就不会为该服务创建路由。如果表达式为空,则包含所有发现的服务。

表达式语法基于 Tag(`tag`) 和 TagRegex(`tag`) 函数, 并支持常规布尔逻辑,如下例所示。

约束键的限制

请注意,traefik.* 是保留给配置使用的标签命名空间,不能用作自定义约束的键。

约束表达式示例
# Includes only services having the tag `a.tag.name=foo`
constraints = "Tag(`a.tag.name=foo`)"
# Excludes services having any tag `a.tag.name=foo`
constraints = "!Tag(`a.tag.name=foo`)"
# With logical AND.
constraints = "Tag(`a.tag.name`) && Tag(`another.tag.name`)"
# With logical OR.
constraints = "Tag(`a.tag.name`) || Tag(`another.tag.name`)"
# With logical AND and OR, with precedence set by parentheses.
constraints = "Tag(`a.tag.name`) && (Tag(`another.tag.name`) || Tag(`yet.another.tag.name`))"
# Includes only services having a tag matching the `a\.tag\.t.+` regular expression.
constraints = "TagRegex(`a\.tag\.t.+`)"
providers:
  consulCatalog:
    constraints: "Tag(`a.tag.name`)"
    # ...
[providers.consulCatalog]
  constraints = "Tag(`a.tag.name`)"
  # ...
--providers.consulcatalog.constraints="Tag(`a.tag.name`)"
# ...

更多信息请参阅限制服务发现的范围。

namespaces

namespaces 选项定义在哪些命名空间中发现 Consul Catalog 服务。 使用 namespaces 选项时,发现的配置对象名称会添加如下后缀:

<resource-name>@consulcatalog-<namespace>

警告

  • namespaces 选项仅适用于 Consul Enterprise, 后者提供 Namespaces 功能。

  • namespaces 选项与 namespace 选项只能选择其中一个进行定义。

providers:
  consulCatalog:
    namespaces: 
      - "ns1"
      - "ns2"
    # ...
[providers.consulCatalog]
  namespaces = ["ns1", "ns2"]
  # ...
--providers.consulcatalog.namespaces=ns1,ns2
# ...

路由配置

请参阅路由中的专门章节。


版权所有 © 头文件软件工作室

文档由 HeadFile Studio 翻译。

Traefik v3.7 中文快照 · 原文版权归 Traefik Labs 及贡献者所有 · MIT 许可证