kubernetes - 在 traefik TCP 路由映射中使用 hostSNI(*) 有什么缺点
问题描述
现在我使用HostSNI(
*)
来映射 TCP 服务,就像mysql\postgresql...
Kubernetes 集群 v1.18 中的 traefik 2.2.1 一样。因为我在我的本地机器上并且没有有效的认证。这是配置:
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):
如果 HTTP 路由器和 TCP 路由器都侦听相同的入口点,则 TCP 路由器将在 HTTP 路由器之前应用
需要注意的是,服务器名称指示是 TLS 协议的扩展。因此,只有 TLS 路由器才能使用该规则指定域名。但是,非 TLS 路由器必须明确使用带有 *(每个域)的规则来声明每个非 TLS 请求都将由路由器处理。
因此,回答您的问题:
- using
HostSNI(`*`)
是使用ingressRouteTCP
不带tls 的唯一合理方法——因为您明确要求 TCP 路由器,而 TCP 不使用 TLS。- 我在一个部分上取得了好坏参半的成功
ingressRouteTCP
,但它似乎是第2节所支持的配置HostSNI(`some.fqdn.here`)
tls:
- 我在一个部分上取得了好坏参半的成功
- 对此的一个可能的“缺点”(空中报价,因为它是主观的)是:此配置意味着路由到您
entrypoint
(即mysql
)的任何流量都将通过此路由ingressRouteTCP
- 考虑:如果由于某种原因您有另一个
ingressRoute
相同entrypoint
的 ,ingressRouteTCP
则将按照1优先 - 考虑:例如,如果您想
mysql
通过相同的路由多个不同的服务entrypoint: mysql
,您将无法基于此配置
- 考虑:如果由于某种原因您有另一个
推荐阅读
- android - 如何在 gradle 中为 Android Asset Pack(不是 Android apk 模块)设置自定义资产位置?
- c++ - 通过模板参数传递数据,C++
- spring-boot - 用过mybatisPlus。bean 实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException
- c++ - C++ 发布序列详细信息
- flutter - 如何去除颤动的gridView间距
- mysql - 如何将虚拟列作为常量添加到查询中
- javascript - 类型错误:this.$el.bracket 不是函数
- c++ - 在 OpenCV 中定义初始化的 3D 矩阵 Mat_ 的一个衬垫
- javascript - 如何以编程方式知道 Mongo Realm 中的错误登录?
- git - gitignore 不适用于我的后端文件夹中的 process.env