TLS Certificates
提示
路由器需要处理 HTTPS 流量时,应在路由器定义中通过 tls 字段指定。
证书定义¶
自动生成¶
参阅 Let's Encrypt 页面。
用户定义¶
要添加或删除 TLS 证书,即使 Traefik 已在运行,也可以将证书定义添加到动态配置的 [[tls.certificates]] 段中:
tls:
certificates:
- certFile: /path/to/domain.cert
keyFile: /path/to/domain.key
- certFile: /path/to/other-domain.cert
keyFile: /path/to/other-domain.key[[tls.certificates]]
certFile = "/path/to/domain.cert"
keyFile = "/path/to/domain.key"
[[tls.certificates]]
certFile = "/path/to/other-domain.cert"
keyFile = "/path/to/other-domain.key"限制
上例使用文件提供者处理这些定义。 这是配置证书(以及选项和存储)的唯一可用方法。 但是,在 Kubernetes 中,证书可以且必须通过 Secret 提供。
证书选择(SNI)¶
Traefik 根据客户端发送的服务器名称指示(SNI),选择在 TLS 握手中出示的证书。
但是,HTTP 路由器规则(如 Host())在 TLS 建立后才进行判断,因此不会影响证书选择。
严格 SNI 检查¶
默认情况下,如果客户端未发送 SNI,或没有证书匹配所请求的服务器名称, Traefik 会回退到 TLS 存储中的默认证书(如果配置了)。
要拒绝没有 SNI(或服务器名称未知)的连接,而不回退到默认证书,
请在 TLS 选项中启用 sniStrict。
证书存储¶
在 Traefik 中,证书通过证书存储分组管理。
限制
除默认存储(名为 default)以外的所有存储定义都会被忽略,
因此全局只有一个可用的 TLS 存储。
Kubernetes 中的 TLSStore
使用 TLSStore 资源时,名为 default 的存储适用于所有入口点,
无论它定义在哪个命名空间中。
提供者选项 defaultTLSResourcesNamespace
限制了可定义此集群范围存储的命名空间。
随后可以在 tls.certificates 段中指定存储列表,表明证书应存放在哪里:
tls:
certificates:
- certFile: /path/to/domain.cert
keyFile: /path/to/domain.key
stores:
- default
# Note that since no store is defined,
# the certificate below will be stored in the `default` store.
- certFile: /path/to/other-domain.cert
keyFile: /path/to/other-domain.key[[tls.certificates]]
certFile = "/path/to/domain.cert"
keyFile = "/path/to/domain.key"
stores = ["default"]
[[tls.certificates]]
# Note that since no store is defined,
# the certificate below will be stored in the `default` store.
certFile = "/path/to/other-domain.cert"
keyFile = "/path/to/other-domain.key"限制
实际上,stores 列表会被忽略,并自动设置为 ["default"]。
默认证书¶
对于没有 SNI 或没有匹配域名的连接,Traefik 可以使用默认证书。 此默认证书应在 TLS 存储中定义:
tls:
stores:
default:
defaultCertificate:
certFile: path/to/cert.crt
keyFile: path/to/cert.key[tls.stores]
[tls.stores.default]
[tls.stores.default.defaultCertificate]
certFile = "path/to/cert.crt"
keyFile = "path/to/cert.key"如果没有提供 defaultCertificate,Traefik 将使用生成的证书。
ACME 默认证书¶
可以将 Traefik 配置为使用 ACME 提供者(如 Let's Encrypt)生成默认证书。 解析默认证书的配置应在 TLS 存储中定义:
与 defaultGeneratedCert 选项的优先关系
defaultGeneratedCert 定义优先于 ACME 默认证书配置。
tls:
stores:
default:
defaultGeneratedCert:
resolver: myresolver
domain:
main: example.org
sans:
- foo.example.org
- bar.example.org[tls.stores]
[tls.stores.default.defaultGeneratedCert]
resolver = "myresolver"
[tls.stores.default.defaultGeneratedCert.domain]
main = "example.org"
sans = ["foo.example.org", "bar.example.org"]labels:
- "traefik.tls.stores.default.defaultgeneratedcert.resolver=myresolver"
- "traefik.tls.stores.default.defaultgeneratedcert.domain.main=example.org"
- "traefik.tls.stores.default.defaultgeneratedcert.domain.sans=foo.example.org, bar.example.org"{
"Name": "default",
"Tags": [
"traefik.tls.stores.default.defaultgeneratedcert.resolver=myresolver",
"traefik.tls.stores.default.defaultgeneratedcert.domain.main=example.org",
"traefik.tls.stores.default.defaultgeneratedcert.domain.sans=foo.example.org, bar.example.org"
]
}在生产环境使用 Traefik OSS?
如果你在工作中使用 Traefik,可以考虑为 Traefik OSS 增加企业级 API 网关能力或商业支持。
为 Traefik OSS 增加 API 网关能力快捷且平滑,无需推倒重来,现有配置也会完整保留。请通过这个简短视频了解实际效果。