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 选项集。 |