跳到正文
Træfɪk

TLSOption

TLS 选项允许配置 Traefik 中 TLS 连接的部分参数。

创建 TLSOption 对象,或在 IngressRoute / IngressRouteTCP 对象中引用 TLS 选项之前,需要将 Traefik Kubernetes CRD 应用到 Kubernetes 集群。

引用与命名空间

未设置可选的 namespace 属性时,配置将使用 IngressRoute/IngressRouteTCP 所在的命名空间。

此外,TLS 选项定义来自其他提供者时,应使用跨提供者语法(middlewarename@provider)引用。此时指定 namespace 属性没有意义,该值会被忽略。

Kubernetes 中的 TLSOption

在 Kubernetes 中使用 TLSOption 资源时,可以设置一组默认选项, 在没有显式覆盖的情况下应用到所有 Ingress。
为此,需要创建名为 default 的 TLSOption 资源。 在所有命名空间中,只允许存在一个名为 default 的 TLSOption,否则这些资源都会被丢弃。
使用 Kubernetes Ingress 资源时,如果希望显式使用其他 TLSOption, 需要按以下格式为 Ingress 添加注解: traefik.ingress.kubernetes.io/router.tls.options: <resource-namespace>-<resource-name>@kubernetescrd

该 default TLSOption 为所有没有显式引用 TLSOption 的路由器 提供 TLS 强制策略,包括客户端认证、TLS 版本、密码套件和严格 SNI。 提供者选项 defaultTLSResourcesNamespace 限制了可以定义这一集群级默认配置的命名空间。

启用 safeNaming 后, 注解值改为 <resource-namespace>_<resource-name>@kubernetescrd, 使用与提供者生成的其他名称相同的 _ 分隔符。

配置示例

apiVersion: traefik.io/v1alpha1
kind: TLSOption
metadata:
  name: mytlsoption
  namespace: default

spec:
  minVersion: VersionTLS12
  sniStrict: true
  cipherSuites:
    - TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
    - TLS_RSA_WITH_AES_256_GCM_SHA384
  clientAuth:
    secretNames:
      - secret-ca1
      - secret-ca2
    clientAuthType: VerifyClientCertIfGiven

配置选项

字段 说明 默认值 必填
minVersion 允许的最低 TLS 版本。 "VersionTLS12" 否
maxVersion 允许的最高 TLS 版本。
不建议通过该选项禁用 TLS 1.3。
否
cipherSuites TLS 1.2 及更早版本支持的密码套件列表。
为 TLS 1.2 及更早版本定义的密码套件不能用于 TLS 1.3,反之亦然。
TLS 1.3 的密码套件不可配置,因为其支持的所有密码套件均为安全套件。
否
curvePreferences ECDHE 握手使用的椭圆曲线引用列表。
使用 crypto 或 RFC 中的曲线名称。
更多信息请参阅 CurveID。
否
clientAuth.secretNames 客户端认证(mTLS)选项。
所引用的 Kubernetes Secret 名称列表,必须位于 TLSOption 命名空间。
Secret 必须在 tls.ca 或 ca.crt 键中包含证书。
否
clientAuth.clientAuthType 客户端认证(mTLS)选项。
要应用的客户端认证类型。有效值见客户端认证。
否
sniStrict 允许拒绝没有指定 server_name 扩展的客户端连接。
启用后,永远不会提供默认证书。
false 否
alpnProtocols TLS 握手支持的应用层协议列表,按优先顺序排列。
客户端支持 ALPN 时,会从列表中选择协议;如果双方没有共同支持的协议,连接会失败。
"h2, http/1.1, acme-tls/1" 否
disableSessionTickets 允许禁用会话票据,强制每个客户端执行完整的 TLS 握手,而不是恢复会话。 false 否

客户端认证(mTLS)

clientAuth.clientAuthType 选项控制以下行为:

  • NoClientCert:忽略所有客户端证书。
  • RequestClientCert:请求客户端提供证书,但即使没有证书也继续处理。
  • RequireAnyClientCert:要求提供证书,但不验证其是否由 clientAuth.caFiles 或 clientAuth.secretNames 中列出的 CA 签发。
  • VerifyClientCertIfGiven:如果提供证书,验证其是否由 clientAuth.caFiles 或 clientAuth.secretNames 中列出的 CA 签发;未提供证书时仍继续处理。
  • RequireAndVerifyClientCert:要求提供证书,且必须由 clientAuth.caFiles 或 clientAuth.secretNames 中列出的 CA 签发。

CA Secret

CA Secret 必须在 tls.ca 或 ca.crt 键中包含以 base64 编码的证书。

默认 TLS 选项

IngressRoute/IngressRouteTCP 未指定 TLS 选项时,使用 default 选项。 默认行为汇总如下表:

配置 行为
没有 default TLS 选项 默认使用内部默认 TLS 选项集。
一个 default TLS 选项 默认应用自定义 TLS 选项。
多个 default TLS 选项 记录错误日志,并默认使用内部默认 TLS 选项集。

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

文档由 HeadFile Studio 翻译。

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