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。为此,你需要创建一个名为
default的TLSOption资源。在所有命名空间中只能存在一个名为default的TLSOption—— 否则它们将被丢弃。要显式使用不同的
TLSOption(并使用 Kubernetes Ingress 资源),你需要在 Ingress 上添加以下形式的注解:traefik.ingress.kubernetes.io/router.tls.options: <resource-namespace>-<resource-name>@kubernetescrd
配置示例
TLSOption
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.3,无法配置密码套件(所有支持的密码套件在这种情况下都是安全的)。 | 否 | |
curvePreferences | 在 ECDHE 握手中使用的椭圆曲线引用列表。使用 crypto/tls CurveID 或 RFC 8446 第 4.2.7 节 中的曲线名称。 | 否 | |
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" | 否 |
disableSessiontTickets | 允许禁用 session ticket 的使用,强制每个客户端执行完整的 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 必须包含一个 base64 编码的证书,存放在
tls.ca或ca.crt键下。
默认 TLS Option
当在 IngressRoute/IngressRouteTCP 中未指定 TLS 选项时,使用 default 选项。默认行为汇总在下表中:
| 配置 | 行为 |
|---|---|
| 无默认 TLS Option | 默认的内部 TLS 选项集。 |
| 一个默认 TLS Option | 默认应用自定义 TLS 选项。 |
| 多个默认 TLS Option | 错误日志 + 默认应用内部 TLS 选项集。 |
在生产环境使用 Traefik OSS?
如果你在工作中使用 Traefik,可以考虑为其添加企业级 API 网关能力或获取 Traefik OSS 的商业支持。