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

102 天前
 annoygaga

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

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

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

3221 次点击
所在节点    程序员
50 条回复
nealnote
102 天前
根据不同的子域转发到不同的 pod 和 转到相同的 pod 解析子域区分不同的 businessId 或者商户有什么优势或者更强的需求么?
annoygaga
102 天前
@nealnote 类似 redis ,服务里面拿不到域名,本身是 tcp 连过来的
just1
102 天前
sni proxy 就不需要签发证书了,是 backing endpoint 来提供
oott123
102 天前
用 nginx 或者 traefik 里的类似功能就好了,sniproxy 确实没什么人生产用
yinmin
102 天前
后端服务是 tls 协议,的确可以直接使用 sni proxy 。如果后端服务是 tcp ,可以用反向代理软件包裹一层 tls ,然后使用 sni proxy 分流,client 端使用 stunnel 或者 gost 还原出 tcp 。

sni proxy 推荐使用 nginx 的 stream 模块,可以在生产环境稳定运行,也可以动态修改 nginx 配置文件然后 nginx -reload
strp
102 天前
LanCache 算不算生产。。不过 SNIProxy 已经停更了,用的人不多的话也许可以试试 cloudflared 的反代,它支持路径自定义,基于 WAF 的 ACL 和 TCP 代理。
lolo1
102 天前
在 k8s 里面做一个网关根据域名分发呢
RobinFai
102 天前
后端是 redis 这一类的 tcp 服务的话,服务本身不一定是 tls ,所以也没法用 sni 代理过去。另外对应的客户端也没有 tls 配置(部分产品支持 tls 应该不再这个讨论范围里)。

如果定制客户端的 http CONNECT 和 proxy protocol 的封装就行了。

不能定制客户端的话,只能用端口映射应该是没有别的办法了。
annoygaga
102 天前
@just1 是的,我是这么做的,证书来自 letsencrypt
annoygaga
102 天前
@oott123 我感觉我自己写一个也很容易,在考虑自己写,nginx 主要是每次多租户增加,动态 load 有点烦
annoygaga
102 天前
@oott123 不过不是很明白为什么没人用
annoygaga
102 天前
@yinmin 后端是 tcp ,目前准备用 letsencrypt 抱一层,nginx 这个靠谱吗?我看自己写一个貌似也不复杂
annoygaga
102 天前
@strp 这个没用过呢,我看着自己实现一个 sni proxy 貌似也不复杂?看上去就是解析 tls hello ,然后维持连接即可,主要是对外提供服务,用不了 cloudflare
annoygaga
102 天前
@zzh0410 是打算这么做的,目前的问题在于,服务是 tcp 的,拿不到域名,只有 tls 还保留的域名
annoygaga
102 天前
@RobinFai 我是准备抱一层 tls ,redis 也可以包一层 tls 的,通过 tls 来搞到域名做转发
RobinFai
102 天前
如果是支持 tls 协议的话,是可以用 sni proxy 的。建议用 envoy 去 proxy ,省心省力,静态配置和动态配置都能支持,代理连接池啥的也都有。
RobinFai
102 天前
看帖子提到了 letsencrypt ,应该是不想花钱签泛域名证书。 那应该是要自己维护定时任务去续签和新签发 tls 证书,然后维护 域名和后端 ip 端口的映射关系,再把对应的关系转换成代理配置下发到代理服务。
kur0d3s
102 天前
mTLS ? 印象中企业版的 server 是支持的,不知道 ce 版本用 haproxy 之类的代理终结 tls ,是否可行
annoygaga
102 天前
@RobinFai 是的,但我看自己写一个 sni proxy 貌似也不难?有什么坑么
annoygaga
102 天前
@kur0d3s sni proxy 的话应该是不终结 tls 的

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

https://ex.noerr.eu.org/t/1146733

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

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

© 2021 V2EX