非 http 协议多租户服务 proxy, SNI Proxy 靠谱么?好像用的人不多

171 天前
 annoygaga

楼主有一个对外的多租户服务,用同一个域名的不同子域名对外提供多租户服务,我们假设这个服务是 redis (虽然不是 redis ,但是问题类似)

楼主希望不同的子域名会转发到后端不同的 Pod (在 kubernetes 上)进行服务,目前看只有 SNI Proxy 这一个办法

从原理上看 SNI Proxy 只需要类似 letencrypt 签发证书,其他的就是 TLS 握手的 SayHello 过程拿到域名进行转发,原理非常合理,但我搜了一下貌似没什么人使用这个东西,想问问这个东西靠谱么?谁在生产环境下使用了吗?

3573 次点击
所在节点    程序员
50 条回复
dzdh
170 天前
@annoygaga #39 所以还是自定义 ca 是最靠谱的
annoygaga
170 天前
@RobinFai 对外服务,所以是 tls over tcp
目前看只有 tls 会携带相关的域名信息
annoygaga
170 天前
@dzdh 主要是之前经验,有些客户端会对没信任的 ca 直接报错,这就很尴尬
dzdh
170 天前
@annoygaga #42

mysql 、redis 之类的服务。本身就是自定义 ca 不会验证 ca 可信的,甚至需要自己指定 ca 证书。
https://redis.io/docs/latest/operate/oss_and_stack/management/security/encryption/
realpg
170 天前
@RobinFai #40
你终于说到第一个应该问的问题的一半点子上了...
这是这么多楼第 0.5 个有价值的问题...

OP 第一时间不去查看他的 client library 的源代码如何实现的连接
甚至不愿意花 10 分钟用 nginx 先模拟测试一下他的客户端库到底是大致是怎么实现的
wangmn
170 天前
我之前这么干的 *.a.com 直接解析到一固定前端 nginx 服务,后端通过不同的域来区分租户。*.a.com 就一个通配符证书。
annoygaga
170 天前
@dzdh 我之前的经历是一些客户端是社区贡献的,估计是类似这种版本的坑了
annoygaga
170 天前
@wangmn 是的,是这个方案,之后有遇到什么坑嘛?
wangmn
170 天前
@annoygaga 不用 ng 动态加租户,直接解析通配符到前端页面。后来没遇到坑
xjzshttps
169 天前
单纯讲 SNI proxy 是没什么大问题。
理论上没什么问题,现实中我记得有不少 SNI Proxy 的反向代理,甚至以前杂牌宽带劫持 dns 解析到自己的 http 缓存服务器,为了处理 https 没私钥就是直接用的 SNI proxy 实现,那种流量下都没什么问题应该没事。

但是问题是,你的服务到底是什么?
如果他是 http/https 协议的,你的想法就是最常见的 http 前端负载均衡。
但是如果不是 http/https 协议,那么你要修改客户端或者还要在客户端前面再加个程序等方式 去实现 tls 握手及加密。
那么既然要修改客户端,直接改下客户端协议,前面再加个握手包提供域名可能更简单。
除非你原始的协议并未实现加密,你还需要 tls 加密的支持。

实际直接写代码测试就完事,
tls 客户端 + SNI proxy 不考虑线上环境各种异常、超时、配置文件等,也就 10 多分钟到半小时就搞定。
再写下测试代码,跑几天看看就完事。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1146733

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX