Skip to content

TLSOption

TLS 选项允许你在 Traefik 中配置 TLS 连接的一些参数。

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

引用和命名空间

如果未设置可选的 namespace 属性,则配置将与 IngressRoute/IngressRouteTCP 的命名空间一起应用。

此外,当 TLS 选项的定义来自另一个 provider 时,应使用跨 provider 语法middlewarename@provider)来引用 TLS 选项。在这种情况下指定 namespace 属性没有意义,会被忽略。

Kubernetes 中的 TLSOption

在 Kubernetes 中使用 TLSOption 资源时,你可能希望设置一组默认选项,如果未明确覆盖,则应用于所有 ingress。

为此,你需要创建一个名为 defaultTLSOption 资源。在所有命名空间中只能存在一个名为 defaultTLSOption —— 否则它们将被丢弃。

要显式使用不同的 TLSOption(并使用 Kubernetes Ingress 资源),你需要在 Ingress 上添加以下形式的注解: traefik.ingress.kubernetes.io/router.tls.options: <resource-namespace>-<resource-name>@kubernetescrd

配置示例

TLSOption

yaml
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。
cipherSuitesTLS 1.2 及以下版本支持的密码套件列表。对于 TLS 1.3,无法配置密码套件(所有支持的密码套件在这种情况下都是安全的)。
curvePreferences在 ECDHE 握手中使用的椭圆曲线引用列表。使用 crypto/tls CurveIDRFC 8446 第 4.2.7 节 中的曲线名称。
clientAuth.secretNames客户端身份验证(mTLS)选项。被引用的 Kubernetes Secret 名称列表(在 TLSOption 命名空间中)。Secret 必须包含一个 tls.caca.crt 键下的证书。
clientAuth.clientAuthType客户端身份验证(mTLS)选项。要应用的客户端身份验证类型。可用值见下文。
sniStrict允许拒绝来自未指定 server_name 扩展的客户端的连接。如果启用此选项,永远不会提供默认证书。false
alpnProtocolsTLS 握手支持的应用层协议列表,按优先级排序。如果客户端支持 ALPN,所选协议将是此列表中的一个,如果没有共同支持的协议,则连接将失败。"h2, http/1.1, acme-tls/1"
disableSessiontTickets允许禁用 session ticket 的使用,强制每个客户端执行完整的 TLS 握手而不是恢复会话。false

客户端身份验证(mTLS)

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

  • NoClientCert:忽略任何客户端证书。
  • RequestClientCert:请求证书但如果没有提供也继续。
  • RequireAnyClientCert:要求证书但不验证是否由 clientAuth.caFilesclientAuth.secretNames 中列出的 CA 签名。
  • VerifyClientCertIfGiven:如果提供了证书,验证是否由 clientAuth.caFilesclientAuth.secretNames 中列出的 CA 签名。否则不使用任何证书继续。
  • RequireAndVerifyClientCert:要求证书,并且必须由 clientAuth.caFilesclientAuth.secretNames 中列出的 CA 签名。

CA Secret

CA Secret 必须包含一个 base64 编码的证书,存放在 tls.caca.crt 键下。

默认 TLS Option

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

配置行为
无默认 TLS Option默认的内部 TLS 选项集。
一个默认 TLS Option默认应用自定义 TLS 选项。
多个默认 TLS Option错误日志 + 默认应用内部 TLS 选项集。

在生产环境使用 Traefik OSS?

如果你在工作中使用 Traefik,可以考虑为其添加企业级 API 网关能力或获取 Traefik OSS 的商业支持。

基于 MIT 协议发布