共计 953 个字符,预计需要花费 3 分钟才能阅读完成。
更新日志
2024-04-17
在阿里云的NLB上,也遇到了类似问题。
解决方式类似:在后端服务器组中关闭 开启客户端地址保持
故障表现
线上使用的位于旧 k8s 集群并没有实现从外部调用 apiserver 的高可用。这个集群有 3 个 master 节点。但是运维设施在调用时,只是访问其中一台 master 的 ip:6443
。如果这台 master 宕机,就需要修改调用的IP。这样会加大修复时长。
于是我在 华为云 和 AWS 上创建了 NLB 作为 apiserver 的访问入口。NLB 上创建 6443 监听器 ,将请求平均分发到三个 master 的 6443 端口。
但是我在使用 NLB IP:6443
访问 apiserver 时,华为云 一切正常,AWS 出现了间歇性的超时。
排查思路
- 观察监控
从 NLB 本身的监控和后端健康检查上来看,均没有异常。
-
控制变量,对比排查
访问 NLB 时,其他方式均保持不变。只更换客户端,即换其他机器来访问 NLB。
发现只有当在 master 上访问时会间歇性超时,在worker节点和其他无关机器上访问多次,均没有发生超时。
- 结论:可能和master本身有关,尚不清楚原因。
- 循环测试
写了个简单脚本,循环测试从三台 master 上访问NLB大约 100 次,每台master上观测到超时大约在 30 余次。即大约三分之一的概率超时。
- 结论:到现在,已经有点模糊的猜测。三分之一概率这个太过于巧合,master 刚好也是三台。是不是当把某台 master 作为客户端,请求 NLB ,NLB 又把请求落到这台 master 上时,会出现故障?
- 剔除后端
上面已经有猜测,于是我将 A master 从 NLB 的后端服务器组中移除,再分别在 A B C 三台 master上 执行循环测试访问LB。
超时率 A:0% B:约50% C:约50%
结论:很清晰了,验证了我的猜测,但是这是为什么?
-
查阅 AWS NLB 官方文档
至此结论已经很明显,NLB 当开启客户端IP保留时,会导致 NAT 回环。
-
关闭
保留客户端IP
检查 NLB 的配置,发现 保留客户端IP 是创建 NLB 的默认参数。遂关闭。关闭后再次测试,未复现超时情况。
结论
我目前做的海外业务不同于国内,国内是可以自行租赁IDC机房,基础设施统一,而海外没有这个条件,只能使用公有云。
而不同的公有云之间差异巨大,运维的心智成本比较高。