冒死分析: Ingress 没有准备好成为"统一流量入口"

136 天前
 easterfan

目前在做的专有云领域,一个基于 k8s 的容器云迁云项目, 集群稳定运行一年后,有天突然出现 P0 事故,全平台入口宕机,事后将 ingress 架构一拆为三,写了一篇博客记录; 但是对 ingress 了解不深,观点可能有失偏颇

所以发到 v2 上,给大佬们批评指正

原文地址(博客托管在 github pages 上,加载可能很慢,请见谅):👇🏻

冒死分析:Ingress 没有准备好成为"统一流量入口"

4589 次点击
所在节点    云计算
55 条回复
lasuar
136 天前
此外,你这个标题属实夸张!
renmu
136 天前
@iv2ex 能玩,只不过运营越来越不当人,玩得人越来越少了
easterfan
136 天前
@billzhuang 是的,这个 bug 也是提在 ingress-ingress-controller 下的 https://github.com/kubernetes/ingress-nginx/issues/5492
huihuimoe
136 天前
有个问题不太理解,为何 udp 应用要接 ingress 。
而不是使用 metallb 之类的 service lb 去承载?
rushssss
136 天前
实际上 ingress-nginx 在处理后端 endpoint slices 变化时已经尽可能想办法避免频繁的 reload ,参考: https://kubernetes.github.io/ingress-nginx/how-it-works/#avoiding-reloads-on-endpoints-changes

但是在 endpoint slices 从 0 -> 1 或是从 1 -> 0 的这两种情况下依然会触发 Reload, 或许楼主当时要是能给 Pod 多整几个副本就能正好绕过这个问题 :)

当然正经解决方案还是可以考虑用 envoy 这类真正不用 reload 的中间件,或者直接把 TCP/UDP 流量直接通过 SLB 打到 nodeport 上
svatyvabin
136 天前
@easterfan 而且我没记错的话,reload 好像还会把 websocket 断掉。
jqknono
136 天前
这种 debug 经验没有任何分享价值
anubu
136 天前
大一统应该是 gateway api 吧,似乎很少看到相关分享。
easterfan
136 天前
@anubu 是的,我们有 csb ,做熔断限流,路由转发,比 ingress 功能更丰富,但是现在还没启用
easterfan
136 天前
@jqknono 坏的经验和好的经验一样 具有参考价值
easterfan
136 天前
@svatyvabin websocket 暂时还没观察到,reload 把 worker 进程耗尽,倒是非常明显,ingress 独占的 8C16G 机器,worker 数是 8 ,基本 10 次左右,1min 内就可以复现 worker 进程耗尽的现象了
easterfan
136 天前
@cheng6563 我也遇到过,最后发现是格式问题,最后好像是加了个 | 还是去掉个 | 解决的
easterfan
136 天前
@adamwym 这个不太确定,nginx 频繁 reload ,是副本数变化导致的,跟 upstream 地址来源应该没关系吧?
momo24672
136 天前
好奇这个 reload 是 nginx ingress 有,还是所有的 ingress 比如 kong 也会有。
ysicing
136 天前
@cheng6563 traefik 性能咋样,计划后面用 traefik ,traefik 插件挺好用的😂
easterfan
136 天前
@cheng6563 感谢提醒,我回去找一下这个报错
1. annotation 引起格式问题导致 ngixn 挂
2. 频繁 reload 场景耗尽 worker 进程,导致 ingress 挂

使用 nginx-ingress 做全局流量入口,这两种场景是全局宕机的风险
fsdrw08
136 天前
我的理解,ingress 只能算是反向代理的规则,至于反向代理是如何实现这些规则的还得看各家 ingress provider 的方法,所以不能说 ingress 不行,就案例来说,就是 nginx reload 导致的问题。当然,大项目,多后台的情况,应该考虑使用 api gateway
corvofeng
136 天前
看起来是转发 UDP 请求遇到的 如果是 HTTP 请求 是不会触发 reload 的 会由 Lua 来配置后端
corvofeng
136 天前
看起来是转发 UDP 请求遇到的 如果是 HTTP 请求 是不会触发整体 reload 的 会由 Lua 来配置 upstream 后端
aitianci
135 天前
@Zaden #2 时代的眼泪😭

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

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

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

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

© 2021 V2EX