目前在做的专有云领域,一个基于 k8s 的容器云迁云项目, 部署 k8s 底座集群时,需要使用某专有云厂商提供的 slb 产品, 不小心踩到的坑,写了一篇博客记录; 但是对 slb 产品了解不深,观点可能有失偏颇
所以发到 v2 上,给大佬们批评指正
原文地址(博客托管在 github pages 上,加载可能很慢,请见谅):👇🏻
1
Alliot 2023-10-26 10:16:43 +08:00
|
2
Reficul 2023-10-26 10:20:50 +08:00 1
这个好像是 lvs snat 转发模式的限制
|
3
perfectlife 2023-10-26 10:24:08 +08:00
确实遇到过这个问题,还是挺恶心的,但是嘛只能忍了
|
4
ttvast 2023-10-26 10:28:57 +08:00
不同的技术方案有不同的优缺点。
LVS 就是有很多优势,自然也有这样的缺点。你完全可以调整业务逻辑,让 RIP 服务器不要访问自己的 VIP 。 |
5
cyaki 2023-10-26 10:32:04 +08:00
记得 AWS 的可以访问自己
|
6
opengps 2023-10-26 10:34:56 +08:00
slb 的出发点就是内网集群提高负载,所以这个产品从一出来就不能配置连接外边的节点加入集群
|
7
FabricPath 2023-10-26 10:40:22 +08:00
为什么不能访问自己? 你注意观察一下你 RS 收到的报文,源 IP 是不是就是你真正的 IP ,L4LB 并没有给你做 SNAT ;
那问题来了,如果你自己访问自己,10.0.10.1 访问 VIP 172.16.0.1 ,RS 是 10.0.10.1 ,那你收到的报文是什么样子的? 是 10.0.10.1 -> 10.0.10.1 ,那么你回的报文在本地就终结了,不会回到 L4LB ,所以就不通了。 为什么 L7 的可以?因为 L7 是用户态代理,通过 TOA 或者 Header 的方式传递真正的 ClientIP ,Upstream 收到的报文的 SrcIP 是 L7LB 实例的 IP 。 为什么有的 L4LB 可以?因为 L4LB 分好几种模式,FULLNAT 模式的可以,但是 FULLNAT 一般是低端技术的代名词,限制非常多。 |
8
FabricPath 2023-10-26 10:45:18 +08:00
L4LB 一般都是做公网接入,IN-CLUSTER LB 方案太多,一般也不会去买云上 LB 实例,所以说到底,还是这个场景需求太小(小到忽略不计,基本没见过这么用的),但是对 L4LB 的稳定性、扩展性、性能都是个巨大挑战,并且还会有”怎么看到真实的 ClientIP“的问题,不能告诉用户”你要在你机器上装一个 TOA 模块“吧。
|
9
rrfeng 2023-10-26 10:48:32 +08:00
这又不是设计出来的……
|
10
isno 2023-10-26 13:36:51 +08:00
这几天正在写这方面的内容,https://www.thebyte.com.cn/balance/balance4-net.html 略微说几句。
@FabricPath 的回复说明了原因,L4LB 的定位做公网集群入口的。 我不知道你们为何要 RS 访问 DS ,但武断地说一句:集群内部机器再通过公网入口访问内部服务,这才是一个坏的设计。 |
11
dropdatabase 2023-10-26 15:27:06 +08:00
这个问题很多年了。自建 k8s 时遇到过,最后 apiserver 换成了公网 SLB.....
|
12
devopsdogdog 2023-10-26 15:30:32 +08:00
集群内部 肯定是走内网吧,只能说你有需求,或者是场景限制,算不上坏。
|
13
easterfan OP @Alliot
博客是直接从本地导出 html ,样式比较极简😂 一开始没用 svc ,主要是考虑到有环路依赖,kubelet apiserver 依赖 ipvs ipvs 依赖 kubeproxy 写入规则 kubeproxy pod 的存活依赖 kubelet ,如果 kubeproxy 挂了规则被刷新了,会有死锁问题~ |
15
fairytale 2023-10-26 21:53:04 +08:00 via Android
家用路由器也是,好像要搞什么端口回流。
|
16
Reficul 2023-10-27 11:17:24 +08:00
我记得 lvs 的这个限制可以通过某个内核参数控制,但是可能会存在安全问题。 另外,FULLNAT 模式也可以解决,但是代价是可能看不到真实的 sip 。
|
17
CheckMySoul 2023-10-27 13:52:55 +08:00
阿里云不是有内网负载均衡吗,试试那个呢。
|