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

2025 年 7 月 21 日
 annoygaga

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

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

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

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

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

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

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

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

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

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

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

© 2021 V2EX