在 traefik TCP 路由映射中使用 hostSNI(*) 有什么缺点
what is the disadvantage using hostSNI(*) in traefik TCP route mapping
现在我正在使用 HostSNI(
*)
映射 TCP 服务,例如 Kubernetes 集群 v1.18 中 traefik 2.2.1 中的 mysql\postgresql...
。因为我在我的本地机器上并且没有有效的证书。这是配置:
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRouteTCP
metadata:
name: mysql-ingress-tcp-route
namespace: middleware
spec:
entryPoints:
- mysql
routes:
- match: HostSNI(`*`)
services:
- name: report-mysqlha
port: 3306
配置在我的本地机器上运行良好。但我还是想知道使用的副作用
HostSNI(
)
映射策略。使用 HostSNI(
)
而不是域名有什么缺点?是否可以在我的本地机器上使用假域名?
截至最新的 Traefik 文档 (2.4 at this time):
If both HTTP routers and TCP routers listen to the same entry points, the TCP routers will apply before the HTTP routers
It is important to note that the Server Name Indication is an extension of the TLS protocol. Hence, only TLS routers will be able to specify a domain name with that rule. However, non-TLS routers will have to explicitly use that rule with * (every domain) to state that every non-TLS request will be handled by the router.
因此,回答您的问题:
- 使用
HostSNI(`*`)
是在没有 tls 的情况下使用 ingressRouteTCP
的唯一合理方式——因为您明确要求 TCP 路由器和 TCP不讲 TLS。
- 我在
ingressRouteTCP
和 HostSNI(`some.fqdn.here`)
的 tls:
部分取得了不同程度的成功,但根据 2[= 它似乎是受支持的配置42=]
- 一个可能的“缺点”(空引号,因为它是主观的)是:此配置意味着路由到您的
entrypoint
(即 mysql
)的任何流量都将通过此 ingressRouteTCP
- 考虑:如果出于某种原因您有另一个
ingressRoute
具有相同的 entrypoint
,ingressRouteTCP
将优先于 1
- 考虑:例如,如果您想通过相同的
entrypoint: mysql
路由多个不同的 mysql
服务,您将无法基于此配置
对于需要使用 TLS 直通和 SNI 路由的 TCP 示例的用户
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRouteTCP
metadata:
name: test-https
namespace: mynamespace
spec:
entryPoints:
- websecure
routes:
- kind: Rule
match: HostSNI(`my.domain.com`)
services:
- name: myservice
port: 443
tls:
passthrough: true
现在我正在使用 HostSNI(
*)
映射 TCP 服务,例如 Kubernetes 集群 v1.18 中 traefik 2.2.1 中的 mysql\postgresql...
。因为我在我的本地机器上并且没有有效的证书。这是配置:
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRouteTCP
metadata:
name: mysql-ingress-tcp-route
namespace: middleware
spec:
entryPoints:
- mysql
routes:
- match: HostSNI(`*`)
services:
- name: report-mysqlha
port: 3306
配置在我的本地机器上运行良好。但我还是想知道使用的副作用
HostSNI(
)
映射策略。使用 HostSNI(
)
而不是域名有什么缺点?是否可以在我的本地机器上使用假域名?
截至最新的 Traefik 文档 (2.4 at this time):
If both HTTP routers and TCP routers listen to the same entry points, the TCP routers will apply before the HTTP routers
It is important to note that the Server Name Indication is an extension of the TLS protocol. Hence, only TLS routers will be able to specify a domain name with that rule. However, non-TLS routers will have to explicitly use that rule with * (every domain) to state that every non-TLS request will be handled by the router.
因此,回答您的问题:
- 使用
HostSNI(`*`)
是在没有 tls 的情况下使用ingressRouteTCP
的唯一合理方式——因为您明确要求 TCP 路由器和 TCP不讲 TLS。- 我在
ingressRouteTCP
和HostSNI(`some.fqdn.here`)
的tls:
部分取得了不同程度的成功,但根据 2[= 它似乎是受支持的配置42=]
- 我在
- 一个可能的“缺点”(空引号,因为它是主观的)是:此配置意味着路由到您的
entrypoint
(即mysql
)的任何流量都将通过此ingressRouteTCP
- 考虑:如果出于某种原因您有另一个
ingressRoute
具有相同的entrypoint
,ingressRouteTCP
将优先于 1 - 考虑:例如,如果您想通过相同的
entrypoint: mysql
路由多个不同的mysql
服务,您将无法基于此配置
- 考虑:如果出于某种原因您有另一个
对于需要使用 TLS 直通和 SNI 路由的 TCP 示例的用户
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRouteTCP
metadata:
name: test-https
namespace: mynamespace
spec:
entryPoints:
- websecure
routes:
- kind: Rule
match: HostSNI(`my.domain.com`)
services:
- name: myservice
port: 443
tls:
passthrough: true